diff --git a/DEPS b/DEPS index ac72a5c..b553a0c 100644 --- a/DEPS +++ b/DEPS
@@ -142,11 +142,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '38ae3f42fec129839767e96b05ada677c2f9b22d', + 'skia_revision': '0e0113dcbd9ad8a54071e631e147aa02c1b7fb5b', # 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': '7a88817255bf8557ebdcff2dacaf4cf6f1ff8ecd', + 'v8_revision': '63edc02cda79436625d5bc9a9b608857722a56bd', # 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. @@ -154,11 +154,11 @@ # 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': '6b5830333673c370d9ee086af3e14a9c5e46b928', + 'angle_revision': 'cb335463f56082e4e3803d4693c11f895ba774b5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': 'a29aa7717ff8963249d44e2163b78689dfde7565', + 'swiftshader_revision': '463fab94fa2bbb5a694a185c6fc2e1036fd241c2', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -205,7 +205,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': 'e9399f9f929fbb6cc36a9f8fcae866e75512d487', + 'catapult_revision': '0c5ef59218561b0b28ad476fe7b7ed23e9c8432b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -221,7 +221,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'feed_revision': 'fe5535b8c88fb3a610273bf115afa4e6a706f565', + 'feed_revision': '6bd5f95e33bfa4ce1be7948c28d773e7d9247825', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_sdk_build-tools_version # and whatever else without interference from each other. @@ -1191,7 +1191,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'd1674c0531e0260965667cd9c70609bc1c4cccb2', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'e4ad8eb17f19551943940cf8f9123b45e2439ae1', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1359,7 +1359,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '91350f8ecf9ab2922ee062c114e4a759f24bd8d0', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '02d7d353a90bccc6fdd0e517af31fab50944d31c', + Var('webrtc_git') + '/src.git' + '@' + '2c5af4f6dce2cf34ad49bb9a6303561d4f3eea58', 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d', @@ -1400,7 +1400,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@097e6a0deb3091ac1c592c18ab61b4e2162467cd', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a0fb8142b952130ea29c21b5c4484526a81fd0f3', 'condition': 'checkout_src_internal', }, @@ -1408,7 +1408,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_android_play_core_verification', - 'version': 'sPjmEe18bOaRHsFxIEohCPLEibGhrlFv-_ZcpEywt7YC', + 'version': '4hAx_nDBLvvQHfRMqLEB4ot_jERn_Wpuwxuap5Ii4PsC', }, ], 'condition': 'checkout_android',
diff --git a/WATCHLISTS b/WATCHLISTS index c9e1a7e6..5c64506a 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -2517,7 +2517,6 @@ 'send_tab_to_self': ['hansberry+watch-send_tab_to_self@chromium.org', 'jeffreycohen+watch-send_tab_to_self@chromium.org', 'jlklein+watch-send_tab_to_self@chromium.org', - 'sebsg+watch-send_tab_to_self@chromium.org', 'tgupta+watch@chromium.org'], 'service_worker': ['horo+watch@chromium.org', 'jsbell+serviceworker@chromium.org',
diff --git a/android_webview/browser/aw_contents_io_thread_client.cc b/android_webview/browser/aw_contents_io_thread_client.cc index 6970928..89a1785 100644 --- a/android_webview/browser/aw_contents_io_thread_client.cc +++ b/android_webview/browser/aw_contents_io_thread_client.cc
@@ -8,7 +8,6 @@ #include <memory> #include <utility> -#include "android_webview/browser/input_stream.h" #include "android_webview/browser/net/aw_web_resource_request.h" #include "android_webview/browser/net/aw_web_resource_response.h" #include "android_webview/common/devtools_instrumentation.h" @@ -20,7 +19,6 @@ #include "base/bind.h" #include "base/containers/flat_set.h" #include "base/lazy_instance.h" -#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/synchronization/lock.h" #include "base/threading/scoped_blocking_call.h" @@ -360,7 +358,7 @@ }; // Record UMA whether the request was intercepted and if so what kind of scheme. -void RecordInterceptedScheme(bool response_is_null, const std::string& url) { +void RecordInterceptedType(bool response_is_null, const std::string& url) { InterceptionType type = InterceptionType::kNoIntercept; if (!response_is_null) { GURL gurl(url); @@ -380,37 +378,6 @@ "Android.WebView.ShouldInterceptRequest.InterceptionType", type); } -// Record UMA for the custom response status code for the intercepted requests -// where input stream is null. UMA is recorded only when the status codes and -// reason phrases are actually valid. -void RecordResponseStatusCode(JNIEnv* env, AwWebResourceResponse* response) { - DCHECK(response); - DCHECK(!response->GetInputStream(env)); - - int status_code; - std::string reason_phrase; - bool status_info_valid = - response->GetStatusInfo(env, &status_code, &reason_phrase); - - if (!status_info_valid) { - // Status code is not necessary set properly in the response, - // e.g. Webview's WebResourceResponse(String, String, InputStream) [*] - // does not actually set the status code or the reason phrase. In this case - // we just record a zero status code. - // The other constructor (long version) or the #setStatusCodeAndReasonPhrase - // method does actually perform validity checks on status code and reason - // phrase arguments. - // [*] - // https://developer.android.com/reference/android/webkit/WebResourceResponse.html - status_code = 0; - } - - base::UmaHistogramSparse( - "Android.WebView.ShouldInterceptRequest.NullInputStream." - "ResponseStatusCode", - status_code); -} - std::unique_ptr<AwWebResourceResponse> RunShouldInterceptRequest( AwWebResourceRequest request, JavaObjectWeakGlobalRef ref) { @@ -434,19 +401,10 @@ java_web_resource_request.jheader_names, java_web_resource_request.jheader_values); - RecordInterceptedScheme(ret.is_null(), request.url); + RecordInterceptedType(ret.is_null(), request.url); - if (ret.is_null()) - return std::unique_ptr<AwWebResourceResponse>(nullptr); - - AwWebResourceResponse* response = new AwWebResourceResponse(ret); - if (!response->GetInputStream(env)) { - // Only record UMA for cases where the input stream is null (see - // crbug.com/974273). - RecordResponseStatusCode(env, response); - } - - return std::unique_ptr<AwWebResourceResponse>(response); + return std::unique_ptr<AwWebResourceResponse>( + ret.is_null() ? nullptr : new AwWebResourceResponse(ret)); } std::unique_ptr<AwWebResourceResponse> ReturnNull() {
diff --git a/ash/app_list/model/app_list_folder_item.cc b/ash/app_list/model/app_list_folder_item.cc index dce9e93d..249ed52 100644 --- a/ash/app_list/model/app_list_folder_item.cc +++ b/ash/app_list/model/app_list_folder_item.cc
@@ -55,21 +55,6 @@ metadata()->is_persistent = is_persistent; } -bool AppListFolderItem::CompareForTest(const AppListItem* other) const { - if (!AppListItem::CompareForTest(other)) - return false; - const AppListFolderItem* other_folder = - static_cast<const AppListFolderItem*>(other); - if (other_folder->item_list()->item_count() != item_list_->item_count()) - return false; - for (size_t i = 0; i < item_list_->item_count(); ++i) { - if (!item_list()->item_at(i)->CompareForTest( - other_folder->item_list()->item_at(i))) - return false; - } - return true; -} - bool AppListFolderItem::ShouldAutoRemove() const { return ChildItemCount() <= (IsPersistent() ? 0u : 1u); }
diff --git a/ash/app_list/model/app_list_folder_item.h b/ash/app_list/model/app_list_folder_item.h index 86f171e..ea06cf7 100644 --- a/ash/app_list/model/app_list_folder_item.h +++ b/ash/app_list/model/app_list_folder_item.h
@@ -65,7 +65,6 @@ const char* GetItemType() const override; AppListItem* FindChildItem(const std::string& id) override; size_t ChildItemCount() const override; - bool CompareForTest(const AppListItem* other) const override; // Persistent folders will be retained even if there is 1 app in them. bool IsPersistent() const;
diff --git a/ash/app_list/model/app_list_item.cc b/ash/app_list/model/app_list_item.cc index bd9ecd7..5dac3c5 100644 --- a/ash/app_list/model/app_list_item.cc +++ b/ash/app_list/model/app_list_item.cc
@@ -67,13 +67,6 @@ return 0; } -bool AppListItem::CompareForTest(const AppListItem* other) const { - return id() == other->id() && folder_id() == other->folder_id() && - name() == other->name() && short_name_ == other->short_name_ && - GetItemType() == other->GetItemType() && - position().Equals(other->position()); -} - std::string AppListItem::ToDebugString() const { return id().substr(0, 8) + " '" + name() + "'" + " [" + position().ToDebugString() + "]";
diff --git a/ash/app_list/model/app_list_item.h b/ash/app_list/model/app_list_item.h index fe700c1..88b1b7ac 100644 --- a/ash/app_list/model/app_list_item.h +++ b/ash/app_list/model/app_list_item.h
@@ -85,9 +85,7 @@ // Returns the number of child items if it has any (e.g. is a folder) or 0. virtual size_t ChildItemCount() const; - // Utility functions for sync integration tests. - virtual bool CompareForTest(const AppListItem* other) const; - virtual std::string ToDebugString() const; + std::string ToDebugString() const; bool is_folder() const { return metadata_->is_folder; }
diff --git a/ash/app_list/views/app_list_folder_view.cc b/ash/app_list/views/app_list_folder_view.cc index 5f25b8c..97f6231 100644 --- a/ash/app_list/views/app_list_folder_view.cc +++ b/ash/app_list/views/app_list_folder_view.cc
@@ -36,7 +36,7 @@ #include "ui/gfx/geometry/rect_conversions.h" #include "ui/strings/grit/ui_strings.h" #include "ui/views/accessibility/view_accessibility.h" -#include "ui/views/background.h" +#include "ui/views/animation/animation_delegate_views.h" #include "ui/views/controls/label.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/painter.h" @@ -64,62 +64,82 @@ // Transit from the background of the folder item's icon to the opened // folder's background when opening the folder. Transit the other way when // closing the folder. -class BackgroundAnimation : public gfx::SlideAnimation, - public gfx::AnimationDelegate { +class BackgroundAnimation : public AppListFolderView::Animation, + public views::AnimationDelegateViews { public: - BackgroundAnimation(bool show, AppListFolderView* folder_view) - : gfx::SlideAnimation(this), show_(show), folder_view_(folder_view) { + BackgroundAnimation(bool show, + AppListFolderView* folder_view, + views::View* background_view) + : AnimationDelegateViews(background_view), + show_(show), + animation_(this), + folder_view_(folder_view), + background_view_(background_view) { + animation_.SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN); + animation_.SetSlideDuration( + AppListConfig::instance().folder_transition_in_duration_ms()); + } + + ~BackgroundAnimation() override = default; + + private: + // AppListView::Animation: + void ScheduleAnimation() override { // Calculate the source and target states. const int icon_radius = AppListConfig::instance().folder_icon_radius(); const int folder_radius = AppListConfig::instance().folder_background_radius(); from_radius_ = show_ ? icon_radius : folder_radius; to_radius_ = show_ ? folder_radius : icon_radius; - from_rect_ = show ? folder_view_->folder_item_icon_bounds() - : folder_view_->background_view()->bounds(); - to_rect_ = show ? folder_view_->background_view()->bounds() - : folder_view_->folder_item_icon_bounds(); + from_rect_ = show_ ? folder_view_->folder_item_icon_bounds() + : background_view_->bounds(); + from_rect_ -= background_view_->bounds().OffsetFromOrigin(); + to_rect_ = show_ ? background_view_->bounds() + : folder_view_->folder_item_icon_bounds(); + to_rect_ -= background_view_->bounds().OffsetFromOrigin(); const SkColor background_color = AppListConfig::instance().folder_background_color(); - from_color_ = show_ ? AppListConfig::instance().folder_bubble_color() - : background_color; - to_color_ = show_ ? background_color - : AppListConfig::instance().folder_bubble_color(); + const SkColor from_color = + show_ ? AppListConfig::instance().folder_bubble_color() + : background_color; + const SkColor to_color = + show_ ? background_color + : AppListConfig::instance().folder_bubble_color(); - SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN); - SetSlideDuration( - AppListConfig::instance().folder_transition_in_duration_ms()); + background_view_->layer()->SetColor(from_color); + background_view_->layer()->SetClipRect(from_rect_); + background_view_->layer()->SetRoundedCornerRadius( + gfx::RoundedCornersF(from_radius_)); - folder_view_->UpdateBackgroundMask( - from_radius_, - folder_view_->background_view()->bounds().InsetsFrom(from_rect_)); + // We use the layer animation for the color, while gfx::Animation to update + // the corner radius and the clip rect. They can be slightly inconsistent + // since these animations run independently. + ui::ScopedLayerAnimationSettings settings( + background_view_->layer()->GetAnimator()); + settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( + AppListConfig::instance().folder_transition_in_duration_ms())); + settings.SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN); + background_view_->layer()->SetColor(to_color); + + animation_.Show(); } - ~BackgroundAnimation() override = default; + bool IsAnimationRunning() override { return animation_.is_animating(); } - private: // gfx::AnimationDelegate void AnimationProgressed(const gfx::Animation* animation) override { const double progress = animation->GetCurrentValue(); const int current_radius = gfx::Tween::IntValueBetween(progress, from_radius_, to_radius_); - const SkColor current_color = - gfx::Tween::ColorValueBetween(progress, from_color_, to_color_); - const gfx::Rect current_rect = gfx::Tween::RectValueBetween( - animation->GetCurrentValue(), from_rect_, to_rect_); - - folder_view_->background_view()->SetBackground( - views::CreateSolidBackground(current_color)); - folder_view_->UpdateBackgroundMask( - current_radius, - folder_view_->background_view()->bounds().InsetsFrom(current_rect)); - folder_view_->background_view()->SchedulePaint(); + background_view_->layer()->SetRoundedCornerRadius( + gfx::RoundedCornersF(current_radius)); + const gfx::Rect current_bounds = + gfx::Tween::RectValueBetween(progress, from_rect_, to_rect_); + background_view_->layer()->SetClipRect(current_bounds); } - void AnimationEnded(const gfx::Animation* animation) override { folder_view_->RecordAnimationSmoothness(); } - void AnimationCanceled(const gfx::Animation* animation) override { AnimationEnded(animation); } @@ -128,43 +148,48 @@ const bool show_; // The source and target state of the background's corner radius. - int from_radius_; - int to_radius_; + int from_radius_ = 0; + int to_radius_ = 0; - // The source and target state of the background's bounds. + // The source and target state of the bounds of the background. gfx::Rect from_rect_; gfx::Rect to_rect_; - // The source and target state of the background's color. - SkColor from_color_; - SkColor to_color_; - + gfx::SlideAnimation animation_; AppListFolderView* const folder_view_; // Not owned. + views::View* const background_view_; // Not owned. DISALLOW_COPY_AND_ASSIGN(BackgroundAnimation); }; // Decrease the opacity of the folder item's title when opening the folder. // Increase it when closing the folder. -class FolderItemTitleAnimation : public gfx::SlideAnimation, - public gfx::AnimationDelegate { +class FolderItemTitleAnimation : public AppListFolderView::Animation, + public views::AnimationDelegateViews { public: FolderItemTitleAnimation(bool show, AppListFolderView* folder_view) - : gfx::SlideAnimation(this), show_(show), folder_view_(folder_view) { + : views::AnimationDelegateViews(folder_view), + show_(show), + animation_(this), + folder_view_(folder_view) { // Calculate the source and target states. from_color_ = show_ ? AppListConfig::instance().grid_title_color() : SK_ColorTRANSPARENT; to_color_ = show_ ? SK_ColorTRANSPARENT : AppListConfig::instance().grid_title_color(); - SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN); - SetSlideDuration( + animation_.SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN); + animation_.SetSlideDuration( AppListConfig::instance().folder_transition_in_duration_ms()); } ~FolderItemTitleAnimation() override = default; private: + // AppListFolderView::Animation: + void ScheduleAnimation() override { animation_.Show(); } + bool IsAnimationRunning() override { return animation_.is_animating(); } + // gfx::AnimationDelegate void AnimationProgressed(const gfx::Animation* animation) override { if (!folder_view_->GetActivatedFolderItemView()) @@ -193,6 +218,7 @@ SkColor from_color_; SkColor to_color_; + gfx::SlideAnimation animation_; AppListFolderView* const folder_view_; // Not owned. DISALLOW_COPY_AND_ASSIGN(FolderItemTitleAnimation); @@ -407,7 +433,6 @@ if (hide_for_reparent_) { gfx::Rect rect(folder_view_->bounds()); folder_view_->SetBoundsRect(gfx::Rect(rect.x(), rect.y(), 1, 1)); - folder_view_->UpdateBackgroundMaskBounds(); } // Reset the transform after animation so that the following folder's @@ -445,7 +470,8 @@ // contents container using layer animation, so use another layer to perform // such changes. background_view_ = AddChildView(std::make_unique<views::View>()); - background_view_->SetPaintToLayer(); + background_view_->SetPaintToLayer(ui::LAYER_SOLID_COLOR); + background_view_->layer()->SetColor(SK_ColorTRANSPARENT); background_view_->layer()->SetFillsBoundsOpaquely(false); view_model_->Add(background_view_, kIndexBackground); @@ -502,13 +528,14 @@ items_grid_view_->pagination_model()->SelectPage(0, false); // Animate the background corner radius, opacity and bounds. - background_animation_ = std::make_unique<BackgroundAnimation>(show, this); - background_animation_->Show(); + background_animation_ = + std::make_unique<BackgroundAnimation>(show, this, background_view_); + background_animation_->ScheduleAnimation(); // Animate the folder item's title's opacity. folder_item_title_animation_ = std::make_unique<FolderItemTitleAnimation>(show, this); - folder_item_title_animation_->Show(); + folder_item_title_animation_->ScheduleAnimation(); // Animate the bounds and opacity of items in the first page of the opened // folder. @@ -659,20 +686,6 @@ animation_start_frame_number_.reset(); } -void AppListFolderView::UpdateBackgroundMask(int corner_radius, - const gfx::Insets& insets) { - background_mask_ = views::Painter::CreatePaintedLayer( - views::Painter::CreateSolidRoundRectPainter(SK_ColorBLACK, corner_radius, - insets)); - background_mask_->layer()->SetFillsBoundsOpaquely(false); - background_mask_->layer()->SetBounds(background_view_->GetLocalBounds()); - background_view_->layer()->SetMaskLayer(background_mask_->layer()); -} - -void AppListFolderView::UpdateBackgroundMaskBounds() { - background_mask_->layer()->SetBounds(background_view_->GetLocalBounds()); -} - void AppListFolderView::OnTabletModeChanged(bool started) { folder_header_view()->set_tablet_mode(started); page_switcher_->set_is_tablet_mode(started); @@ -807,8 +820,7 @@ hide_for_reparent_ = false; // Transit all the states immediately to the end of folder closing animation. - background_view_->SetBackground(nullptr); - background_view_->SchedulePaint(); + background_view_->layer()->SetColor(SK_ColorTRANSPARENT); AppListItemView* activated_folder_item_view = GetActivatedFolderItemView(); if (activated_folder_item_view) { activated_folder_item_view->SetIconVisible(true);
diff --git a/ash/app_list/views/app_list_folder_view.h b/ash/app_list/views/app_list_folder_view.h index 5c749d3..1430c6a0 100644 --- a/ash/app_list/views/app_list_folder_view.h +++ b/ash/app_list/views/app_list_folder_view.h
@@ -19,10 +19,6 @@ #include "ui/views/view.h" #include "ui/views/view_model.h" -namespace gfx { -class SlideAnimation; -} // namespace gfx - namespace app_list { class AppsContainerView; @@ -108,12 +104,6 @@ // ContentsContainerAnimation. void RecordAnimationSmoothness(); - // Sets the layer mask's corner radius and insets in background. - void UpdateBackgroundMask(int corner_radius, const gfx::Insets& insets); - - // Updates the |background_mask_| layer bounds. - void UpdateBackgroundMaskBounds(); - // Called when tablet mode starts and ends. void OnTabletModeChanged(bool started); @@ -191,14 +181,11 @@ bool hide_for_reparent_ = false; - std::unique_ptr<gfx::SlideAnimation> background_animation_; - std::unique_ptr<gfx::SlideAnimation> folder_item_title_animation_; + std::unique_ptr<Animation> background_animation_; + std::unique_ptr<Animation> folder_item_title_animation_; std::unique_ptr<Animation> top_icon_animation_; std::unique_ptr<Animation> contents_container_animation_; - // The layer mask to create rounded corner. - std::unique_ptr<ui::LayerOwner> background_mask_ = nullptr; - // The compositor frame number when animation starts. base::Optional<int> animation_start_frame_number_;
diff --git a/ash/app_list/views/app_list_item_view.cc b/ash/app_list/views/app_list_item_view.cc index 5b00895..07399b9 100644 --- a/ash/app_list/views/app_list_item_view.cc +++ b/ash/app_list/views/app_list_item_view.cc
@@ -31,6 +31,7 @@ #include "ui/gfx/color_palette.h" #include "ui/gfx/font_list.h" #include "ui/gfx/geometry/point.h" +#include "ui/gfx/geometry/rounded_corners_f.h" #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/image/canvas_image_source.h" #include "ui/gfx/image/image_skia_operations.h" @@ -138,36 +139,41 @@ ~IconImageView() override = default; // views::View: + const char* GetClassName() const override { + return "AppListItemView::IconImageView"; + } void OnBoundsChanged(const gfx::Rect& previous_bounds) override { views::ImageView::OnBoundsChanged(previous_bounds); - if (icon_mask_) - icon_mask_->layer()->SetBounds(GetLocalBounds()); + if (size() != previous_bounds.size() && !insets_.IsEmpty()) + SetRoundedCornerAndInsets(corner_radius_, insets_); } // ui::LayerOwner: std::unique_ptr<ui::Layer> RecreateLayer() override { std::unique_ptr<ui::Layer> old_layer = views::View::RecreateLayer(); - // ui::Layer::Clone() does not copy mask layer, so set it explicitly here. - if (mask_corner_radius_ != 0 || !mask_insets_.IsEmpty()) - SetRoundedRectMaskLayer(mask_corner_radius_, mask_insets_); + // ui::Layer::Clone() does not copy the clip rect, so set it explicitly + // here. + if (corner_radius_ != 0 || !insets_.IsEmpty()) + SetRoundedCornerAndInsets(corner_radius_, insets_); return old_layer; } - // Sets a rounded rect mask layer with |corner_radius| and |insets| to clip - // the icon. - void SetRoundedRectMaskLayer(int corner_radius, const gfx::Insets& insets) { + // Sets the rounded corner and the clip insets. + void SetRoundedCornerAndInsets(int corner_radius, const gfx::Insets& insets) { EnsureLayer(); - icon_mask_ = views::Painter::CreatePaintedLayer( - views::Painter::CreateSolidRoundRectPainter(SK_ColorBLACK, - corner_radius, insets)); - icon_mask_->layer()->SetFillsBoundsOpaquely(false); - icon_mask_->layer()->SetBounds(GetLocalBounds()); - layer()->SetMaskLayer(icon_mask_->layer()); + layer()->SetRoundedCornerRadius(gfx::RoundedCornersF(corner_radius)); + if (insets.IsEmpty()) { + layer()->SetClipRect(GetLocalBounds()); + } else { + gfx::Rect bounds = GetLocalBounds(); + bounds.Inset(insets); + layer()->SetClipRect(bounds); + } // Save the attributes in case the layer is recreated. - mask_corner_radius_ = corner_radius; - mask_insets_ = insets; + corner_radius_ = corner_radius; + insets_ = insets; } // Ensure that the view has a layer. @@ -179,14 +185,11 @@ } private: - // The owner of a mask layer to clip the icon into circle. - std::unique_ptr<ui::LayerOwner> icon_mask_; + // The rounded corner radius. + int corner_radius_ = 0; - // The corner radius of mask layer. - int mask_corner_radius_ = 0; - - // The insets of the mask layer. - gfx::Insets mask_insets_; + // The insets to be clipped. + gfx::Insets insets_; DISALLOW_COPY_AND_ASSIGN(IconImageView); }; @@ -220,7 +223,7 @@ // smoothness. if (apps_grid_view_->IsTabletMode()) SetBackgroundBlurEnabled(true); - icon_->SetRoundedRectMaskLayer( + icon_->SetRoundedCornerAndInsets( AppListConfig::instance().folder_icon_radius(), gfx::Insets(AppListConfig::instance().folder_icon_insets())); } @@ -792,7 +795,7 @@ AppListConfig::instance().folder_unclipped_icon_dimension() / 2); const int insets = gfx::Tween::IntValueBetween( progress, AppListConfig::instance().folder_icon_insets(), 0); - icon_->SetRoundedRectMaskLayer(corner_radius, gfx::Insets(insets)); + icon_->SetRoundedCornerAndInsets(corner_radius, gfx::Insets(insets)); return; }
diff --git a/ash/public/cpp/app_list/app_list_metrics.cc b/ash/public/cpp/app_list/app_list_metrics.cc index dced363..0ab3fce 100644 --- a/ash/public/cpp/app_list/app_list_metrics.cc +++ b/ash/public/cpp/app_list/app_list_metrics.cc
@@ -9,6 +9,9 @@ namespace { +// The following constants affect logging, and should not be changed without +// deprecating the related UMA histograms. + const char kAppListSearchResultOpenTypeHistogram[] = "Apps.AppListSearchResultOpenTypeV2"; const char kAppListSearchResultOpenTypeHistogramInTablet[] = @@ -21,6 +24,13 @@ "Apps.AppListSuggestedChipOpenType.TabletMode"; const char kAppListZeroStateSuggestionOpenTypeHistogram[] = "Apps.AppList.ZeroStateSuggestionOpenType"; +// The UMA histogram that logs the length of user typed queries app list +// launcher issues to the search providers. +constexpr char kAppListLauncherIssuedSearchQueryLength[] = + "Apps.AppListLauncherIssuedSearchQueryLength"; + +// Maximum query length logged for user typed query in characters. +constexpr int kMaxLoggedUserQueryLength = 20; } // namespace @@ -72,4 +82,13 @@ SEARCH_RESULT_TYPE_BOUNDARY); } +void RecordLauncherIssuedSearchQueryLength(int query_length) { + if (query_length > 0) { + UMA_HISTOGRAM_EXACT_LINEAR( + kAppListLauncherIssuedSearchQueryLength, + std::min(query_length, kMaxLoggedUserQueryLength), + kMaxLoggedUserQueryLength); + } +} + } // namespace app_list
diff --git a/ash/public/cpp/app_list/app_list_metrics.h b/ash/public/cpp/app_list/app_list_metrics.h index 686d9926..0f53992 100644 --- a/ash/public/cpp/app_list/app_list_metrics.h +++ b/ash/public/cpp/app_list/app_list_metrics.h
@@ -90,6 +90,8 @@ ASH_PUBLIC_EXPORT void RecordZeroStateSuggestionOpenTypeHistogram( SearchResultType type); +ASH_PUBLIC_EXPORT void RecordLauncherIssuedSearchQueryLength(int query_length); + } // namespace app_list #endif // ASH_PUBLIC_CPP_APP_LIST_APP_LIST_METRICS_H_
diff --git a/ash/system/overview/overview_button_tray_unittest.cc b/ash/system/overview/overview_button_tray_unittest.cc index 55efef1b..09e75a6 100644 --- a/ash/system/overview/overview_button_tray_unittest.cc +++ b/ash/system/overview/overview_button_tray_unittest.cc
@@ -20,9 +20,11 @@ #include "ash/wm/splitview/split_view_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller_test_api.h" +#include "ash/wm/tablet_mode/tablet_mode_observer.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" #include "base/command_line.h" +#include "base/run_loop.h" #include "base/test/metrics/user_action_tester.h" #include "base/time/time.h" #include "ui/aura/client/aura_constants.h" @@ -68,6 +70,23 @@ GetTray()->PerformAction(tap); } +class TabletModeWaiter : public TabletModeObserver { + public: + TabletModeWaiter() { + Shell::Get()->tablet_mode_controller()->AddObserver(this); + loop_.Run(); + } + ~TabletModeWaiter() override { + Shell::Get()->tablet_mode_controller()->RemoveObserver(this); + } + void OnTabletModeStarted() override { loop_.QuitWhenIdle(); } + + private: + base::RunLoop loop_; + + DISALLOW_COPY_AND_ASSIGN(TabletModeWaiter); +}; + } // namespace class OverviewButtonTrayTest : public AshTestBase { @@ -84,6 +103,9 @@ ui::DeviceDataManagerTestApi().SetKeyboardDevices({ui::InputDevice( 3, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "keyboard")}); base::RunLoop().RunUntilIdle(); + // State change is asynchronous on the device. Do the same + // in this unit tests. + TabletModeController::SetUseScreenshotForTest(true); } void NotifySessionStateChanged() { @@ -108,13 +130,34 @@ // Test that tablet mode toggle changes visibility. // OverviewButtonTray should only be visible when TabletMode is enabled. // By default the system should not have TabletMode enabled. -TEST_F(OverviewButtonTrayTest, TabletModeObserverOnTabletModeToggled) { +TEST_F(OverviewButtonTrayTest, VisibilityTest) { ASSERT_FALSE(GetTray()->GetVisible()); TabletModeControllerTestApi().EnterTabletMode(); + EXPECT_TRUE(Shell::Get()->tablet_mode_controller()->InTabletMode()); EXPECT_TRUE(GetTray()->GetVisible()); TabletModeControllerTestApi().LeaveTabletMode(); EXPECT_FALSE(GetTray()->GetVisible()); + EXPECT_FALSE(Shell::Get()->tablet_mode_controller()->InTabletMode()); + + // When there is an window, it'll take an screenshot and + // switch becomes asynchronous + std::unique_ptr<aura::Window> window( + CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); + + ASSERT_FALSE(GetTray()->GetVisible()); + TabletModeControllerTestApi().EnterTabletMode(); + EXPECT_FALSE(Shell::Get()->tablet_mode_controller()->InTabletMode()); + EXPECT_FALSE(GetTray()->GetVisible()); + + TabletModeWaiter wait; + + EXPECT_TRUE(Shell::Get()->tablet_mode_controller()->InTabletMode()); + EXPECT_TRUE(GetTray()->GetVisible()); + + TabletModeControllerTestApi().LeaveTabletMode(); + EXPECT_FALSE(Shell::Get()->tablet_mode_controller()->InTabletMode()); + EXPECT_FALSE(GetTray()->GetVisible()); } // Tests that activating this control brings up window selection mode. @@ -130,6 +173,18 @@ // Verify tapping on the button again closes overview mode. GetTray()->PerformAction(CreateTapEvent()); EXPECT_FALSE(Shell::Get()->overview_controller()->InOverviewSession()); + + // Test in tablet mode. + TabletModeControllerTestApi().EnterTabletMode(); + + TabletModeWaiter wait; + + GetTray()->PerformAction(CreateTapEvent()); + EXPECT_TRUE(Shell::Get()->overview_controller()->InOverviewSession()); + + // Verify tapping on the button again closes overview mode. + GetTray()->PerformAction(CreateTapEvent()); + EXPECT_FALSE(Shell::Get()->overview_controller()->InOverviewSession()); } TEST_F(OverviewButtonTrayTest, PerformDoubleTapAction) {
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.cc b/ash/wm/tablet_mode/tablet_mode_controller.cc index 2aeb5ab..f5e33be 100644 --- a/ash/wm/tablet_mode/tablet_mode_controller.cc +++ b/ash/wm/tablet_mode/tablet_mode_controller.cc
@@ -23,6 +23,7 @@ #include "ash/wm/tablet_mode/tablet_mode_window_manager.h" #include "ash/wm/window_state.h" #include "base/bind.h" +#include "base/callback.h" #include "base/command_line.h" #include "base/location.h" #include "base/metrics/histogram.h" @@ -34,6 +35,7 @@ #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/copy_output_result.h" #include "third_party/khronos/GLES2/gl2.h" +#include "ui/aura/window_observer.h" #include "ui/base/accelerators/accelerator.h" #include "ui/compositor/layer_animation_sequence.h" #include "ui/display/display.h" @@ -179,7 +181,7 @@ /*observe_display_events=*/true, /*observe_external_pointer_device_events=*/true, /*block_internal_input_device=*/true, - /*always_show_overview_button_in_tablet_mode=*/false, + /*always_show_overview_button=*/false, }; // Defines the behavior that sticks to the current mode. Used to @@ -189,7 +191,7 @@ /*observe_display_events=*/false, /*observe_external_pointer_device_events=*/false, /*block_internal_input_device=*/false, - /*always_show_overview_button_in_tablet_mode=*/true, + /*always_show_overview_button=*/true, }; // Defines the behavior used for testing. It prevents the device from @@ -199,7 +201,7 @@ /*observe_display_events=*/true, /*observe_external_pointer_device_events=*/true, /*block_internal_input_device=*/true, - /*always_show_overview_button_in_tablet_mode=*/false, + /*always_show_overview_button=*/false, }; // Used for development purpose (currently debug shortcut shift-ctrl-alt). This @@ -210,7 +212,7 @@ /*observe_display_events=*/true, /*observe_external_pointer_device_events=*/true, /*block_internal_input_device=*/false, - /*always_show_overview_button_in_tablet_mode=*/true, + /*always_show_overview_button=*/true, }; } // namespace @@ -242,6 +244,35 @@ DISALLOW_COPY_AND_ASSIGN(TabletModeTransitionFpsCounter); }; +// An observer that observes the destruction of the |window_| and executes the +// callback. Used to run cleanup when the window is destroyed in the middle of +// certain operation. +class TabletModeController::DestroyObserver : public aura::WindowObserver { + public: + DestroyObserver(aura::Window* window, base::OnceCallback<void(void)> callback) + : window_(window), callback_(std::move(callback)) { + window_->AddObserver(this); + } + ~DestroyObserver() override { + if (window_) + window_->RemoveObserver(this); + } + + // aura::WindowObserver: + void OnWindowDestroying(aura::Window* window) override { + DCHECK_EQ(window_, window); + window_->RemoveObserver(this); + window_ = nullptr; + std::move(callback_).Run(); + } + + aura::Window* window() { return window_; } + + private: + aura::Window* window_; + base::OnceCallback<void(void)> callback_; +}; + constexpr char TabletModeController::kLidAngleHistogramName[]; //////////////////////////////////////////////////////////////////////////////// @@ -353,22 +384,25 @@ return; } - observed_window_ = window; - observed_layer_ = window->layer(); - window->AddObserver(this); - observed_layer_->GetAnimator()->AddObserver(this); + destroy_observer_ = std::make_unique<DestroyObserver>( + window, base::Bind(&TabletModeController::StopObservingAnimation, + weak_factory_.GetWeakPtr(), + /*record_stats=*/false, + /*delete_screenshot=*/true)); + animating_layer_ = window->layer(); + animating_layer_->GetAnimator()->AddObserver(this); } void TabletModeController::StopObservingAnimation(bool record_stats, bool delete_screenshot) { StopObserving(); - if (observed_layer_) - observed_layer_->GetAnimator()->RemoveObserver(this); - observed_layer_ = nullptr; - if (observed_window_) - observed_window_->RemoveObserver(this); - observed_window_ = nullptr; + ResetDestroyObserver(); + + if (animating_layer_) + animating_layer_->GetAnimator()->RemoveObserver(this); + animating_layer_ = nullptr; + if (record_stats && fps_counter_) fps_counter_->LogUma(); fps_counter_.reset(); @@ -529,12 +563,12 @@ AttemptEnterTabletMode(); } else if (!on && InTabletMode() && !can_detect_lid_angle_) { AttemptLeaveTabletMode(); + } else { + // Even if we do not change its ui mode, we should update its input device + // blocker as tablet mode events may come in because of the lid angle/or + // folio keyboard state changes but ui mode might still stay the same. + UpdateInternalInputDevicesEventBlocker(); } - - // Even if we do not change its ui mode, we should update its input device - // blocker as tablet mode events may come in because of the lid angle/or folio - // keyboard state changes but ui mode might still stay the same. - UpdateInternalInputDevicesEventBlocker(); } void TabletModeController::SuspendImminent( @@ -618,7 +652,8 @@ if (!fps_counter_) { fps_counter_ = std::make_unique<TabletModeTransitionFpsCounter>( - observed_layer_->GetCompositor(), state_ == State::kEnteringTabletMode); + animating_layer_->GetCompositor(), + state_ == State::kEnteringTabletMode); return; } @@ -628,11 +663,6 @@ StopObservingAnimation(/*record_stats=*/false, /*delete_screenshot=*/true); } -void TabletModeController::OnWindowDestroying(aura::Window* window) { - DCHECK_EQ(observed_window_, window); - StopObservingAnimation(/*record_stats=*/false, /*delete_screenshot=*/true); -} - void TabletModeController::SetEnabledForDev(bool enabled) { tablet_mode_behavior_ = enabled ? kOnForDev : kDefault; @@ -643,9 +673,8 @@ } bool TabletModeController::ShouldShowOverviewButton() const { - return InTabletMode() && - (AreInternalInputDeviceEventsBlocked() || - tablet_mode_behavior_.always_show_overview_button_in_tablet_mode); + return AreInternalInputDeviceEventsBlocked() || + tablet_mode_behavior_.always_show_overview_button; } //////////////////////////////////////////////////////////////////////////////// @@ -678,10 +707,7 @@ top_window && top_window->GetRootWindow() == Shell::GetPrimaryRootWindow(); if (use_screenshot_for_test && top_window_on_primary_display) { - screenshot_set_callback_.Reset( - base::BindOnce(&TabletModeController::FinishInitTabletMode, - weak_factory_.GetWeakPtr())); - TakeScreenshot(top_window, screenshot_set_callback_.callback()); + TakeScreenshot(top_window); } else { FinishInitTabletMode(); } @@ -702,9 +728,9 @@ if (toggle_observer_) // Null at startup and in tests. toggle_observer_->OnTabletModeToggled(false); VLOG(1) << "Exit tablet mode."; - } - UpdateInternalInputDevicesEventBlocker(); + UpdateInternalInputDevicesEventBlocker(); + } } void TabletModeController::HandleHingeRotation( @@ -1001,6 +1027,9 @@ state_ = State::kInTabletMode; if (toggle_observer_) // Null at startup and in tests. toggle_observer_->OnTabletModeToggled(true); + + UpdateInternalInputDevicesEventBlocker(); + VLOG(1) << "Enter tablet mode."; } @@ -1008,13 +1037,20 @@ screenshot_layer_.reset(); screenshot_taken_callback_.Cancel(); screenshot_set_callback_.Cancel(); + ResetDestroyObserver(); } -void TabletModeController::TakeScreenshot( - aura::Window* top_window, - base::OnceClosure on_screenshot_taken) { - DCHECK(top_window); +void TabletModeController::ResetDestroyObserver() { + destroy_observer_.reset(); +} + +void TabletModeController::TakeScreenshot(aura::Window* top_window) { DCHECK(!top_window->IsRootWindow()); + destroy_observer_ = std::make_unique<DestroyObserver>( + top_window, base::Bind(&TabletModeController::ResetDestroyObserver, + weak_factory_.GetWeakPtr())); + screenshot_set_callback_.Reset(base::BindOnce( + &TabletModeController::FinishInitTabletMode, weak_factory_.GetWeakPtr())); auto* screenshot_window = top_window->GetRootWindow()->GetChildById( kShellWindowId_ScreenRotationContainer); @@ -1025,11 +1061,13 @@ for (auto* root : roots) root->GetHost()->compositor()->SetAllowLocksToExtendTimeout(true); top_window->layer()->SetOpacity(0.f); + base::OnceClosure callback = screenshot_set_callback_.callback(); // Request a screenshot. - screenshot_taken_callback_.Reset(base::BindOnce( - &TabletModeController::OnScreenshotTaken, weak_factory_.GetWeakPtr(), - top_window, std::move(on_screenshot_taken))); + screenshot_taken_callback_.Reset( + base::BindOnce(&TabletModeController::OnScreenshotTaken, + weak_factory_.GetWeakPtr(), std::move(callback))); + const gfx::Rect request_bounds(screenshot_window->layer()->size()); auto screenshot_request = std::make_unique<viz::CopyOutputRequest>( viz::CopyOutputRequest::ResultFormat::RGBA_TEXTURE, @@ -1045,10 +1083,13 @@ } void TabletModeController::OnScreenshotTaken( - aura::Window* top_window, base::OnceClosure on_screenshot_taken, std::unique_ptr<viz::CopyOutputResult> copy_result) { - if (!copy_result || copy_result->IsEmpty()) { + aura::Window* top_window = + destroy_observer_ ? destroy_observer_->window() : nullptr; + ResetDestroyObserver(); + + if (!copy_result || copy_result->IsEmpty() || !top_window) { std::move(on_screenshot_taken).Run(); return; }
diff --git a/ash/wm/tablet_mode/tablet_mode_controller.h b/ash/wm/tablet_mode/tablet_mode_controller.h index af635ef..56cd9d3 100644 --- a/ash/wm/tablet_mode/tablet_mode_controller.h +++ b/ash/wm/tablet_mode/tablet_mode_controller.h
@@ -24,7 +24,6 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "chromeos/dbus/power/power_manager_client.h" -#include "ui/aura/window_observer.h" #include "ui/aura/window_occlusion_tracker.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/events/devices/input_device_event_observer.h" @@ -73,8 +72,7 @@ public SessionObserver, public ui::InputDeviceEventObserver, public KioskNextShellObserver, - public ui::LayerAnimationObserver, - public aura::WindowObserver { + public ui::LayerAnimationObserver { public: // Used for keeping track if the user wants the machine to behave as a // clamshell/tablet regardless of hardware orientation. @@ -160,9 +158,6 @@ void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override; void OnLayerAnimationScheduled(ui::LayerAnimationSequence* sequence) override; - // aura::WindowObserver: - void OnWindowDestroying(aura::Window* window) override; - void increment_app_window_drag_count() { ++app_window_drag_count_; } void increment_app_window_drag_in_splitview_count() { ++app_window_drag_in_splitview_count_; @@ -187,10 +182,11 @@ bool observe_display_events = true; bool observe_external_pointer_device_events = true; bool block_internal_input_device = false; - bool always_show_overview_button_in_tablet_mode = false; + bool always_show_overview_button = false; }; private: + class DestroyObserver; class TabletModeTransitionFpsCounter; friend class TabletModeControllerTestApi; @@ -290,19 +286,19 @@ // Deletes the enter tablet mode screenshot and associated callbacks. void DeleteScreenshot(); + void ResetDestroyObserver(); + // Finishes initializing for tablet mode. May be called async if a screenshot // was requested while starting initializing. void FinishInitTabletMode(); // Takes a screenshot of everything in the rotation container, except for // |top_window|. - void TakeScreenshot(aura::Window* top_window, - base::OnceClosure on_screenshot_taken); + void TakeScreenshot(aura::Window* top_window); // Called when a screenshot is taken. Creates |screenshot_widget_| which holds - // the screenshot results and stacks it under |top_window|. - void OnScreenshotTaken(aura::Window* top_window, - base::OnceClosure on_screenshot_taken, + // the screenshot results and stacks it under top window. + void OnScreenshotTaken(base::OnceClosure on_screenshot_taken, std::unique_ptr<viz::CopyOutputResult> copy_result); // The maximized window manager (if enabled). @@ -394,10 +390,12 @@ // Observer to observe the bluetooth devices. std::unique_ptr<BluetoothDevicesObserver> bluetooth_devices_observer_; - // The window and layer we are observing when animating from clamshell to - // tablet mode or vice versa. - aura::Window* observed_window_ = nullptr; - ui::Layer* observed_layer_ = nullptr; + // Observers top windows or animating window during state transition. + std::unique_ptr<DestroyObserver> destroy_observer_; + + // The layer that animates duraing tablet mode <-> clamshell + // transition. It's observed to take an action after its animation ends. + ui::Layer* animating_layer_ = nullptr; std::unique_ptr<TabletModeTransitionFpsCounter> fps_counter_;
diff --git a/base/BUILD.gn b/base/BUILD.gn index 9115cd59..f55dd7d 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -376,8 +376,6 @@ "mac/mach_port_broker.mm", "mac/mach_port_rendezvous.cc", "mac/mach_port_rendezvous.h", - "mac/mach_port_util.cc", - "mac/mach_port_util.h", "mac/objc_release_properties.h", "mac/objc_release_properties.mm", "mac/os_crash_dumps.cc",
diff --git a/base/mac/mach_port_util.cc b/base/mac/mach_port_util.cc deleted file mode 100644 index 0eee210..0000000 --- a/base/mac/mach_port_util.cc +++ /dev/null
@@ -1,136 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/mac/mach_port_util.h" - -#include "base/logging.h" - -namespace base { - -namespace { - -// Struct for sending a complex Mach message. -struct MachSendComplexMessage { - mach_msg_header_t header; - mach_msg_body_t body; - mach_msg_port_descriptor_t data; -}; - -// Struct for receiving a complex message. -struct MachReceiveComplexMessage { - mach_msg_header_t header; - mach_msg_body_t body; - mach_msg_port_descriptor_t data; - mach_msg_trailer_t trailer; -}; - -} // namespace - -kern_return_t SendMachPort(mach_port_t endpoint, - mach_port_t port_to_send, - int disposition) { - MachSendComplexMessage send_msg; - send_msg.header.msgh_bits = - MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0) | MACH_MSGH_BITS_COMPLEX; - send_msg.header.msgh_size = sizeof(send_msg); - send_msg.header.msgh_remote_port = endpoint; - send_msg.header.msgh_local_port = MACH_PORT_NULL; - send_msg.header.msgh_reserved = 0; - send_msg.header.msgh_id = 0; - send_msg.body.msgh_descriptor_count = 1; - send_msg.data.name = port_to_send; - send_msg.data.disposition = disposition; - send_msg.data.type = MACH_MSG_PORT_DESCRIPTOR; - - kern_return_t kr = - mach_msg(&send_msg.header, MACH_SEND_MSG | MACH_SEND_TIMEOUT, - send_msg.header.msgh_size, - 0, // receive limit - MACH_PORT_NULL, // receive name - 0, // timeout - MACH_PORT_NULL); // notification port - - if (kr != KERN_SUCCESS) - mach_port_deallocate(mach_task_self(), endpoint); - - return kr; -} - -base::mac::ScopedMachSendRight ReceiveMachPort(mach_port_t port_to_listen_on) { - MachReceiveComplexMessage recv_msg; - mach_msg_header_t* recv_hdr = &recv_msg.header; - recv_hdr->msgh_local_port = port_to_listen_on; - recv_hdr->msgh_size = sizeof(recv_msg); - - kern_return_t kr = - mach_msg(recv_hdr, MACH_RCV_MSG | MACH_RCV_TIMEOUT, 0, - recv_hdr->msgh_size, port_to_listen_on, 0, MACH_PORT_NULL); - if (kr != KERN_SUCCESS) - return base::mac::ScopedMachSendRight(MACH_PORT_NULL); - if (recv_msg.header.msgh_id != 0) - return base::mac::ScopedMachSendRight(MACH_PORT_NULL); - return base::mac::ScopedMachSendRight(recv_msg.data.name); -} - -mach_port_name_t CreateIntermediateMachPort( - mach_port_t task_port, - base::mac::ScopedMachSendRight port_to_insert, - MachCreateError* error_code) { - DCHECK_NE(mach_task_self(), task_port); - DCHECK_NE(static_cast<mach_port_name_t>(MACH_PORT_NULL), task_port); - - // Make a port with receive rights in the destination task. - mach_port_name_t endpoint; - kern_return_t kr = - mach_port_allocate(task_port, MACH_PORT_RIGHT_RECEIVE, &endpoint); - if (kr != KERN_SUCCESS) { - if (error_code) - *error_code = MachCreateError::ERROR_MAKE_RECEIVE_PORT; - return MACH_PORT_NULL; - } - - // Change its message queue limit so that it accepts one message. - mach_port_limits limits = {}; - limits.mpl_qlimit = 1; - kr = mach_port_set_attributes(task_port, endpoint, MACH_PORT_LIMITS_INFO, - reinterpret_cast<mach_port_info_t>(&limits), - MACH_PORT_LIMITS_INFO_COUNT); - if (kr != KERN_SUCCESS) { - if (error_code) - *error_code = MachCreateError::ERROR_SET_ATTRIBUTES; - mach_port_deallocate(task_port, endpoint); - return MACH_PORT_NULL; - } - - // Get a send right. - mach_port_t send_once_right; - mach_msg_type_name_t send_right_type; - kr = - mach_port_extract_right(task_port, endpoint, MACH_MSG_TYPE_MAKE_SEND_ONCE, - &send_once_right, &send_right_type); - if (kr != KERN_SUCCESS) { - if (error_code) - *error_code = MachCreateError::ERROR_EXTRACT_DEST_RIGHT; - mach_port_deallocate(task_port, endpoint); - return MACH_PORT_NULL; - } - DCHECK_EQ(static_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_PORT_SEND_ONCE), - send_right_type); - - // This call takes ownership of |send_once_right|. - kr = base::SendMachPort( - send_once_right, port_to_insert.get(), MACH_MSG_TYPE_COPY_SEND); - if (kr != KERN_SUCCESS) { - if (error_code) - *error_code = MachCreateError::ERROR_SEND_MACH_PORT; - mach_port_deallocate(task_port, endpoint); - return MACH_PORT_NULL; - } - - // Endpoint is intentionally leaked into the destination task. An IPC must be - // sent to the destination task so that it can clean up this port. - return endpoint; -} - -} // namespace base
diff --git a/base/mac/mach_port_util.h b/base/mac/mach_port_util.h deleted file mode 100644 index f7a7f32..0000000 --- a/base/mac/mach_port_util.h +++ /dev/null
@@ -1,48 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BASE_MAC_MACH_PORT_UTIL_H_ -#define BASE_MAC_MACH_PORT_UTIL_H_ - -#include <mach/mach.h> - -#include "base/base_export.h" -#include "base/mac/scoped_mach_port.h" - -namespace base { - -enum class MachCreateError { - ERROR_MAKE_RECEIVE_PORT, - ERROR_SET_ATTRIBUTES, - ERROR_EXTRACT_DEST_RIGHT, - ERROR_SEND_MACH_PORT, -}; - -// Sends a Mach port to |dest_port|. Assumes that |dest_port| is a send once -// right. Takes ownership of |dest_port|. -BASE_EXPORT kern_return_t SendMachPort(mach_port_t dest_port, - mach_port_t port_to_send, - int disposition); - -// Receives a Mach port from |port_to_listen_on|, which should have exactly one -// queued message. Returns |MACH_PORT_NULL| on any error. -BASE_EXPORT base::mac::ScopedMachSendRight ReceiveMachPort( - mach_port_t port_to_listen_on); - -// Creates an intermediate Mach port in |task_port| and sends |port_to_insert| -// as a mach_msg to the intermediate Mach port. -// |task_port| is the task port of another process. -// |port_to_insert| must be a send right in the current task's name space. -// Returns the intermediate port on success, and MACH_PORT_NULL on failure. -// On failure, |error_code| is set if not null. -// This method takes ownership of |port_to_insert|. On success, ownership is -// passed to the intermediate Mach port. -BASE_EXPORT mach_port_name_t CreateIntermediateMachPort( - mach_port_t task_port, - base::mac::ScopedMachSendRight port_to_insert, - MachCreateError* error_code); - -} // namespace base - -#endif // BASE_MAC_MACH_PORT_UTIL_H_
diff --git a/base/task/sequence_manager/sequence_manager.cc b/base/task/sequence_manager/sequence_manager.cc index 80d4681e..a7fc2ff3 100644 --- a/base/task/sequence_manager/sequence_manager.cc +++ b/base/task/sequence_manager/sequence_manager.cc
@@ -50,6 +50,14 @@ return *this; } +SequenceManager::Settings::Builder& +SequenceManager::Settings::Builder::SetAntiStarvationLogicForPrioritiesDisabled( + bool anti_starvation_logic_for_priorities_disabled_val) { + settings_.anti_starvation_logic_for_priorities_disabled = + anti_starvation_logic_for_priorities_disabled_val; + return *this; +} + #if DCHECK_IS_ON() SequenceManager::Settings::Builder&
diff --git a/base/task/sequence_manager/sequence_manager.h b/base/task/sequence_manager/sequence_manager.h index 5ce33bb..fa19852 100644 --- a/base/task/sequence_manager/sequence_manager.h +++ b/base/task/sequence_manager/sequence_manager.h
@@ -87,6 +87,12 @@ // If true, add the timestamp the task got queued to the task. bool add_queue_time_to_tasks = false; + // If true, the scheduler will bypass the priority-based anti-starvation + // logic that prevents indefinite starvation of lower priority tasks in the + // presence of higher priority tasks by occasionally selecting lower + // priority task queues over higher priority task queues. + bool anti_starvation_logic_for_priorities_disabled = false; + #if DCHECK_IS_ON() // TODO(alexclarke): Consider adding command line flags to control these. enum class TaskLogging { @@ -250,6 +256,18 @@ // Whether or not queueing timestamp will be added to tasks. Builder& SetAddQueueTimeToTasks(bool add_queue_time_to_tasks); + // Sets whether priority-based anti-starvation logic is disabled. By default, + // the scheduler uses priority-based anti-starvation logic that prevents + // indefinite starvation of lower priority tasks in the presence of higher + // priority tasks by occasionally selecting lower priority task queues over + // higher priority task queues. + // + // Note: this does not affect the anti-starvation logic that is in place for + // preventing delayed tasks from starving immediate tasks, which is always + // enabled. + Builder& SetAntiStarvationLogicForPrioritiesDisabled( + bool anti_starvation_logic_for_priorities_disabled); + #if DCHECK_IS_ON() // Controls task execution logging. Builder& SetTaskLogging(TaskLogging task_execution_logging);
diff --git a/base/task/sequence_manager/sequence_manager_impl_unittest.cc b/base/task/sequence_manager/sequence_manager_impl_unittest.cc index 9baffbd..a6a23858 100644 --- a/base/task/sequence_manager/sequence_manager_impl_unittest.cc +++ b/base/task/sequence_manager/sequence_manager_impl_unittest.cc
@@ -78,6 +78,11 @@ kMessagePump, }; +enum class AntiStarvationLogic { + kEnabled, + kDisabled, +}; + std::string ToString(TestType type) { switch (type) { case TestType::kMockTaskRunner: @@ -89,8 +94,21 @@ } } -std::string GetTestNameSuffix(const testing::TestParamInfo<TestType>& info) { - return StrCat({"With", ToString(info.param).substr(1)}); +std::string ToString(AntiStarvationLogic type) { + switch (type) { + case AntiStarvationLogic::kEnabled: + return "AntiStarvationLogicEnabled"; + case AntiStarvationLogic::kDisabled: + return "AntiStarvationLogicDisabled"; + } +} + +using SequenceManagerTestParams = std::pair<TestType, AntiStarvationLogic>; + +std::string GetTestNameSuffix( + const testing::TestParamInfo<SequenceManagerTestParams>& info) { + return StrCat({"With", ToString(info.param.first).substr(1), "And", + ToString(info.param.second)}); } void PrintTo(const TestType type, std::ostream* os) { @@ -147,6 +165,9 @@ class FixtureWithMockTaskRunner final : public Fixture { public: FixtureWithMockTaskRunner() + : FixtureWithMockTaskRunner(AntiStarvationLogic::kEnabled) {} + + explicit FixtureWithMockTaskRunner(AntiStarvationLogic anti_starvation_logic) : test_task_runner_(MakeRefCounted<TestMockTimeTaskRunner>( TestMockTimeTaskRunner::Type::kBoundToThread)), call_counting_clock_(BindRepeating(&TestMockTimeTaskRunner::NowTicks, @@ -159,6 +180,8 @@ .SetMessagePumpType(MessagePump::Type::DEFAULT) .SetRandomisedSamplingEnabled(false) .SetTickClock(mock_tick_clock()) + .SetAntiStarvationLogicForPrioritiesDisabled( + anti_starvation_logic == AntiStarvationLogic::kDisabled) .Build())) { // A null clock triggers some assertions. AdvanceMockTickClock(TimeDelta::FromMilliseconds(1)); @@ -220,17 +243,21 @@ class FixtureWithMockMessagePump : public Fixture { public: - FixtureWithMockMessagePump() : call_counting_clock_(&mock_clock_) { + explicit FixtureWithMockMessagePump(AntiStarvationLogic anti_starvation_logic) + : call_counting_clock_(&mock_clock_) { // A null clock triggers some assertions. mock_clock_.Advance(TimeDelta::FromMilliseconds(1)); auto pump = std::make_unique<MockTimeMessagePump>(&mock_clock_); pump_ = pump.get(); - auto settings = SequenceManager::Settings::Builder() - .SetMessagePumpType(MessagePump::Type::DEFAULT) - .SetRandomisedSamplingEnabled(false) - .SetTickClock(mock_tick_clock()) - .Build(); + auto settings = + SequenceManager::Settings::Builder() + .SetMessagePumpType(MessagePump::Type::DEFAULT) + .SetRandomisedSamplingEnabled(false) + .SetTickClock(mock_tick_clock()) + .SetAntiStarvationLogicForPrioritiesDisabled( + anti_starvation_logic == AntiStarvationLogic::kDisabled) + .Build(); sequence_manager_ = SequenceManagerForTest::Create( std::make_unique<ThreadControllerWithMessagePumpImpl>(std::move(pump), settings), @@ -299,7 +326,7 @@ class FixtureWithMessageLoop : public Fixture { public: - FixtureWithMessageLoop() + explicit FixtureWithMessageLoop(AntiStarvationLogic anti_starvation_logic) : call_counting_clock_(&mock_clock_), auto_reset_global_clock_(&global_clock_, &call_counting_clock_) { // A null clock triggers some assertions. @@ -317,6 +344,8 @@ .SetMessagePumpType(MessagePump::Type::DEFAULT) .SetRandomisedSamplingEnabled(false) .SetTickClock(mock_tick_clock()) + .SetAntiStarvationLogicForPrioritiesDisabled( + anti_starvation_logic == AntiStarvationLogic::kDisabled) .Build()); // The SequenceManager constructor calls Now() once for setting up @@ -391,19 +420,24 @@ // Convenience wrapper around the fixtures so that we can use parametrized tests // instead of templated ones. The latter would be more verbose as all method // calls to the fixture would need to be like this->method() -class SequenceManagerTest : public testing::TestWithParam<TestType>, - public Fixture { +class SequenceManagerTest + : public testing::TestWithParam<SequenceManagerTestParams>, + public Fixture { public: SequenceManagerTest() { - switch (GetParam()) { + AntiStarvationLogic anti_starvation_logic = GetAntiStarvationLogicType(); + switch (GetUnderlyingRunnerType()) { case TestType::kMockTaskRunner: - fixture_ = std::make_unique<FixtureWithMockTaskRunner>(); + fixture_ = + std::make_unique<FixtureWithMockTaskRunner>(anti_starvation_logic); break; case TestType::kMessagePump: - fixture_ = std::make_unique<FixtureWithMockMessagePump>(); + fixture_ = + std::make_unique<FixtureWithMockMessagePump>(anti_starvation_logic); break; case TestType::kMessageLoop: - fixture_ = std::make_unique<FixtureWithMessageLoop>(); + fixture_ = + std::make_unique<FixtureWithMessageLoop>(anti_starvation_logic); break; default: NOTREACHED(); @@ -474,16 +508,27 @@ return fixture_->GetNowTicksCallCount(); } + TestType GetUnderlyingRunnerType() { return GetParam().first; } + + AntiStarvationLogic GetAntiStarvationLogicType() { return GetParam().second; } + private: std::unique_ptr<Fixture> fixture_; }; -INSTANTIATE_TEST_SUITE_P(, - SequenceManagerTest, - testing::Values(TestType::kMockTaskRunner, - TestType::kMessageLoop, - TestType::kMessagePump), - GetTestNameSuffix); +INSTANTIATE_TEST_SUITE_P( + , + SequenceManagerTest, + testing::Values( + std::make_pair(TestType::kMockTaskRunner, + AntiStarvationLogic::kEnabled), + std::make_pair(TestType::kMockTaskRunner, + AntiStarvationLogic::kDisabled), + std::make_pair(TestType::kMessageLoop, AntiStarvationLogic::kEnabled), + std::make_pair(TestType::kMessageLoop, AntiStarvationLogic::kDisabled), + std::make_pair(TestType::kMessagePump, AntiStarvationLogic::kEnabled), + std::make_pair(TestType::kMessagePump, AntiStarvationLogic::kDisabled)), + GetTestNameSuffix); void PostFromNestedRunloop(scoped_refptr<TestTaskQueue> runner, std::vector<std::pair<OnceClosure, bool>>* tasks) { @@ -655,7 +700,7 @@ } TEST_P(SequenceManagerTest, NonNestableTasksDoesntExecuteInNestedLoop) { - if (GetParam() == TestType::kMockTaskRunner) + if (GetUnderlyingRunnerType() == TestType::kMockTaskRunner) return; auto queue = CreateTaskQueue(); @@ -701,7 +746,7 @@ } // namespace TEST_P(SequenceManagerTest, TaskQueueDisabledFromNestedLoop) { - if (GetParam() == TestType::kMockTaskRunner) + if (GetUnderlyingRunnerType() == TestType::kMockTaskRunner) return; auto queue = CreateTaskQueue(); std::vector<EnqueueOrder> run_order; @@ -1445,7 +1490,7 @@ DestroySequenceManager(); queue->task_runner()->PostTask(FROM_HERE, counter.WrapCallback(task.Get())); - if (GetParam() != TestType::kMessagePump) { + if (GetUnderlyingRunnerType() != TestType::kMessagePump) { RunLoop().RunUntilIdle(); } @@ -1897,7 +1942,7 @@ } TEST_P(SequenceManagerTest, QuitWhileNested) { - if (GetParam() == TestType::kMockTaskRunner) + if (GetUnderlyingRunnerType() == TestType::kMockTaskRunner) return; // This test makes sure we don't continue running a work batch after a nested // run loop has been exited in the middle of the batch. @@ -2808,7 +2853,7 @@ } TEST_P(SequenceManagerTest, BlameContextAttribution) { - if (GetParam() == TestType::kMessagePump) + if (GetUnderlyingRunnerType() == TestType::kMessagePump) return; using trace_analyzer::Query; @@ -3167,7 +3212,7 @@ } // namespace TEST_P(SequenceManagerTest, DelayedTaskRunsInNestedMessageLoop) { - if (GetParam() == TestType::kMockTaskRunner) + if (GetUnderlyingRunnerType() == TestType::kMockTaskRunner) return; auto queue = CreateTaskQueue(); RunLoop run_loop; @@ -3191,7 +3236,7 @@ } // namespace TEST_P(SequenceManagerTest, DelayedNestedMessageLoopDoesntPreventTasksRunning) { - if (GetParam() == TestType::kMockTaskRunner) + if (GetUnderlyingRunnerType() == TestType::kMockTaskRunner) return; auto queue = CreateTaskQueue(); RunLoop run_loop; @@ -3259,7 +3304,7 @@ queue->CreateQueueEnabledVoter(); voter->SetVoteToEnable(false); - switch (GetParam()) { + switch (GetUnderlyingRunnerType()) { case TestType::kMessagePump: EXPECT_EQ(TimeDelta::FromDays(1), NextPendingTaskDelay()); break; @@ -3299,21 +3344,21 @@ EXPECT_EQ(TimeDelta::FromMilliseconds(1), NextPendingTaskDelay()); voter0->SetVoteToEnable(false); - if (GetParam() == TestType::kMessageLoop) { + if (GetUnderlyingRunnerType() == TestType::kMessageLoop) { EXPECT_EQ(TimeDelta::FromMilliseconds(1), NextPendingTaskDelay()); } else { EXPECT_EQ(TimeDelta::FromMilliseconds(10), NextPendingTaskDelay()); } voter1->SetVoteToEnable(false); - if (GetParam() == TestType::kMessageLoop) { + if (GetUnderlyingRunnerType() == TestType::kMessageLoop) { EXPECT_EQ(TimeDelta::FromMilliseconds(1), NextPendingTaskDelay()); } else { EXPECT_EQ(TimeDelta::FromMilliseconds(100), NextPendingTaskDelay()); } voter2->SetVoteToEnable(false); - switch (GetParam()) { + switch (GetUnderlyingRunnerType()) { case TestType::kMessagePump: EXPECT_EQ(TimeDelta::FromDays(1), NextPendingTaskDelay()); break; @@ -3648,8 +3693,8 @@ // thread. DestroySequenceManager(); - if (GetParam() != TestType::kMessagePump && - GetParam() != TestType::kMessageLoop) { + if (GetUnderlyingRunnerType() != TestType::kMessagePump && + GetUnderlyingRunnerType() != TestType::kMessageLoop) { FastForwardUntilNoTasksRemain(); } @@ -3692,8 +3737,8 @@ // Ensure that all queues-to-gracefully-shutdown are properly unregistered. DestroySequenceManager(); - if (GetParam() != TestType::kMessagePump && - GetParam() != TestType::kMessageLoop) { + if (GetUnderlyingRunnerType() != TestType::kMessagePump && + GetUnderlyingRunnerType() != TestType::kMessageLoop) { FastForwardUntilNoTasksRemain(); } @@ -4237,7 +4282,7 @@ } TEST_P(SequenceManagerTest, GetMessagePump) { - switch (GetParam()) { + switch (GetUnderlyingRunnerType()) { default: EXPECT_THAT(sequence_manager()->GetMessagePump(), testing::IsNull()); break; @@ -4278,7 +4323,7 @@ } // namespace TEST_P(SequenceManagerTest, OnSystemIdleTimeDomainNotification) { - if (GetParam() != TestType::kMessagePump) + if (GetUnderlyingRunnerType() != TestType::kMessagePump) return; auto queue = CreateTaskQueue(); @@ -4439,14 +4484,28 @@ RunLoop().RunUntilIdle(); - EXPECT_EQ(order, - "000000000000000000000000000000000000000000000000000000000000" - "111121311214131215112314121131211151234112113121114123511211" - "312411123115121341211131211145123111211314211352232423222322" - "452322232423222352423222322423252322423222322452322232433353" - "343333334353333433333345333334333354444445444444544444454444" - "445444444544444454445555555555555555555555555555555555555555" - "666666666666666666666666666666666666666666666666666666666666"); + switch (GetAntiStarvationLogicType()) { + case AntiStarvationLogic::kDisabled: + EXPECT_EQ(order, + "000000000000000000000000000000000000000000000000000000000000" + "111111111111111111111111111111111111111111111111111111111111" + "222222222222222222222222222222222222222222222222222222222222" + "333333333333333333333333333333333333333333333333333333333333" + "444444444444444444444444444444444444444444444444444444444444" + "555555555555555555555555555555555555555555555555555555555555" + "666666666666666666666666666666666666666666666666666666666666"); + break; + case AntiStarvationLogic::kEnabled: + EXPECT_EQ(order, + "000000000000000000000000000000000000000000000000000000000000" + "111121311214131215112314121131211151234112113121114123511211" + "312411123115121341211131211145123111211314211352232423222322" + "452322232423222352423222322423252322423222322452322232433353" + "343333334353333433333345333334333354444445444444544444454444" + "445444444544444454445555555555555555555555555555555555555555" + "666666666666666666666666666666666666666666666666666666666666"); + break; + } } class CancelableTaskWithDestructionObserver {
diff --git a/base/task/sequence_manager/task_queue_selector.cc b/base/task/sequence_manager/task_queue_selector.cc index c72c7aad..5e3a14a 100644 --- a/base/task/sequence_manager/task_queue_selector.cc +++ b/base/task/sequence_manager/task_queue_selector.cc
@@ -26,6 +26,8 @@ #if DCHECK_IS_ON() random_task_selection_(settings.random_task_selection_seed != 0), #endif + anti_starvation_logic_for_priorities_disabled_( + settings.anti_starvation_logic_for_priorities_disabled), delayed_work_queue_sets_("delayed", this, settings), immediate_work_queue_sets_("immediate", this, settings) { } @@ -128,6 +130,8 @@ return std::numeric_limits<int64_t>::max(); default: + if (anti_starvation_logic_for_priorities_disabled_) + return per_priority_starvation_tolerance_[priority]; return selection_count_ + per_priority_starvation_tolerance_[priority]; } }
diff --git a/base/task/sequence_manager/task_queue_selector.h b/base/task/sequence_manager/task_queue_selector.h index 12e5edbf..2ae9b52 100644 --- a/base/task/sequence_manager/task_queue_selector.h +++ b/base/task/sequence_manager/task_queue_selector.h
@@ -251,6 +251,16 @@ const bool random_task_selection_ = false; #endif + // If true, the scheduler will bypass the priority-based anti-starvation logic + // that prevents indefinite starvation of lower priority tasks in the presence + // of higher priority tasks by occasionally selecting lower priority task + // queues over higher priority task queues. + // + // Note: this does not affect the anti-starvation logic that is in place for + // preventing delayed tasks from starving immediate tasks, which is always + // enabled. + const bool anti_starvation_logic_for_priorities_disabled_; + // Count of the number of sets (delayed or immediate) for each priority. // Should only contain 0, 1 or 2. std::array<int, TaskQueue::kQueuePriorityCount> non_empty_set_counts_ = {{0}};
diff --git a/base/task/sequence_manager/task_queue_selector_unittest.cc b/base/task/sequence_manager/task_queue_selector_unittest.cc index 9902ad9..b76a582a 100644 --- a/base/task/sequence_manager/task_queue_selector_unittest.cc +++ b/base/task/sequence_manager/task_queue_selector_unittest.cc
@@ -56,17 +56,18 @@ using TaskQueueSelector::SetOperationOldest; using TaskQueueSelector::SmallPriorityQueue; - TaskQueueSelectorForTest(scoped_refptr<AssociatedThreadId> associated_thread) - : TaskQueueSelector(associated_thread, SequenceManager::Settings()) {} + TaskQueueSelectorForTest(scoped_refptr<AssociatedThreadId> associated_thread, + const SequenceManager::Settings& settings) + : TaskQueueSelector(associated_thread, settings) {} }; -class TaskQueueSelectorTest : public testing::Test { +class TaskQueueSelectorTestBase : public testing::Test { public: - TaskQueueSelectorTest() - : test_closure_(BindRepeating(&TaskQueueSelectorTest::TestFunction)), + explicit TaskQueueSelectorTestBase(const SequenceManager::Settings& settings) + : test_closure_(BindRepeating(&TaskQueueSelectorTestBase::TestFunction)), associated_thread_(AssociatedThreadId::CreateBound()), - selector_(associated_thread_) {} - ~TaskQueueSelectorTest() override = default; + selector_(associated_thread_, settings) {} + ~TaskQueueSelectorTestBase() override = default; void PushTasks(const size_t queue_indices[], size_t num_tasks) { EnqueueOrder::Generator enqueue_order_generator; @@ -151,6 +152,15 @@ std::map<TaskQueueImpl*, size_t> queue_to_index_map_; }; +class TaskQueueSelectorTest : public TaskQueueSelectorTestBase { + public: + TaskQueueSelectorTest() + : TaskQueueSelectorTestBase( + SequenceManager::Settings::Builder() + .SetAntiStarvationLogicForPrioritiesDisabled(false) + .Build()) {} +}; + TEST_F(TaskQueueSelectorTest, TestDefaultPriority) { size_t queue_order[] = {4, 3, 2, 1, 0}; PushTasks(queue_order, 5); @@ -682,7 +692,8 @@ } TEST_F(TaskQueueSelectorTest, TestObserverWithOneBlockedQueue) { - TaskQueueSelectorForTest selector(associated_thread_); + TaskQueueSelectorForTest selector(associated_thread_, + SequenceManager::Settings()); MockObserver mock_observer; selector.SetTaskQueueSelectorObserver(&mock_observer); @@ -707,7 +718,8 @@ } TEST_F(TaskQueueSelectorTest, TestObserverWithTwoBlockedQueues) { - TaskQueueSelectorForTest selector(associated_thread_); + TaskQueueSelectorForTest selector(associated_thread_, + SequenceManager::Settings()); MockObserver mock_observer; selector.SetTaskQueueSelectorObserver(&mock_observer); @@ -749,6 +761,62 @@ task_queue2->UnregisterTaskQueue(); } +class DisabledAntiStarvationLogicTaskQueueSelectorTest + : public TaskQueueSelectorTestBase, + public testing::WithParamInterface<TaskQueue::QueuePriority> { + public: + DisabledAntiStarvationLogicTaskQueueSelectorTest() + : TaskQueueSelectorTestBase( + SequenceManager::Settings::Builder() + .SetAntiStarvationLogicForPrioritiesDisabled(true) + .Build()) {} +}; + +TEST_P(DisabledAntiStarvationLogicTaskQueueSelectorTest, + TestStarvedByHigherPriorities) { + TaskQueue::QueuePriority priority_to_test = GetParam(); + size_t queue_order[] = {0, 1}; + PushTasks(queue_order, 2); + + // Setting the queue priority to its current value causes a check to fail. + if (task_queues_[0]->GetQueuePriority() != priority_to_test) { + selector_.SetQueuePriority(task_queues_[0].get(), priority_to_test); + } + + // Test that |priority_to_test| is starved by all higher priorities. + for (int higher_priority = static_cast<int>(priority_to_test) - 1; + higher_priority >= 0; higher_priority--) { + // Setting the queue priority to its current value causes a check to fail. + if (task_queues_[1]->GetQueuePriority() != higher_priority) { + selector_.SetQueuePriority( + task_queues_[1].get(), + static_cast<TaskQueue::QueuePriority>(higher_priority)); + } + + for (int i = 0; i < 100; i++) { + WorkQueue* chosen_work_queue = selector_.SelectWorkQueueToService(); + ASSERT_THAT(chosen_work_queue, NotNull()); + EXPECT_EQ(task_queues_[1].get(), chosen_work_queue->task_queue()); + // Don't remove task from queue to simulate all queues still being full. + } + } +} + +std::string GetPriorityTestNameSuffix( + const testing::TestParamInfo<TaskQueue::QueuePriority>& info) { + return TaskQueue::PriorityToString(info.param); +} + +INSTANTIATE_TEST_SUITE_P(, + DisabledAntiStarvationLogicTaskQueueSelectorTest, + testing::Values(TaskQueue::kHighestPriority, + TaskQueue::kVeryHighPriority, + TaskQueue::kHighPriority, + TaskQueue::kNormalPriority, + TaskQueue::kLowPriority, + TaskQueue::kBestEffortPriority), + GetPriorityTestNameSuffix); + struct ChooseWithPriorityTestParam { int delayed_task_enqueue_order; int immediate_task_enqueue_order;
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index 5883842..7483620 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -229,10 +229,10 @@ # once P builds are no longer supported. https://crbug.com/943637 trichrome_shared_assets = android_sdk_release == "q" - # Whether Developer Tools should be split into a separate DFM. + # Whether Developer UIs should be split into a separate DFM. # TODO(huangs): Move this flag to its own buildflags.gni file once we # determine where the file should go. - dfmify_devtools = false + dfmify_dev_ui = false } if (notouch_build && defined(extra_keymappings)) {
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index a0e1d62..91e1eb1 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -8908988868010627552 \ No newline at end of file +8908966217427053472 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 0145f776..8d608c8 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -8908988579903450896 \ No newline at end of file +8908965079969835680 \ No newline at end of file
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index d5d3bac..d933273 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -788,9 +788,8 @@ # TODO(samans): Support more configurations. # CFI issue: https://crbug.com/967819 - # x86 issue: https://crbug.com/967831 # LSAN issue: https://crbug.com/971325 - if (use_x11 && target_cpu != "x86" && !is_cfi && !is_lsan) { + if (use_x11 && !is_cfi && !is_lsan) { defines = [ "ENABLE_CC_VULKAN_TESTS" ] } }
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc index c8ccc89..df36750 100644 --- a/cc/tiles/gpu_image_decode_cache.cc +++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -160,6 +160,16 @@ return false; } +// This helper method takes in +// - |yuva_size_info| corresponding to the plane dimensions of a YUV image +// - |info| indicating SkAlphaType and SkColorSpace per plane (though the final +// image color space is currently indicated through other means at creation +// of the YUV SkImage) +// - |memory_ptr| pointing to sufficient contiguous memory for the planes +// +// It then sets each SkPixmap to have the dimensions specified by its respective +// SkYUVAIndex within |yuva_size_info| and to point to bytes in memory at +// |planes[index]|. void SetYuvPixmapsFromSizeInfo(SkPixmap* pixmap_y, SkPixmap* pixmap_u, SkPixmap* pixmap_v, @@ -189,6 +199,41 @@ v_decode_info.minRowBytes()); } +// Helper method to fill in |scaled_u_size| and |scaled_v_size| by computing +// the mip level for each plane given the final raster dimensions and the +// unscaled U and V plane sizes. Also takes in |draw_image| to compute the Y +// plane mip level and DCHECK that the computed mip levels for U and V are +// reasonable. +// +// TODO(crbug.com/915972): Assumes 420 subsampling and DCHECKs the size ratios. +void ComputeMippedUVPlaneSizes(const gfx::Size& target_raster_size, + const gfx::Size& unscaled_u_size, + const gfx::Size& unscaled_v_size, + const DrawImage& draw_image, + gfx::Size* scaled_u_size, + gfx::Size* scaled_v_size) { + DCHECK(scaled_u_size); + DCHECK(scaled_v_size); + DCHECK_EQ(unscaled_u_size, unscaled_v_size); + DCHECK_EQ((draw_image.paint_image().width() + 1) / 2, + unscaled_u_size.width()); + const int uv_mip_level = + MipMapUtil::GetLevelForSize(unscaled_u_size, target_raster_size); + // Check that the chroma planes do not shrink *more* than the luma. + // At least for YUV420, they will shrink at most one mip level below luma, + // which avoids blurriness. + DCHECK_GE(uv_mip_level, 0); + if (CalculateUploadScaleMipLevel(draw_image) == 0) { + // If Y is not scaled, then U and V shouldn't be either. + DCHECK_EQ(uv_mip_level, 0); + } else { + DCHECK_EQ(CalculateUploadScaleMipLevel(draw_image) - 1, uv_mip_level); + } + + *scaled_u_size = MipMapUtil::GetSizeForLevel(unscaled_u_size, uv_mip_level); + *scaled_v_size = *scaled_u_size; +} + // Draws and scales the provided |draw_image| into the |target_pixmap|. If the // draw/scale can be done directly, calls directly into PaintImage::Decode. // if not, decodes to a compatible temporary pixmap and then converts that into @@ -316,23 +361,34 @@ &unscaled_pixmap_v, yuva_size_info, planes, decode_info, decode_pixmap.writable_addr()); - // Assumes YUV420 and splits decode_pixmap into pixmaps for each plane. - // TODO(crbug.com/915972): Fix this assumption. const SkImageInfo y_info_scaled = info.makeColorType(kGray_8_SkColorType); - const size_t uv_width_scaled = (y_info_scaled.width() + 1) / 2; - const size_t uv_height_scaled = (y_info_scaled.height() + 1) / 2; - const SkImageInfo uv_info_scaled = - y_info_scaled.makeWH(uv_width_scaled, uv_height_scaled); + // The target raster dimensions get passed through: + // |target_pixmap|.info() -> |pixmap|->info() -> |info| -> |y_info_scaled| + const gfx::Size target_raster_size(y_info_scaled.width(), + y_info_scaled.height()); + gfx::Size unscaled_u_size(unscaled_pixmap_u.width(), + unscaled_pixmap_u.height()); + gfx::Size unscaled_v_size(unscaled_pixmap_v.width(), + unscaled_pixmap_v.height()); + gfx::Size scaled_u_size; + gfx::Size scaled_v_size; + ComputeMippedUVPlaneSizes(target_raster_size, unscaled_u_size, + unscaled_v_size, draw_image, &scaled_u_size, + &scaled_v_size); + const SkImageInfo u_info_scaled = + y_info_scaled.makeWH(scaled_u_size.width(), scaled_u_size.height()); + const SkImageInfo v_info_scaled = + y_info_scaled.makeWH(scaled_v_size.width(), scaled_v_size.height()); const size_t y_plane_bytes = y_info_scaled.computeMinByteSize(); - const size_t u_plane_bytes = uv_info_scaled.computeMinByteSize(); + const size_t u_plane_bytes = u_info_scaled.computeMinByteSize(); DCHECK(!SkImageInfo::ByteSizeOverflowed(y_plane_bytes)); DCHECK(!SkImageInfo::ByteSizeOverflowed(u_plane_bytes)); pixmap_y->reset(y_info_scaled, data_ptr, y_info_scaled.minRowBytes()); - pixmap_u->reset(uv_info_scaled, data_ptr + y_plane_bytes, - uv_info_scaled.minRowBytes()); - pixmap_v->reset(uv_info_scaled, data_ptr + y_plane_bytes + u_plane_bytes, - uv_info_scaled.minRowBytes()); + pixmap_u->reset(u_info_scaled, data_ptr + y_plane_bytes, + u_info_scaled.minRowBytes()); + pixmap_v->reset(v_info_scaled, data_ptr + y_plane_bytes + u_plane_bytes, + v_info_scaled.minRowBytes()); const bool all_planes_scaled_successfully = unscaled_pixmap_y.scalePixels(*pixmap_y, filter_quality) && @@ -2008,18 +2064,27 @@ const bool is_bitmap_backed = !draw_image.paint_image().IsLazyGenerated() && upload_scale_mip_level == 0 && !cache_color_conversion_on_cpu; - const bool is_yuv = - draw_image.paint_image().IsYuv() && mode == DecodedDataMode::kGpu; + SkYUVASizeInfo target_yuva_size_info; + const bool is_yuv = draw_image.paint_image().IsYuv(&target_yuva_size_info) && + mode == DecodedDataMode::kGpu; // TODO(crbug.com/910276): Change after alpha support. - // TODO(crbug.com/915972): Remove YUV420 assumption. if (is_yuv) { - // We can't use |temp_yuva_size_info| because it doesn't know about - // any scaling based on mip levels that |image_info| does incorporate. size_t y_size_bytes = image_info.width() * image_info.height(); - size_t u_size_bytes = - ((image_info.width() + 1) / 2) * ((image_info.height() + 1) / 2); - size_t v_size_bytes = u_size_bytes; + const gfx::Size target_raster_size(image_info.width(), image_info.height()); + gfx::Size unscaled_u_size( + target_yuva_size_info.fSizes[SkYUVAIndex::kU_Index].width(), + target_yuva_size_info.fSizes[SkYUVAIndex::kU_Index].height()); + gfx::Size unscaled_v_size( + target_yuva_size_info.fSizes[SkYUVAIndex::kV_Index].width(), + target_yuva_size_info.fSizes[SkYUVAIndex::kV_Index].height()); + gfx::Size scaled_u_size; + gfx::Size scaled_v_size; + ComputeMippedUVPlaneSizes(target_raster_size, unscaled_u_size, + unscaled_v_size, draw_image, &scaled_u_size, + &scaled_v_size); + size_t u_size_bytes = base::checked_cast<size_t>(scaled_u_size.GetArea()); + size_t v_size_bytes = base::checked_cast<size_t>(scaled_v_size.GetArea()); data_size = y_size_bytes + u_size_bytes + v_size_bytes; }
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc index 77f3210c..6431bdb9 100644 --- a/cc/tiles/gpu_image_decode_cache_unittest.cc +++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
@@ -422,6 +422,20 @@ } } + void VerifyUploadedPlaneSizes( + GpuImageDecodeCache* cache, + const DrawImage& draw_image, + const SkISize plane_sizes[SkYUVASizeInfo::kMaxCount]) { + for (size_t i = 0; i < SkYUVASizeInfo::kMaxCount; ++i) { + // TODO(crbug.com/910276): Skip alpha plane until supported in cache. + if (i != SkYUVAIndex::kA_Index) { + auto uploaded_plane = cache->GetUploadedPlaneForTesting(draw_image, i); + ASSERT_TRUE(uploaded_plane); + EXPECT_EQ(plane_sizes[i], uploaded_plane->dimensions()); + } + } + } + protected: FakeDiscardableManager discardable_manager_; scoped_refptr<GPUImageDecodeTestMockContextProvider> context_provider_; @@ -2650,9 +2664,9 @@ EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); if (do_yuv_decode_) { - // As of M74, Skia will flatten a YUV SkImage upon calling - // makeTextureImage. Thus, we must separately request mips for each - // plane and compare to the original uploaded planes. + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. CompareAllPlanesToMippedVersions(cache.get(), draw_image, should_have_mips); EXPECT_TRUE( @@ -2727,9 +2741,9 @@ // No mips should be generated. if (do_yuv_decode_) { - // As of M74, Skia will flatten a YUV SkImage upon calling - // makeTextureImage. Thus, we must separately request mips for each - // plane and compare to the original uploaded planes. + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. CompareAllPlanesToMippedVersions(cache.get(), draw_image, false /* should_have_mips */); } else { @@ -2770,6 +2784,9 @@ // Mips should be generated if (do_yuv_decode_) { + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. CompareAllPlanesToMippedVersions(cache.get(), draw_image, true /* should_have_mips */); EXPECT_TRUE( @@ -2825,9 +2842,9 @@ // No mips should be generated. if (do_yuv_decode_) { - // As of M74, Skia will flatten a YUV SkImage upon calling - // makeTextureImage. Thus, we must separately request mips for each - // plane and compare to the original uploaded planes. + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. CompareAllPlanesToMippedVersions(cache.get(), draw_image, false /* should_have_mips */); } else { @@ -2861,6 +2878,9 @@ // Mips should be generated. if (do_yuv_decode_) { + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. CompareAllPlanesToMippedVersions(cache.get(), draw_image, true /* should_have_mips */); EXPECT_TRUE( @@ -2911,6 +2931,118 @@ } } +TEST_P(GpuImageDecodeCacheTest, + OriginalYUVDecodeScaledDrawCorrectlyMipsPlanes) { + // This test creates an image that will be YUV decoded and drawn at 80% scale. + // Because the final size is between mip levels, we expect the image to be + // decoded and uploaded at original size (mip level 0 for all planes) but to + // have mips attached since kMedium_SkFilterQuality uses bilinear filtering + // between mip levels. + if (!do_yuv_decode_) { + // The YUV case may choose different mip levels between chroma and luma + // planes. + return; + } + auto cache = CreateCache(); + bool is_decomposable = true; + SkFilterQuality filter_quality = kMedium_SkFilterQuality; + SkSize requires_decode_at_original_scale = SkSize::Make(0.8f, 0.8f); + + PaintImage image = CreatePaintImageInternal(GetNormalImageSize()); + DrawImage draw_image( + image, SkIRect::MakeWH(image.width(), image.height()), filter_quality, + CreateMatrix(requires_decode_at_original_scale, is_decomposable), + PaintImage::kDefaultFrameIndex, DefaultColorSpace()); + ImageDecodeCache::TaskResult result = + cache->GetTaskForImageAndRef(draw_image, ImageDecodeCache::TracingInfo()); + EXPECT_TRUE(result.need_unref); + EXPECT_TRUE(result.task); + + TestTileTaskRunner::ProcessTask(result.task->dependencies()[0].get()); + TestTileTaskRunner::ProcessTask(result.task.get()); + + // Must hold context lock before calling GetDecodedImageForDraw / + // DrawWithImageFinished. + viz::ContextProvider::ScopedContextLock context_lock(context_provider()); + DecodedDrawImage decoded_draw_image = + EnsureImageBacked(cache->GetDecodedImageForDraw(draw_image)); + EXPECT_TRUE(decoded_draw_image.image()); + EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); + + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. + CompareAllPlanesToMippedVersions(cache.get(), draw_image, + true /* should_have_mips */); + SkYUVASizeInfo yuv_size_info = GetYUV420SizeInfo(GetNormalImageSize()); + VerifyUploadedPlaneSizes(cache.get(), draw_image, yuv_size_info.fSizes); + + cache->DrawWithImageFinished(draw_image, decoded_draw_image); + cache->UnrefImage(draw_image); +} + +TEST_P(GpuImageDecodeCacheTest, ScaledYUVDecodeScaledDrawCorrectlyMipsPlanes) { + // This test creates an image that will be YUV decoded and drawn at 45% scale. + // Because the final size is between mip levels, we expect the image to be + // decoded and uploaded at half its original size (mip level 1 for Y plane but + // level 0 for chroma planes) and to have mips attached since + // kMedium_SkFilterQuality uses bilinear filtering between mip levels. + if (!do_yuv_decode_) { + // The YUV case may choose different mip levels between chroma and luma + // planes. + return; + } + auto cache = CreateCache(); + bool is_decomposable = true; + SkFilterQuality filter_quality = kMedium_SkFilterQuality; + SkSize less_than_half_scale = SkSize::Make(0.45f, 0.45f); + + gfx::Size image_size = GetNormalImageSize(); + PaintImage image = CreatePaintImageInternal(image_size); + DrawImage draw_image(image, SkIRect::MakeWH(image.width(), image.height()), + filter_quality, + CreateMatrix(less_than_half_scale, is_decomposable), + PaintImage::kDefaultFrameIndex, DefaultColorSpace()); + ImageDecodeCache::TaskResult result = + cache->GetTaskForImageAndRef(draw_image, ImageDecodeCache::TracingInfo()); + EXPECT_TRUE(result.need_unref); + EXPECT_TRUE(result.task); + + TestTileTaskRunner::ProcessTask(result.task->dependencies()[0].get()); + TestTileTaskRunner::ProcessTask(result.task.get()); + + // Must hold context lock before calling GetDecodedImageForDraw / + // DrawWithImageFinished. + viz::ContextProvider::ScopedContextLock context_lock(context_provider()); + DecodedDrawImage decoded_draw_image = + EnsureImageBacked(cache->GetDecodedImageForDraw(draw_image)); + EXPECT_TRUE(decoded_draw_image.image()); + EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); + + // Skia will flatten a YUV SkImage upon calling makeTextureImage. Thus, we + // must separately request mips for each plane and compare to the original + // uploaded planes. + CompareAllPlanesToMippedVersions(cache.get(), draw_image, + true /* should_have_mips */); + + // Because we intend to draw this image at 0.45 x 0.45 scale, we will upload + // the Y plane at mip level 1 (corresponding to half the original size). The + // chroma planes (U and V) should be uploaded at the same size as the Y plane, + // corresponding to mip level 0, because the largest dimensions greater than + // or equal to target dimensions for them is their original size. + SkISize mipped_plane_sizes[SkYUVASizeInfo::kMaxCount]; + mipped_plane_sizes[SkYUVAIndex::kY_Index] = SkISize::Make( + (image_size.width() + 1) / 2, (image_size.height() + 1) / 2); + mipped_plane_sizes[SkYUVAIndex::kU_Index] = + mipped_plane_sizes[SkYUVAIndex::kY_Index]; + mipped_plane_sizes[SkYUVAIndex::kV_Index] = + mipped_plane_sizes[SkYUVAIndex::kY_Index]; + VerifyUploadedPlaneSizes(cache.get(), draw_image, mipped_plane_sizes); + + cache->DrawWithImageFinished(draw_image, decoded_draw_image); + cache->UnrefImage(draw_image); +} + TEST_P(GpuImageDecodeCacheTest, GetBorderlineLargeDecodedImageForDraw) { // We will create a texture that's at the maximum size the GPU says it can // support for uploads.
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 2c7b24ec..bb9b0696 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -39,8 +39,8 @@ if (enable_vr) { import("//chrome/android/features/vr/vr_module_tmpl.gni") } -if (dfmify_devtools) { - import("//chrome/android/features/devtools/devtools_module_tmpl.gni") +if (dfmify_dev_ui) { + import("//chrome/android/features/dev_ui/dev_ui_module_tmpl.gni") } chrome_public_manifest_package = "org.chromium.chrome" @@ -2290,10 +2290,10 @@ version_name = _version_name } - if (dfmify_devtools) { - devtools_module_tmpl("${target_name}__devtools_bundle_module") { + if (dfmify_dev_ui) { + dev_ui_module_tmpl("${target_name}__dev_ui_bundle_module") { manifest_package = chrome_public_manifest_package - module_name = "Devtools" + _bundle_name + module_name = "DevUi" + _bundle_name base_module_target = ":$_base_module_target_name" uncompress_shared_libraries = true version_code = _version_code @@ -2341,14 +2341,6 @@ }, ] } - if (dfmify_devtools) { - extra_modules += [ - { - name = "devtools" - module_target = ":${target_name}__devtools_bundle_module" - }, - ] - } if (!disable_autofill_assistant_dfm) { extra_modules += [ { @@ -2366,6 +2358,14 @@ }, ] } + if (dfmify_dev_ui) { + extra_modules += [ + { + name = "dev_ui" + module_target = ":${target_name}__dev_ui_bundle_module" + }, + ] + } } } @@ -2675,6 +2675,8 @@ "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfModelObserverBridge.java", "java/src/org/chromium/chrome/browser/send_tab_to_self/TargetDeviceInfo.java", "java/src/org/chromium/chrome/browser/sessions/SessionTabHelper.java", + "java/src/org/chromium/chrome/browser/sharing/SharingJNIBridge.java", + "java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java", "java/src/org/chromium/chrome/browser/signin/ChromeSigninManagerDelegate.java", "java/src/org/chromium/chrome/browser/signin/IdentityServicesProvider.java", "java/src/org/chromium/chrome/browser/signin/ProfileDownloader.java",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index bffe389..86f48e5 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -166,12 +166,10 @@ "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/ClientAppDataRecorder.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityDisclosureController.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityOpenTimeRecorder.java", - "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityToolbarController.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityVerifier.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/splashscreen/SplashImageHolder.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/splashscreen/TwaSplashController.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/TrustedWebActivityDisclosureView.java", - "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/TrustedWebActivityToolbarView.java", "java/src/org/chromium/chrome/browser/browsing_data/UrlFilter.java", "java/src/org/chromium/chrome/browser/browsing_data/UrlFilterBridge.java", "java/src/org/chromium/chrome/browser/browsing_data/UrlFilters.java", @@ -1401,6 +1399,8 @@ "java/src/org/chromium/chrome/browser/share/ShareHelper.java", "java/src/org/chromium/chrome/browser/share/ShareMenuActionHandler.java", "java/src/org/chromium/chrome/browser/share/ShareParams.java", + "java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java", + "java/src/org/chromium/chrome/browser/sharing/SharingJNIBridge.java", "java/src/org/chromium/chrome/browser/signin/AccountAdder.java", "java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java", "java/src/org/chromium/chrome/browser/signin/AccountPickerDialogFragment.java", @@ -1721,7 +1721,6 @@ "java/src/org/chromium/chrome/browser/webapps/WebappTabDelegate.java", "java/src/org/chromium/chrome/browser/webauth/AuthenticatorFactory.java", "java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java", - "java/src/org/chromium/chrome/browser/webauth/EmptyHandlerResponseCallback.java", "java/src/org/chromium/chrome/browser/webauth/Fido2ApiHandler.java", "java/src/org/chromium/chrome/browser/webauth/HandlerResponseCallback.java", "java/src/org/chromium/chrome/browser/webshare/BlobReceiver.java",
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/form/AssistantFormCoordinator.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/form/AssistantFormCoordinator.java index c748c36f..d9f8d5e 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/form/AssistantFormCoordinator.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/form/AssistantFormCoordinator.java
@@ -36,7 +36,10 @@ mModel.getInputsModel().addObserver(new AbstractListObserver<Void>() { @Override public void onDataSetChanged() { - mView.removeAllViews(); + for (int i = 0; i < mView.getChildCount(); i++) { + mView.getChildAt(i).setVisibility(View.GONE); + } + for (AssistantFormInput input : mModel.getInputsModel()) { View view = input.createView(context, mView); mView.addView(view);
diff --git a/chrome/android/features/devtools/BUILD.gn b/chrome/android/features/dev_ui/BUILD.gn similarity index 80% rename from chrome/android/features/devtools/BUILD.gn rename to chrome/android/features/dev_ui/BUILD.gn index bed5f0eb..d1bd2fdd 100644 --- a/chrome/android/features/devtools/BUILD.gn +++ b/chrome/android/features/dev_ui/BUILD.gn
@@ -7,7 +7,7 @@ android_library("java") { java_files = - [ "java/src/org/chromium/chrome/browser/devtools/DevtoolsUi.java" ] + [ "java/src/org/chromium/chrome/browser/dev_ui/DevUiModuleProvider.java" ] deps = [ "//base:base_java",
diff --git a/chrome/android/features/devtools/devtools_module_tmpl.gni b/chrome/android/features/dev_ui/dev_ui_module_tmpl.gni similarity index 64% rename from chrome/android/features/devtools/devtools_module_tmpl.gni rename to chrome/android/features/dev_ui/dev_ui_module_tmpl.gni index f39946b..8eefdd3 100644 --- a/chrome/android/features/devtools/devtools_module_tmpl.gni +++ b/chrome/android/features/dev_ui/dev_ui_module_tmpl.gni
@@ -6,34 +6,29 @@ import("//build/config/locales.gni") import("//chrome/android/features/dynamic_feature_modules.gni") -template("devtools_module_tmpl") { - _manifest = "$target_gen_dir/$target_name/AndroidManifest.xml" - _manifest_target = "${target_name}__manifest" - jinja_template(_manifest_target) { - input = "//chrome/android/features/devtools/java/AndroidManifest.xml" - output = _manifest - variables = [ "manifest_package=${invoker.manifest_package}" ] - } +template("dev_ui_module_tmpl") { + assert(dfmify_dev_ui) android_app_bundle_module(target_name) { forward_variables_from(invoker, [ "base_module_target", + "manifest_package", "module_name", "uncompress_shared_libraries", "version_code", "version_name", ]) - android_manifest = _manifest - android_manifest_dep = ":${_manifest_target}" + android_manifest = + "//chrome/android/features/dev_ui/java/AndroidManifest.xml" min_sdk_version = 21 target_sdk_version = android_sdk_version - deps = [ - "//chrome/android/features/devtools:java", - ] proguard_enabled = !is_java_debug aapt_locale_whitelist = locales - package_name = "devtools" + package_name = "dev_ui" package_name_to_id_mapping = resource_packages_id_mapping + deps = [ + "//chrome/android/features/dev_ui:java", + ] } }
diff --git a/chrome/android/features/devtools/java/AndroidManifest.xml b/chrome/android/features/dev_ui/java/AndroidManifest.xml similarity index 79% rename from chrome/android/features/devtools/java/AndroidManifest.xml rename to chrome/android/features/dev_ui/java/AndroidManifest.xml index ff348b0..c69297c 100644 --- a/chrome/android/features/devtools/java/AndroidManifest.xml +++ b/chrome/android/features/dev_ui/java/AndroidManifest.xml
@@ -5,14 +5,13 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:dist="http://schemas.android.com/apk/distribution" - featureSplit="devtools"> + featureSplit="dev_ui"> <dist:module dist:onDemand="true" - dist:title="@string/devtools_module_title"> + dist:title="@string/dev_ui_module_title"> <dist:fusing dist:include="false" /> </dist:module> - <application> - </application> + <application></application> </manifest>
diff --git a/chrome/android/features/dev_ui/java/src/org/chromium/chrome/browser/dev_ui/DevUiModuleProvider.java b/chrome/android/features/dev_ui/java/src/org/chromium/chrome/browser/dev_ui/DevUiModuleProvider.java new file mode 100644 index 0000000..4b719029 --- /dev/null +++ b/chrome/android/features/dev_ui/java/src/org/chromium/chrome/browser/dev_ui/DevUiModuleProvider.java
@@ -0,0 +1,14 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.dev_ui; + +import org.chromium.base.annotations.UsedByReflection; + +/** + * Provider for the Developer UI DFM. Currently this is a placeholder that serves as a kludge, so + * Java code exists somewhere. + */ +@UsedByReflection("DevUiModuleProvider.java") +public interface DevUiModuleProvider {}
diff --git a/chrome/android/features/devtools/java/src/org/chromium/chrome/browser/devtools/DevtoolsUi.java b/chrome/android/features/devtools/java/src/org/chromium/chrome/browser/devtools/DevtoolsUi.java deleted file mode 100644 index 11bb52ef..0000000 --- a/chrome/android/features/devtools/java/src/org/chromium/chrome/browser/devtools/DevtoolsUi.java +++ /dev/null
@@ -1,14 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.devtools; - -import org.chromium.base.annotations.UsedByReflection; - -/** - * Interface for Devtools UI. Currently this is an placeholder that serves as a - * kludge to add minimal Java code to the Devtools DFM. - */ -@UsedByReflection("DevtoolsUi.java") -public interface DevtoolsUi {}
diff --git a/chrome/android/features/dynamic_feature_modules.gni b/chrome/android/features/dynamic_feature_modules.gni index b55cf93..5229a8b 100644 --- a/chrome/android/features/dynamic_feature_modules.gni +++ b/chrome/android/features/dynamic_feature_modules.gni
@@ -15,7 +15,7 @@ "vr=0x7d", "tab_ui=0x7c", "autofill_assistant=0x7b", - "devtools=0x7a", + "dev_ui=0x7a", ] # This variable indicates whether the native feature module system is engaged.
diff --git a/chrome/android/features/keyboard_accessory/internal/java/res/layout/keyboard_accessory_tabs.xml b/chrome/android/features/keyboard_accessory/internal/java/res/layout/keyboard_accessory_tabs.xml index b23f48d..58be0ae 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/res/layout/keyboard_accessory_tabs.xml +++ b/chrome/android/features/keyboard_accessory/internal/java/res/layout/keyboard_accessory_tabs.xml
@@ -6,7 +6,7 @@ <org.chromium.chrome.browser.keyboard_accessory.tab_layout_component.KeyboardAccessoryTabLayoutView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - app:tabIndicatorHeight="@dimen/divider_height" + app:tabIndicatorHeight="0dp" app:tabTextColor="@color/default_icon_color" app:tabMaxWidth="@dimen/keyboard_accessory_tab_icon_width" app:tabPaddingStart="@dimen/keyboard_accessory_bar_item_padding"
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutView.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutView.java index 72375c9..811fdc9 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutView.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutView.java
@@ -66,9 +66,6 @@ * @param activeTab The active tab to change. If null, all tabs are reset. */ void setActiveTabColor(@Nullable Integer activeTab) { - setSelectedTabIndicatorHeight(activeTab == null - ? 0 - : getResources().getDimensionPixelSize(R.dimen.divider_height)); for (int i = getTabCount() - 1; i >= 0; i--) { TabLayout.Tab t = getTabAt(i); if (t == null || t.getIcon() == null) continue;
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml index 130d8e17..c868fdf 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml
@@ -1223,6 +1223,9 @@ <receiver android:name="org.chromium.chrome.browser.send_tab_to_self.NotificationManager$TimeoutReceiver" android:exported="false"/> + <receiver android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$TapReceiver" + android:exported="false"/> + <receiver android:name="org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$ClickReceiver" android:exported="false"/> <receiver android:name="org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$SettingsReceiver"
diff --git a/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected b/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected index df24de85..cad4e13a 100644 --- a/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected +++ b/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected
@@ -864,6 +864,13 @@ </intent-filter> </activity> <activity + android:enabled="false" + android:exported="false" + android:launchMode="singleInstance" + android:name="com.google.android.play.core.missingsplits.PlayCoreMissingSplitsActivity" + android:process=":playcore_missing_splits_activity" + android:stateNotNeeded="true"/> + <activity android:excludeFromRecents="true" android:exported="false" android:launchMode="singleInstance" @@ -1298,6 +1305,9 @@ android:name="org.chromium.chrome.browser.send_tab_to_self.NotificationManager$TimeoutReceiver"/> <receiver android:exported="false" + android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$TapReceiver"/> + <receiver + android:exported="false" android:name="org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
diff --git a/chrome/android/java/res/xml/account_management_preferences.xml b/chrome/android/java/res/xml/account_management_preferences.xml index 38c7a47..7639690 100644 --- a/chrome/android/java/res/xml/account_management_preferences.xml +++ b/chrome/android/java/res/xml/account_management_preferences.xml
@@ -31,24 +31,6 @@ android:key="child_content_divider" android:layout="@layout/divider_preference"/> - <org.chromium.chrome.browser.preferences.sync.SyncPreference - android:key="sync_settings" - android:title="@string/sign_in_sync"/> - - <Preference - android:key="sync_settings_divider" - android:layout="@layout/divider_preference"/> - - <Preference - android:key="google_activity_controls" - android:icon="@drawable/ic_logo_googleg_24dp" - android:title="@string/sign_in_google_activity_controls_legacy" - android:summary="@string/sign_in_google_activity_controls_message_legacy"/> - - <Preference - android:key="google_activity_controls_divider" - android:layout="@layout/divider_preference"/> - <Preference android:key="sign_out" android:title="@string/account_management_sign_out"/>
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml index e322771..edcdd4c3 100644 --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -7,57 +7,27 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat - android:key="navigation_error" - android:title="@string/navigation_error_title" - android:summary="@string/navigation_error_summary" - android:defaultValue="true" /> - <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat - android:key="search_suggestions" - android:title="@string/search_suggestions_title" - android:summary="@string/search_suggestions_summary" - android:defaultValue="true" /> - <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat - android:key="safe_browsing_scout_reporting" - android:title="@string/safe_browsing_scout_reporting_title" - android:summary="@string/safe_browsing_scout_reporting_summary" /> - <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat - android:key="safe_browsing" - android:title="@string/safe_browsing_title" - android:summary="@string/safe_browsing_summary" /> - <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat - android:key="network_predictions" - android:title="@string/network_predictions_title" - android:summary="@string/network_predictions_summary" - android:persistent="false" /> - <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat android:key="can_make_payment" android:title="@string/can_make_payment_title" android:summary="@string/settings_can_make_payment_toggle_label" /> + <org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat + android:key="preload_pages" + android:title="@string/preload_pages_title" + android:summary="@string/preload_pages_summary" + android:persistent="false" /> <org.chromium.chrome.browser.preferences.ChromeBasePreferenceCompat android:key="usage_stats_reporting" android:title="@string/usage_stats_setting_title" android:persistent="false" /> <android.support.v7.preference.Preference - android:key="usage_and_crash_reports" - android:title="@string/usage_and_crash_reports_title_legacy" - android:fragment="org.chromium.chrome.browser.preferences.privacy.UsageAndCrashReportsPreferenceFragment" /> - <android.support.v7.preference.Preference android:fragment="org.chromium.chrome.browser.preferences.privacy.DoNotTrackPreference" android:key="do_not_track" android:title="@string/do_not_track_title" /> <android.support.v7.preference.Preference - android:key="contextual_search" - android:title="@string/contextual_search_title" - android:fragment="org.chromium.chrome.browser.preferences.privacy.ContextualSearchPreferenceFragment" /> - <android.support.v7.preference.Preference android:key="clear_browsing_data" android:title="@string/clear_browsing_data_title" android:summary="@string/clear_browsing_data_summary" android:fragment="org.chromium.chrome.browser.preferences.privacy.ClearBrowsingDataTabsFragment" /> - <android.support.v7.preference.Preference - android:key="sync_and_services_link_divider" - android:layout="@layout/divider_preference" - android:selectable="false"/> <org.chromium.chrome.browser.preferences.TextMessagePreferenceCompat android:key="sync_and_services_link" android:summary="@string/privacy_sync_and_services_link"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java index 1d997d3a..363f85d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -331,7 +331,6 @@ public static final String TRUSTED_WEB_ACTIVITY_NOTIFICATION_DELEGATION_ENROLMENT = "TrustedWebActivityNotificationDelegationAutoEnrolment"; public static final String VIDEO_PERSISTENCE = "VideoPersistence"; - public static final String UNIFIED_CONSENT = "UnifiedConsent"; public static final String USAGE_STATS = "UsageStats"; public static final String VR_BROWSING_FEEDBACK = "VrBrowsingFeedback"; public static final String USER_ACTIVATION_V2 = "UserActivationV2";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java index 89837d55..e785aeb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -31,6 +31,7 @@ import org.chromium.chrome.browser.banners.AppBannerManager; import org.chromium.chrome.browser.bookmarks.BookmarkBridge; import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; +import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.download.DownloadUtils; import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher; import org.chromium.chrome.browser.omaha.UpdateMenuItemHelper; @@ -264,7 +265,8 @@ menu.findItem(R.id.close_all_tabs_menu_id) .setEnabled(mTabModelSelector.getTotalTabCount() > 0); } - if (!FeatureUtilities.isTabGroupsAndroidUiImprovementsEnabled()) { + if (!FeatureUtilities.isTabGroupsAndroidUiImprovementsEnabled() + || DeviceClassManager.enableAccessibilityLayout()) { menu.findItem(R.id.menu_group_tabs).setVisible(false); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityCoordinator.java index cc423652..44cbe79 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityCoordinator.java
@@ -7,16 +7,17 @@ import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityDisclosureController; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityOpenTimeRecorder; -import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityToolbarController; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityVerifier; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityVerifier.VerificationStatus; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.splashscreen.TwaSplashController; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.view.TrustedWebActivityDisclosureView; -import org.chromium.chrome.browser.browserservices.trustedwebactivityui.view.TrustedWebActivityToolbarView; import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController; +import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator; import org.chromium.chrome.browser.dependency_injection.ActivityScope; +import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; +import org.chromium.chrome.browser.lifecycle.InflationObserver; import javax.inject.Inject; @@ -27,12 +28,17 @@ * Add methods here if other components need to communicate with Trusted Web Activity component. */ @ActivityScope -public class TrustedWebActivityCoordinator { +public class TrustedWebActivityCoordinator implements InflationObserver { + + private final TrustedWebActivityVerifier mVerifier; + private final CustomTabToolbarCoordinator mToolbarCoordinator; + private final CustomTabStatusBarColorProvider mStatusBarColorProvider; + + private boolean mInTwaMode = true; + @Inject public TrustedWebActivityCoordinator( TrustedWebActivityDisclosureController disclosureController, - TrustedWebActivityToolbarController toolbarController, - TrustedWebActivityToolbarView toolbarView, TrustedWebActivityDisclosureView disclosureView, TrustedWebActivityOpenTimeRecorder openTimeRecorder, TrustedWebActivityVerifier verifier, @@ -40,14 +46,33 @@ Lazy<TwaSplashController> splashController, CustomTabIntentDataProvider intentDataProvider, TrustedWebActivityUmaRecorder umaRecorder, - CustomTabStatusBarColorProvider statusBarColorProvider) { + CustomTabStatusBarColorProvider statusBarColorProvider, + ActivityLifecycleDispatcher lifecycleDispatcher, + CustomTabToolbarCoordinator toolbarCoordinator) { // We don't need to do anything with most of the classes above, we just need to resolve them // so they start working. + mVerifier = verifier; + mToolbarCoordinator = toolbarCoordinator; + mStatusBarColorProvider = statusBarColorProvider; navigationController.setLandingPageOnCloseCriterion(verifier::isPageOnVerifiedOrigin); initSplashScreen(splashController, intentDataProvider, umaRecorder); - useTabThemeColorWhenVerified(statusBarColorProvider, verifier); + + verifier.addVerificationObserver(this::onVerificationUpdate); + lifecycleDispatcher.register(this); + } + + @Override + public void onPreInflationStartup() {} + + @Override + public void onPostInflationStartup() { + // Before the verification completes, we optimistically expect it to be successful and apply + // the trusted web activity mode to UI. So hide the toolbar as soon as possible. + if (mVerifier.getState() == null) { + mToolbarCoordinator.setToolbarHidden(true); + } } private void initSplashScreen(Lazy<TwaSplashController> splashController, @@ -63,14 +88,25 @@ umaRecorder.recordSplashScreenUsage(showSplashScreen); } - private void useTabThemeColorWhenVerified(CustomTabStatusBarColorProvider colorProvider, - TrustedWebActivityVerifier verifier) { - verifier.addVerificationObserver(() -> { - if (verifier.getState() == null) return; + private void onVerificationUpdate() { + TrustedWebActivityVerifier.VerificationState state = mVerifier.getState(); + boolean inTwaMode = state == null || state.status != VerificationStatus.FAILURE; + if (inTwaMode == mInTwaMode) return; + mInTwaMode = inTwaMode; + updateToolbar(); + updateStatusBar(); + } - @VerificationStatus int status = verifier.getState().status; - colorProvider.setUseTabThemeColor( - status == VerificationStatus.PENDING || status == VerificationStatus.SUCCESS); - }); + private void updateToolbar() { + mToolbarCoordinator.setToolbarHidden(mInTwaMode); + + if (!mInTwaMode) { + // Force showing the controls for a bit when leaving Trusted Web Activity mode. + mToolbarCoordinator.showToolbarTemporarily(); + } + } + + private void updateStatusBar() { + mStatusBarColorProvider.setUseTabThemeColor(mInTwaMode); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityModel.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityModel.java index b333a5ea..98c325b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/TrustedWebActivityModel.java
@@ -4,9 +4,6 @@ package org.chromium.chrome.browser.browserservices.trustedwebactivityui; -import android.content.Intent; - -import org.chromium.chrome.browser.browserservices.Origin; import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.ui.modelutil.PropertyModel; @@ -18,10 +15,6 @@ @ActivityScope public class TrustedWebActivityModel extends PropertyModel { - /** Whether toolbar should be hidden. */ - public static final WritableBooleanPropertyKey TOOLBAR_HIDDEN = - new WritableBooleanPropertyKey(); - /** The state of Trusted Web Activity disclosure. Can be one of the constants below. */ public static final WritableIntPropertyKey DISCLOSURE_STATE = new WritableIntPropertyKey(); @@ -34,18 +27,6 @@ public static final WritableObjectPropertyKey<DisclosureEventsCallback> DISCLOSURE_EVENTS_CALLBACK = new WritableObjectPropertyKey<>(); - - public static class PersistentNotificationData { - // Necessary for making a PendingIntent for sharing. - public final Intent customTabActivityIntent; - public final Origin origin; - - public PersistentNotificationData(Intent customTabActivityIntent, Origin origin) { - this.customTabActivityIntent = customTabActivityIntent; - this.origin = origin; - } - } - public interface DisclosureEventsCallback { /** Called when user accepted the disclosure. */ void onDisclosureAccepted(); @@ -53,6 +34,6 @@ @Inject public TrustedWebActivityModel() { - super(TOOLBAR_HIDDEN, DISCLOSURE_STATE, DISCLOSURE_EVENTS_CALLBACK); + super(DISCLOSURE_STATE, DISCLOSURE_EVENTS_CALLBACK); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityToolbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityToolbarController.java deleted file mode 100644 index d35c92ee..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityToolbarController.java +++ /dev/null
@@ -1,58 +0,0 @@ -// 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. - -package org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller; - -import static org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel.TOOLBAR_HIDDEN; - -import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel; -import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityVerifier.VerificationState; -import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityVerifier.VerificationStatus; -import org.chromium.chrome.browser.dependency_injection.ActivityScope; -import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; -import org.chromium.chrome.browser.lifecycle.InflationObserver; - -import javax.inject.Inject; - -/** - * Controls the visibility of the toolbar in Trusted Web Activity. - * Toolbar is hidden when user browses the pages belonging to the verified origin and appears when - * user leaves the verified origin. - */ -@ActivityScope -public class TrustedWebActivityToolbarController implements InflationObserver { - - private final TrustedWebActivityModel mModel; - private final TrustedWebActivityVerifier mVerifier; - - @Inject - public TrustedWebActivityToolbarController( - TrustedWebActivityModel model, - TrustedWebActivityVerifier verifier, - ActivityLifecycleDispatcher lifecycleDispatcher) { - mModel = model; - mVerifier = verifier; - - mVerifier.addVerificationObserver(this::handleVerificationUpdate); - lifecycleDispatcher.register(this); - } - - @Override - public void onPreInflationStartup() {} - - @Override - public void onPostInflationStartup() { - // Before the verification completes, we optimistically expect it to be successful and apply - // the trusted web activity mode to UI. So hide the toolbar as soon as possible. - if (mVerifier.getState() == null) { - mModel.set(TOOLBAR_HIDDEN, true); - } - } - - private void handleVerificationUpdate() { - VerificationState state = mVerifier.getState(); - boolean shouldHide = state == null || state.status != VerificationStatus.FAILURE; - mModel.set(TOOLBAR_HIDDEN, shouldHide); - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/TrustedWebActivityToolbarView.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/TrustedWebActivityToolbarView.java deleted file mode 100644 index d4e3ee1c..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/TrustedWebActivityToolbarView.java +++ /dev/null
@@ -1,59 +0,0 @@ -// 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. - -package org.chromium.chrome.browser.browserservices.trustedwebactivityui.view; - -import static org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel.TOOLBAR_HIDDEN; - -import org.chromium.chrome.browser.ChromeActivity; -import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel; -import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator; -import org.chromium.chrome.browser.dependency_injection.ActivityScope; -import org.chromium.ui.modelutil.PropertyKey; -import org.chromium.ui.modelutil.PropertyObservable; - -import javax.inject.Inject; - -/** - * Hides and shows the toolbar according to the state of the Trusted Web Activity. - * - * TODO(pshmakov): Since we now have CustomTabToolbarCoordinator representing toolbar as a separate - * feature, this class doesn't make sense any more. Remove it, and let TrustedWebActivityCoordinator - * talk to CustomTabToolbarCoordinator. - */ -@ActivityScope -public class TrustedWebActivityToolbarView implements - PropertyObservable.PropertyObserver<PropertyKey> { - private final CustomTabToolbarCoordinator mCustomTabToolbarCoordinator; - private final TrustedWebActivityModel mModel; - private final ChromeActivity mActivity; - - @Inject - public TrustedWebActivityToolbarView(CustomTabToolbarCoordinator customTabToolbarCoordinator, - TrustedWebActivityModel model, - ChromeActivity activity) { - mCustomTabToolbarCoordinator = customTabToolbarCoordinator; - mModel = model; - mActivity = activity; - mModel.addObserver(this); - } - - @Override - public void onPropertyChanged(PropertyObservable<PropertyKey> observable, PropertyKey key) { - if (mActivity.isActivityFinishingOrDestroyed()) { - assert false : "Tried to change toolbar visibility when activity is destroyed"; - return; - } - if (key != TOOLBAR_HIDDEN) return; - - boolean hide = mModel.get(TOOLBAR_HIDDEN); - - mCustomTabToolbarCoordinator.setToolbarHidden(hide); - - if (!hide) { - // Force showing the controls for a bit when leaving Trusted Web Activity mode. - mCustomTabToolbarCoordinator.showToolbarTemporarily(); - } - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotTabObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotTabObserver.java index a8de3ab9..16035d7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotTabObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotTabObserver.java
@@ -59,7 +59,7 @@ */ @Nullable public static ScreenshotTabObserver get(Tab tab) { - if (tab == null) return null; + if (tab == null || !tab.isInitialized()) return null; return tab.getUserDataHost().getUserData(USER_DATA_KEY); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationConstants.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationConstants.java index 6e39b551..fc43cb2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationConstants.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationConstants.java
@@ -96,6 +96,11 @@ public static final int NOTIFICATION_ID_UPDATE = 8; /** + * Unique identifier for ClickToCall notifications. + */ + public static final int NOTIFICATION_ID_CLICK_TO_CALL = 9; + + /** * Separator used to separate the notification origin from additional data such as the * developer specified tag. This and the prefix following it need to be the same as the one * specified in notification_id_generator.cc. @@ -117,6 +122,7 @@ public static final String GROUP_SYNC = "Sync"; public static final String GROUP_WEBAPK = "WebApk"; public static final String GROUP_SEND_TAB_TO_SELF = "SendTabToSelf"; + public static final String GROUP_CLICK_TO_CALL = "ClickToCall"; // Web notification group names are set dynamically as this prefix + notification origin. // For example, 'Web:chromium.org' for a notification from chromium.org.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java index f3373cdf..f40a7de5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java
@@ -48,7 +48,8 @@ SystemNotificationType.WEBAPP_ACTIONS, SystemNotificationType.OFFLINE_CONTENT_SUGGESTION, SystemNotificationType.TRUSTED_WEB_ACTIVITY_SITES, SystemNotificationType.OFFLINE_PAGES, - SystemNotificationType.SEND_TAB_TO_SELF, SystemNotificationType.UPDATES}) + SystemNotificationType.SEND_TAB_TO_SELF, SystemNotificationType.UPDATES, + SystemNotificationType.CLICK_TO_CALL}) @Retention(RetentionPolicy.SOURCE) public @interface SystemNotificationType { int UNKNOWN = -1; @@ -69,8 +70,9 @@ int OFFLINE_PAGES = 14; int SEND_TAB_TO_SELF = 15; int UPDATES = 16; + int CLICK_TO_CALL = 17; - int NUM_ENTRIES = 17; + int NUM_ENTRIES = 18; } /*
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/README.md b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/README.md index 90a14bc..b438ef0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/README.md +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/README.md
@@ -33,7 +33,7 @@ can always be split out in future if deemed necessary. > **Note**: Any time a new type of notification is added, a new -`SystemNotificationType` should be added to `histograms.xml` and +`SystemNotificationType` should be added to `enums.xml` and `NotificationUmaTracker.onNotificationShown` must be called with this new type whenever any notifications are shown, to collect UMA on how often the notifications are blocked. *It is not necessary to add a new channel
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapScalerTask.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapScalerTask.java index caf086a..fb3a4653 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapScalerTask.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapScalerTask.java
@@ -12,6 +12,9 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.task.AsyncTask; +import java.util.ArrayList; +import java.util.List; + /** * A worker task to scale bitmaps in the background. */ @@ -36,7 +39,6 @@ /** * Scales the image provided. Called on a non-UI thread. - * @param params Ignored, do not use. * @return A sorted list of images (by last-modified first). */ @Override @@ -54,14 +56,16 @@ /** * Communicates the results back to the client. Called on the UI thread. - * @param result The resulting scaled bitmap. + * @param bitmap The resulting scaled bitmap. */ @Override - protected void onPostExecute(Bitmap result) { + protected void onPostExecute(Bitmap bitmap) { if (isCancelled()) { return; } - mCache.put(mFilePath, new PickerCategoryView.Thumbnail(result, mVideoDuration)); + List<Bitmap> bitmaps = new ArrayList<>(1); + bitmaps.add(bitmap); + mCache.put(mFilePath, new PickerCategoryView.Thumbnail(bitmaps, mVideoDuration)); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapUtils.java index 3ec9f2e..0eeeaa9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapUtils.java
@@ -15,6 +15,8 @@ import java.io.FileDescriptor; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; /** * A collection of utility functions for dealing with bitmaps. @@ -74,20 +76,29 @@ * Given a FileDescriptor, decodes the video and returns a bitmap of dimensions |size|x|size|. * @param descriptor The FileDescriptor for the file to read. * @param size The width and height of the bitmap to return. - * @return The resulting bitmap. + * @param frames The number of frames to extract. + * @param intervalMs The interval between frames (in milliseconds). + * @return A list of extracted frames. */ - public static Bitmap decodeVideoFromFileDescriptor( - MediaMetadataRetriever retriever, FileDescriptor descriptor, int size) { + public static List<Bitmap> decodeVideoFromFileDescriptor(MediaMetadataRetriever retriever, + FileDescriptor descriptor, int size, int frames, int intervalMs) { try { retriever.setDataSource(descriptor); } catch (RuntimeException exception) { return null; } - Bitmap bitmap = retriever.getFrameAtTime(); - if (bitmap == null) return null; + List<Bitmap> bitmaps = new ArrayList<Bitmap>(); + Bitmap bitmap = null; + for (int frame = 0; frame < frames; ++frame) { + bitmap = retriever.getFrameAtTime(frame * intervalMs * 1000); + if (bitmap == null) continue; - return sizeBitmap(bitmap, size, descriptor); + bitmap = sizeBitmap(bitmap, size, descriptor); + bitmaps.add(bitmap); + } + + return bitmaps; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java index 696d262..4fd8b11a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.photo_picker; import android.content.ContentResolver; +import android.content.res.AssetFileDescriptor; import android.graphics.Bitmap; import android.media.MediaMetadataRetriever; import android.net.Uri; @@ -14,12 +15,14 @@ import org.chromium.base.task.AsyncTask; import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; import java.util.Locale; /** * A worker task to decode video and extract information from it off of the UI thread. */ -class DecodeVideoTask extends AsyncTask<Pair<Bitmap, String>> { +class DecodeVideoTask extends AsyncTask<Pair<List<Bitmap>, String>> { /** * An interface to use to communicate back the results to the client. */ @@ -27,10 +30,10 @@ /** * A callback to define to receive the list of all images on disk. * @param uri The uri of the video decoded. - * @param bitmap A single frame (thumbnail) from the video. + * @param bitmaps An array of thumbnails extracted from the video. * @param duration The duration of the video. */ - void videoDecodedCallback(Uri uri, Bitmap bitmap, String duration); + void videoDecodedCallback(Uri uri, List<Bitmap> bitmaps, String duration); } // The callback to use to communicate the results. @@ -42,6 +45,12 @@ // The desired width and height (in pixels) of the returned thumbnail from the video. int mSize; + // The number of frames to extract. + int mFrames; + + // The interval between frames (in milliseconds). + int mIntervalMs; + // The ContentResolver to use to retrieve image metadata from disk. private ContentResolver mContentResolver; @@ -55,13 +64,17 @@ * @param uri The URI of the video to decode. * @param size The desired width and height (in pixels) of the returned thumbnail from the * video. + * @param frames The number of frames to extract. + * @param intervalMs The interval between frames (in milliseconds). */ - public DecodeVideoTask( - VideoDecodingCallback callback, ContentResolver contentResolver, Uri uri, int size) { + public DecodeVideoTask(VideoDecodingCallback callback, ContentResolver contentResolver, Uri uri, + int size, int frames, int intervalMs) { mCallback = callback; mContentResolver = contentResolver; mUri = uri; mSize = size; + mFrames = frames; + mIntervalMs = intervalMs; } /** @@ -90,19 +103,27 @@ * @return A pair of bitmap (video thumbnail) and the duration of the video. */ @Override - protected Pair<Bitmap, String> doInBackground() { + protected Pair<List<Bitmap>, String> doInBackground() { assert !ThreadUtils.runningOnUiThread(); if (isCancelled()) return null; + AssetFileDescriptor afd = null; try { - Bitmap bitmap = BitmapUtils.decodeVideoFromFileDescriptor(mRetriever, - mContentResolver.openAssetFileDescriptor(mUri, "r").getFileDescriptor(), mSize); + afd = mContentResolver.openAssetFileDescriptor(mUri, "r"); + List<Bitmap> bitmaps = BitmapUtils.decodeVideoFromFileDescriptor( + mRetriever, afd.getFileDescriptor(), mSize, mFrames, mIntervalMs); String duration = mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); - return new Pair<Bitmap, String>(bitmap, formatDuration(duration)); + return new Pair<List<Bitmap>, String>(bitmaps, formatDuration(duration)); } catch (FileNotFoundException exception) { return null; + } finally { + try { + if (afd != null) afd.close(); + } catch (IOException exception) { + return null; + } } } @@ -111,7 +132,7 @@ * @param results A pair of bitmap (video thumbnail) and the duration of the video. */ @Override - protected void onPostExecute(Pair<Bitmap, String> results) { + protected void onPostExecute(Pair<List<Bitmap>, String> results) { if (isCancelled()) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java index 11accd7..6ec07b7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java
@@ -91,16 +91,18 @@ } /** - * An interface notifying clients when an image has finished decoding. + * An interface notifying clients when all images have finished decoding. */ - public interface ImageDecodedCallback { + public interface ImagesDecodedCallback { /** * A function to define to receive a notification that an image has been decoded. * @param filePath The file path for the newly decoded image. - * @param bitmap The results of the decoding (or placeholder image, if failed). + * @param isVideo Whether the decoding was from a video or not. + * @param bitmaps The results of the decoding (or placeholder image, if failed). * @param videoDuration The time-length of the video (null if not a video). */ - void imageDecodedCallback(String filePath, Bitmap bitmap, String videoDuration); + void imagesDecodedCallback( + String filePath, boolean isVideo, List<Bitmap> bitmaps, String videoDuration); } /** @@ -110,6 +112,12 @@ // The URI for the file containing the bitmap to decode. public Uri mUri; + // Whether this is a high priority request. All decoding request start out high priority, + // and those that contain requests to decode a video, will be broken up into two requests + // each (a high priority one to decode the first frame and a low-priority one to decode the + // rest of the frames). + boolean mHighPriorityRequest; + // The requested size (width and height) of the bitmap, once decoded. public int mSize; @@ -118,25 +126,26 @@ int mFileType; // The callback to use to communicate the results of the decoding. - ImageDecodedCallback mCallback; + ImagesDecodedCallback mCallback; // The timestamp for when the request was sent for decoding. long mTimestamp; public DecoderServiceParams(Uri uri, int size, @PickerBitmap.TileTypes int fileType, - ImageDecodedCallback callback) { + boolean highPriorityRequest, ImagesDecodedCallback callback) { mUri = uri; mSize = size; mFileType = fileType; + mHighPriorityRequest = highPriorityRequest; mCallback = callback; } } - // Map of file paths to decoder parameters in order of request. - private LinkedHashMap<String, DecoderServiceParams> mRequests = new LinkedHashMap<>(); - LinkedHashMap<String, DecoderServiceParams> getRequests() { - return mRequests; - } + // Map of file paths to pending decoding requests. + private LinkedHashMap<String, DecoderServiceParams> mPendingRequests = new LinkedHashMap<>(); + + // Map of file paths to processing decoding requests. + private LinkedHashMap<String, DecoderServiceParams> mProcessingRequests = new LinkedHashMap<>(); // The callbacks used to notify the clients when the service is ready. List<ServiceReadyCallback> mCallbacks = new ArrayList<ServiceReadyCallback>(); @@ -189,36 +198,83 @@ * @param callback The callback to use to communicate the decoding results. */ public void decodeImage(Uri uri, @PickerBitmap.TileTypes int fileType, int size, - ImageDecodedCallback callback) { - DecoderServiceParams params = new DecoderServiceParams(uri, size, fileType, callback); - mRequests.put(uri.getPath(), params); - if (mRequests.size() == 1) dispatchNextDecodeImageRequest(); + ImagesDecodedCallback callback) { + DecoderServiceParams params = new DecoderServiceParams( + uri, size, fileType, /*highPriorityRequest*/ true, callback); + mPendingRequests.put(uri.getPath(), params); + if (mPendingRequests.size() == 1) dispatchNextDecodeRequest(); } /** - * Dispatches the next image for decoding (from the queue). + * Fetches the next decoding request from the queue. High-priority requests are returned first, + * then low-priority ones that have had their high-priority counterpart processed already. + * @return The highest priority request pending, or null. Null can be returned in two scenarios: + * If no requests remain or if the only request remaining is a low-priority request + * where it's high-priority counterpart is still being processed. */ - private void dispatchNextDecodeImageRequest() { - if (mRequests.entrySet().iterator().hasNext()) { - DecoderServiceParams params = mRequests.entrySet().iterator().next().getValue(); - params.mTimestamp = SystemClock.elapsedRealtime(); - dispatchDecodeImageRequest(params.mUri, params.mFileType, params.mSize); - } else { - int totalRequests = mSuccessfulDecodes + mFailedDecodesRuntime + mFailedDecodesMemory; - if (totalRequests > 0) { - int runtimeFailures = 100 * mFailedDecodesRuntime / totalRequests; - RecordHistogram.recordPercentageHistogram( - "Android.PhotoPicker.DecoderHostFailureRuntime", runtimeFailures); - - int memoryFailures = 100 * mFailedDecodesMemory / totalRequests; - RecordHistogram.recordPercentageHistogram( - "Android.PhotoPicker.DecoderHostFailureOutOfMemory", memoryFailures); - - mSuccessfulDecodes = 0; - mFailedDecodesRuntime = 0; - mFailedDecodesMemory = 0; + private DecoderServiceParams getNextRequestByPriority() { + DecoderServiceParams firstNonPriority = null; + for (DecoderServiceParams request : mPendingRequests.values()) { + if (request.mHighPriorityRequest) return request; + if (firstNonPriority == null) { + boolean foundAlreadyProcessing = false; + for (DecoderServiceParams processing : mProcessingRequests.values()) { + if (request.mUri.getPath().equals(processing.mUri.getPath())) { + foundAlreadyProcessing = true; + break; + } + } + if (!foundAlreadyProcessing) firstNonPriority = request; } } + return firstNonPriority; + } + + /** + * Dispatches the next image/video for decoding (from the queue). + */ + private void dispatchNextDecodeRequest() { + DecoderServiceParams params = getNextRequestByPriority(); + if (params != null) { + mPendingRequests.remove(params.mUri.getPath()); + mProcessingRequests.put(params.mUri.getPath(), params); + + params.mTimestamp = SystemClock.elapsedRealtime(); + if (params.mFileType != PickerBitmap.TileTypes.VIDEO) { + dispatchDecodeImageRequest(params); + } else { + dispatchDecodeVideoRequest(params); + + // High-priority decoding requests for videos are requests for first frames (see + // dispatchDecodeVideoRequest). Add another low-priority request for decoding the + // rest of the frames. + if (params.mHighPriorityRequest) { + DecoderServiceParams lowPriorityRequest = + new DecoderServiceParams(params.mUri, params.mSize, params.mFileType, + /*highPriorityRequest=*/false, params.mCallback); + mPendingRequests.put(params.mUri.getPath(), lowPriorityRequest); + } + } + return; + } + + if (mProcessingRequests.entrySet().iterator().hasNext()) return; + + int totalRequests = mSuccessfulDecodes + mFailedDecodesRuntime + mFailedDecodesMemory; + if (totalRequests > 0) { + // TODO(finnur): Add corresponding UMA for videos. + int runtimeFailures = 100 * mFailedDecodesRuntime / totalRequests; + RecordHistogram.recordPercentageHistogram( + "Android.PhotoPicker.DecoderHostFailureRuntime", runtimeFailures); + + int memoryFailures = 100 * mFailedDecodesMemory / totalRequests; + RecordHistogram.recordPercentageHistogram( + "Android.PhotoPicker.DecoderHostFailureOutOfMemory", memoryFailures); + + mSuccessfulDecodes = 0; + mFailedDecodesRuntime = 0; + mFailedDecodesMemory = 0; + } } /** @@ -228,9 +284,9 @@ * @param duration The video duration (a formatted human-readable string, for example "3:00"). */ @Override - public void videoDecodedCallback(Uri uri, Bitmap bitmap, String duration) { + public void videoDecodedCallback(Uri uri, List<Bitmap> bitmaps, String duration) { // TODO(finnur): Add corresponding UMA for video decoding. - closeRequest(uri.getPath(), bitmap, duration, -1); + closeRequest(uri.getPath(), true, bitmaps, duration, -1); } @Override @@ -248,7 +304,10 @@ : null; long decodeTime = payload.getLong(DecoderService.KEY_DECODE_TIME); mSuccessfulDecodes++; - closeRequest(filePath, bitmap, null, decodeTime); + List<Bitmap> bitmaps = new ArrayList<>(1); + bitmaps.add(bitmap); + closeRequest( + filePath, /*isVideo=*/false, bitmaps, /*videoDuration=*/null, decodeTime); } catch (RuntimeException e) { mFailedDecodesRuntime++; } catch (OutOfMemoryError e) { @@ -262,48 +321,55 @@ * decoding process back to the client, and takes care of house-keeping chores regarding * the request queue). * @param filePath The path to the image that was just decoded. - * @param bitmap The resulting decoded bitmap, or null if decoding fails. + * @param bitmaps The resulting decoded bitmaps, or null if decoding fails. * @param decodeTime The length of time it took to decode the bitmap. */ - public void closeRequest( - String filePath, @Nullable Bitmap bitmap, String videoDuration, long decodeTime) { - DecoderServiceParams params = getRequests().get(filePath); + public void closeRequest(String filePath, boolean isVideo, @Nullable List<Bitmap> bitmaps, + String videoDuration, long decodeTime) { + DecoderServiceParams params = mProcessingRequests.get(filePath); if (params != null) { long endRpcCall = SystemClock.elapsedRealtime(); RecordHistogram.recordTimesHistogram( "Android.PhotoPicker.RequestProcessTime", endRpcCall - params.mTimestamp); - params.mCallback.imageDecodedCallback(filePath, bitmap, videoDuration); + params.mCallback.imagesDecodedCallback(filePath, isVideo, bitmaps, videoDuration); - if (decodeTime != -1 && bitmap != null) { + // TODO(finnur): Add UMA for videos. + if (isVideo && decodeTime != -1 && bitmaps.get(0) != null) { RecordHistogram.recordTimesHistogram( "Android.PhotoPicker.ImageDecodeTime", decodeTime); - int sizeInKB = bitmap.getByteCount() / ConversionUtils.BYTES_PER_KILOBYTE; + int sizeInKB = bitmaps.get(0).getByteCount() / ConversionUtils.BYTES_PER_KILOBYTE; RecordHistogram.recordCustomCountHistogram( "Android.PhotoPicker.ImageByteCount", sizeInKB, 1, 100000, 50); } - getRequests().remove(filePath); + mProcessingRequests.remove(filePath); } - dispatchNextDecodeImageRequest(); + + dispatchNextDecodeRequest(); + } + + /** + * Communicates with the utility process to decode a single video. + * @param params The information about the decoding request. + */ + private void dispatchDecodeVideoRequest(DecoderServiceParams params) { + // Videos are decoded by the system (on N+) using a restricted helper process, so + // there's no need to use our custom sandboxed process. + assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; + + int frames = params.mHighPriorityRequest ? 1 : 20; + int intervalMs = 500; + mWorkerTask = new DecodeVideoTask( + this, mContentResolver, params.mUri, params.mSize, frames, intervalMs); + mWorkerTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } /** * Communicates with the server to decode a single bitmap. - * @param uri The URI of the image on disk. - * @param size The requested width and height of the resulting bitmap. + * @param params The information about the decoding request. */ - private void dispatchDecodeImageRequest( - Uri uri, @PickerBitmap.TileTypes int fileType, int size) { - if (fileType == PickerBitmap.TileTypes.VIDEO) { - // Videos are decoded by the system (on N+) using a restricted helper process, so - // there's no need to use our custom sandboxed process. - assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; - mWorkerTask = new DecodeVideoTask(this, mContentResolver, uri, size); - mWorkerTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - return; - } - + private void dispatchDecodeImageRequest(DecoderServiceParams params) { // Obtain a file descriptor to send over to the sandboxed process. ParcelFileDescriptor pfd = null; Bundle bundle = new Bundle(); @@ -314,15 +380,15 @@ try { AssetFileDescriptor afd = null; try { - afd = mContentResolver.openAssetFileDescriptor(uri, "r"); + afd = mContentResolver.openAssetFileDescriptor(params.mUri, "r"); } catch (FileNotFoundException e) { Log.e(TAG, "Unable to obtain FileDescriptor: " + e); - closeRequest(uri.getPath(), null, null, -1); + closeRequest(params.mUri.getPath(), false, null, null, -1); return; } pfd = afd.getParcelFileDescriptor(); if (pfd == null) { - closeRequest(uri.getPath(), null, null, -1); + closeRequest(params.mUri.getPath(), false, null, null, -1); return; } } finally { @@ -330,18 +396,18 @@ } // Prepare and send the data over. - bundle.putString(DecoderService.KEY_FILE_PATH, uri.getPath()); + bundle.putString(DecoderService.KEY_FILE_PATH, params.mUri.getPath()); bundle.putParcelable(DecoderService.KEY_FILE_DESCRIPTOR, pfd); - bundle.putInt(DecoderService.KEY_SIZE, size); + bundle.putInt(DecoderService.KEY_SIZE, params.mSize); try { mIRemoteService.decodeImage(bundle, this); pfd.close(); } catch (RemoteException e) { Log.e(TAG, "Communications failed (Remote): " + e); - closeRequest(uri.getPath(), null, null, -1); + closeRequest(params.mUri.getPath(), false, null, null, -1); } catch (IOException e) { Log.e(TAG, "Communications failed (IO): " + e); - closeRequest(uri.getPath(), null, null, -1); + closeRequest(params.mUri.getPath(), false, null, null, -1); } } @@ -350,7 +416,8 @@ * @param filePath The path to the image to cancel decoding. */ public void cancelDecodeImage(String filePath) { - mRequests.remove(filePath); + mPendingRequests.remove(filePath); + mProcessingRequests.remove(filePath); } /** Sets a callback to use when the service is ready. For testing use only. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapView.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapView.java index 1e21aa7a..8dd3200 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapView.java
@@ -10,6 +10,8 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.PorterDuff; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.support.graphics.drawable.VectorDrawableCompat; @@ -41,6 +43,9 @@ // The length of the fade in animation (in ms). private static final int IMAGE_FADE_IN_DURATION = 200; + // The length of the image frame display (in ms). + private static final int IMAGE_FRAME_DISPLAY = 100; + // Our context. private Context mContext; @@ -262,11 +267,11 @@ * Completes the initialization of the PickerBitmapView. Must be called before the image can * respond to click events. * @param bitmapDetails The details about the bitmap represented by this PickerBitmapView. - * @param thumbnail The Bitmap to use for the thumbnail (or null). + * @param thumbnails The Bitmaps to use for the thumbnail (or null). * @param videoDuration The time-length of the video (human-friendly string). * @param placeholder Whether the image given is a placeholder or the actual image. */ - public void initialize(PickerBitmap bitmapDetails, @Nullable Bitmap thumbnail, + public void initialize(PickerBitmap bitmapDetails, @Nullable List<Bitmap> thumbnails, String videoDuration, boolean placeholder) { resetTile(); @@ -276,7 +281,7 @@ initializeSpecialTile(mBitmapDetails); mImageLoaded = true; } else { - setThumbnailBitmap(thumbnail, videoDuration); + setThumbnailBitmap(thumbnails, videoDuration); mImageLoaded = !placeholder; } @@ -320,13 +325,25 @@ /** * Sets a thumbnail bitmap for the current view and ensures the selection border is showing, if * the image has already been selected. - * @param thumbnail The Bitmap to use for the icon ImageView. + * @param thumbnails The Bitmaps to use for the icon ImageView. * @param videoDuration The time-length of the video (human-friendly string). * @return True if no image was loaded before (e.g. not even a low-res image). */ - public boolean setThumbnailBitmap(Bitmap thumbnail, String videoDuration) { - mIconView.setImageBitmap(thumbnail); - if (videoDuration != null) mVideoDuration.setText(videoDuration); + public boolean setThumbnailBitmap(List<Bitmap> thumbnails, String videoDuration) { + assert thumbnails == null || thumbnails.size() > 0; + if (videoDuration == null) { + mIconView.setImageBitmap(thumbnails == null ? null : thumbnails.get(0)); + } else { + mVideoDuration.setText(videoDuration); + final AnimationDrawable animationDrawable = new AnimationDrawable(); + for (int i = 0; i < thumbnails.size(); ++i) { + animationDrawable.addFrame( + new BitmapDrawable(thumbnails.get(i)), IMAGE_FRAME_DISPLAY); + } + animationDrawable.setOneShot(false); + mIconView.setImageDrawable(animationDrawable); + animationDrawable.start(); + } // If the tile has been selected before the bitmap has loaded, make sure it shows up with // a selection border on load.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapViewHolder.java index 71eb6c0..aecbf99f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapViewHolder.java
@@ -14,13 +14,14 @@ import org.chromium.base.task.AsyncTask; import org.chromium.chrome.R; +import java.util.ArrayList; import java.util.List; /** * Holds on to a {@link PickerBitmapView} that displays information about a picker bitmap. */ public class PickerBitmapViewHolder - extends ViewHolder implements DecoderServiceHost.ImageDecodedCallback { + extends ViewHolder implements DecoderServiceHost.ImagesDecodedCallback { // Our parent category. private PickerCategoryView mCategoryView; @@ -42,29 +43,37 @@ // DecoderServiceHost.ImageDecodedCallback @Override - public void imageDecodedCallback(String filePath, Bitmap bitmap, String videoDuration) { - if (bitmap == null || bitmap.getWidth() == 0 || bitmap.getHeight() == 0) { - return; + public void imagesDecodedCallback( + String filePath, boolean isVideo, List<Bitmap> bitmaps, String videoDuration) { + if (bitmaps == null || bitmaps.size() == 0) return; + + if (!isVideo) { + Bitmap bitmap = bitmaps.get(0); + if (bitmap == null || bitmap.getWidth() == 0 || bitmap.getHeight() == 0) return; } - if (mCategoryView.getHighResThumbnails().get(filePath) == null) { + PickerCategoryView.Thumbnail cachedThumbnail = + mCategoryView.getHighResThumbnails().get(filePath); + if (cachedThumbnail == null + || (cachedThumbnail.bitmaps != null + && cachedThumbnail.bitmaps.size() < bitmaps.size())) { mCategoryView.getHighResThumbnails().put( - filePath, new PickerCategoryView.Thumbnail(bitmap, videoDuration)); + filePath, new PickerCategoryView.Thumbnail(bitmaps, videoDuration)); } if (mCategoryView.getLowResThumbnails().get(filePath) == null) { Resources resources = mItemView.getContext().getResources(); - new BitmapScalerTask(mCategoryView.getLowResThumbnails(), bitmap, filePath, + new BitmapScalerTask(mCategoryView.getLowResThumbnails(), bitmaps.get(0), filePath, videoDuration, resources.getDimensionPixelSize(R.dimen.photo_picker_grainy_thumbnail_size)) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } - if (!TextUtils.equals(mBitmapDetails.getUri().getPath(), filePath)) { + if (!TextUtils.equals(getFilePath(), filePath)) { return; } - if (mItemView.setThumbnailBitmap(bitmap, videoDuration)) { + if (mItemView.setThumbnailBitmap(bitmaps, videoDuration)) { mItemView.fadeInThumbnail(); } } @@ -91,22 +100,24 @@ String filePath = mBitmapDetails.getUri().getPath(); PickerCategoryView.Thumbnail original = mCategoryView.getHighResThumbnails().get(filePath); if (original != null) { - mItemView.initialize(mBitmapDetails, original.bitmap, original.videoDuration, false); + mItemView.initialize(mBitmapDetails, original.bitmaps, original.videoDuration, false); return PickerAdapter.DecodeActions.FROM_CACHE; } int size = mCategoryView.getImageSize(); PickerCategoryView.Thumbnail payload = mCategoryView.getLowResThumbnails().get(filePath); if (payload != null) { - Bitmap placeholder = payload.bitmap; + Bitmap placeholder = payload.bitmaps.get(0); // For performance stats see http://crbug.com/719919. long begin = SystemClock.elapsedRealtime(); placeholder = BitmapUtils.scale(placeholder, size, false); long scaleTime = SystemClock.elapsedRealtime() - begin; RecordHistogram.recordTimesHistogram( "Android.PhotoPicker.UpscaleLowResBitmap", scaleTime); + List<Bitmap> bitmaps = new ArrayList<>(1); + bitmaps.add(placeholder); - mItemView.initialize(mBitmapDetails, placeholder, payload.videoDuration, true); + mItemView.initialize(mBitmapDetails, bitmaps, payload.videoDuration, true); } else { mItemView.initialize(mBitmapDetails, null, null, true); } @@ -121,7 +132,9 @@ * holder. */ public String getFilePath() { - if (mBitmapDetails == null || mBitmapDetails.type() != PickerBitmap.TileTypes.PICTURE) + if (mBitmapDetails == null + || (mBitmapDetails.type() != PickerBitmap.TileTypes.PICTURE + && mBitmapDetails.type() != PickerBitmap.TileTypes.VIDEO)) return null; return mBitmapDetails.getUri().getPath(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java index 29af8cce..6e54850 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
@@ -63,11 +63,11 @@ * photo picker (the data we store in the cache). */ static public class Thumbnail { - public Bitmap bitmap; + public List<Bitmap> bitmaps; public String videoDuration; - Thumbnail(Bitmap bitmap, String videoDuration) { - this.bitmap = bitmap; + Thumbnail(List<Bitmap> bitmaps, String videoDuration) { + this.bitmaps = bitmaps; this.videoDuration = videoDuration; } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java index 24e28d6..507af65 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferences.java
@@ -9,15 +9,12 @@ import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceFragmentCompat; -import android.support.v7.preference.PreferenceScreen; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import org.chromium.base.BuildInfo; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; -import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial; import org.chromium.chrome.browser.help.HelpAndFeedback; import org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreferenceCompat; import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegateCompat; @@ -36,21 +33,11 @@ */ public class PrivacyPreferences extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { - private static final String PREF_NAVIGATION_ERROR = "navigation_error"; - private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions"; - private static final String PREF_SAFE_BROWSING_SCOUT_REPORTING = - "safe_browsing_scout_reporting"; - private static final String PREF_SAFE_BROWSING = "safe_browsing"; private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment"; - private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search"; - private static final String PREF_NETWORK_PREDICTIONS = "network_predictions"; - private static final String PREF_DO_NOT_TRACK = "do_not_track"; - private static final String PREF_USAGE_AND_CRASH_REPORTING = "usage_and_crash_reports"; - private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data"; - private static final String PREF_SYNC_AND_SERVICES_LINK_DIVIDER = - "sync_and_services_link_divider"; - private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; + private static final String PREF_NETWORK_PREDICTIONS = "preload_pages"; private static final String PREF_USAGE_STATS = "usage_stats_reporting"; + private static final String PREF_DO_NOT_TRACK = "do_not_track"; + private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; private ManagedPreferenceDelegateCompat mManagedPreferenceDelegate; @@ -62,7 +49,6 @@ getActivity().setTitle(R.string.prefs_privacy); setHasOptionsMenu(true); PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance(); - PreferenceScreen preferenceScreen = getPreferenceScreen(); mManagedPreferenceDelegate = createManagedPreferenceDelegate(); @@ -76,69 +62,14 @@ networkPredictionPref.setOnPreferenceChangeListener(this); networkPredictionPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - // Remove preferences that were migrated to SyncAndServicesPreferences. - preferenceScreen.removePreference(findPreference(PREF_NAVIGATION_ERROR)); - preferenceScreen.removePreference(findPreference(PREF_SEARCH_SUGGESTIONS)); - preferenceScreen.removePreference(findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING)); - preferenceScreen.removePreference(findPreference(PREF_SAFE_BROWSING)); - preferenceScreen.removePreference(findPreference(PREF_CONTEXTUAL_SEARCH)); - preferenceScreen.removePreference(findPreference(PREF_USAGE_AND_CRASH_REPORTING)); - - // TODO(https://crbug.com/846376): Update strings in XML after UNIFIED_CONSENT launch. - networkPredictionPref.setTitle(R.string.preload_pages_title); - networkPredictionPref.setSummary(R.string.preload_pages_summary); - - // Put networkPredictionPref after canMakePaymentPref by overriding order value. - // However, calling setOrder doesn't change existing order if Preference has already - // been added to PreferenceGroup. Remove and re-add it to work around this. - // TODO(https://crbug.com/846376): Reorder prefs in XML after UNIFIED_CONSENT launch. - preferenceScreen.removePreference(networkPredictionPref); - networkPredictionPref.setOrder(canMakePaymentPref.getOrder()); - preferenceScreen.addPreference(networkPredictionPref); - - Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK); - NoUnderlineClickableSpan linkSpan = - new NoUnderlineClickableSpan(getResources(), view -> { - PreferencesLauncher.launchSettingsPage(getActivity(), - SyncAndServicesPreferences.class, - SyncAndServicesPreferences.createArguments(false)); - }); - syncAndServicesLink.setSummary( - SpanApplier.applySpans(getString(R.string.privacy_sync_and_services_link), - new SpanApplier.SpanInfo("<link>", "</link>", linkSpan))); - - updateSummaries(); - return; - } - preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK_DIVIDER)); - preferenceScreen.removePreference(findPreference(PREF_SYNC_AND_SERVICES_LINK)); - - ChromeBaseCheckBoxPreferenceCompat navigationErrorPref = - (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_NAVIGATION_ERROR); - navigationErrorPref.setOnPreferenceChangeListener(this); - navigationErrorPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); - - ChromeBaseCheckBoxPreferenceCompat searchSuggestionsPref = - (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_SEARCH_SUGGESTIONS); - searchSuggestionsPref.setOnPreferenceChangeListener(this); - searchSuggestionsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); - - if (!ContextualSearchFieldTrial.isEnabled()) { - preferenceScreen.removePreference(findPreference(PREF_CONTEXTUAL_SEARCH)); - } - - // Listen to changes to the Extended Reporting pref. - ChromeBaseCheckBoxPreferenceCompat scoutReportingPref = - (ChromeBaseCheckBoxPreferenceCompat) findPreference( - PREF_SAFE_BROWSING_SCOUT_REPORTING); - scoutReportingPref.setOnPreferenceChangeListener(this); - scoutReportingPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); - - ChromeBaseCheckBoxPreferenceCompat safeBrowsingPref = - (ChromeBaseCheckBoxPreferenceCompat) findPreference(PREF_SAFE_BROWSING); - safeBrowsingPref.setOnPreferenceChangeListener(this); - safeBrowsingPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); + Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK); + NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(getResources(), view -> { + PreferencesLauncher.launchSettingsPage(getActivity(), SyncAndServicesPreferences.class, + SyncAndServicesPreferences.createArguments(false)); + }); + syncAndServicesLink.setSummary( + SpanApplier.applySpans(getString(R.string.privacy_sync_and_services_link), + new SpanApplier.SpanInfo("<link>", "</link>", linkSpan))); updateSummaries(); } @@ -146,20 +77,11 @@ @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); - if (PREF_SEARCH_SUGGESTIONS.equals(key)) { - PrefServiceBridge.getInstance().setSearchSuggestEnabled((boolean) newValue); - } else if (PREF_SAFE_BROWSING.equals(key)) { - PrefServiceBridge.getInstance().setSafeBrowsingEnabled((boolean) newValue); - } else if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) { - PrefServiceBridge.getInstance().setSafeBrowsingExtendedReportingEnabled( - (boolean) newValue); - } else if (PREF_NETWORK_PREDICTIONS.equals(key)) { - PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue); - } else if (PREF_NAVIGATION_ERROR.equals(key)) { - PrefServiceBridge.getInstance().setResolveNavigationErrorEnabled((boolean) newValue); - } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) { + if (PREF_CAN_MAKE_PAYMENT.equals(key)) { PrefServiceBridge.getInstance().setBoolean( Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); + } else if (PREF_NETWORK_PREDICTIONS.equals(key)) { + PrefServiceBridge.getInstance().setNetworkPredictionEnabled((boolean) newValue); } return true; @@ -177,37 +99,9 @@ public void updateSummaries() { PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance(); - PrivacyPreferencesManager privacyPrefManager = PrivacyPreferencesManager.getInstance(); - CharSequence textOn = getActivity().getResources().getText(R.string.text_on); CharSequence textOff = getActivity().getResources().getText(R.string.text_off); - CheckBoxPreference navigationErrorPref = (CheckBoxPreference) findPreference( - PREF_NAVIGATION_ERROR); - if (navigationErrorPref != null) { - navigationErrorPref.setChecked( - prefServiceBridge.isResolveNavigationErrorEnabled()); - } - - CheckBoxPreference searchSuggestionsPref = (CheckBoxPreference) findPreference( - PREF_SEARCH_SUGGESTIONS); - if (searchSuggestionsPref != null) { - searchSuggestionsPref.setChecked(prefServiceBridge.isSearchSuggestEnabled()); - } - - CheckBoxPreference extendedReportingPref = - (CheckBoxPreference) findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING); - if (extendedReportingPref != null) { - extendedReportingPref.setChecked( - prefServiceBridge.isSafeBrowsingExtendedReportingEnabled()); - } - - CheckBoxPreference safeBrowsingPref = - (CheckBoxPreference) findPreference(PREF_SAFE_BROWSING); - if (safeBrowsingPref != null) { - safeBrowsingPref.setChecked(prefServiceBridge.isSafeBrowsingEnabled()); - } - CheckBoxPreference canMakePaymentPref = (CheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT); if (canMakePaymentPref != null) { @@ -220,19 +114,6 @@ doNotTrackPref.setSummary(prefServiceBridge.isDoNotTrackEnabled() ? textOn : textOff); } - Preference contextualPref = findPreference(PREF_CONTEXTUAL_SEARCH); - if (contextualPref != null) { - boolean isContextualSearchEnabled = !prefServiceBridge.isContextualSearchDisabled(); - contextualPref.setSummary(isContextualSearchEnabled ? textOn : textOff); - } - - Preference usageAndCrashPref = findPreference(PREF_USAGE_AND_CRASH_REPORTING); - if (usageAndCrashPref != null) { - usageAndCrashPref.setSummary( - privacyPrefManager.isUsageAndCrashReportingPermittedByUser() ? textOn - : textOff); - } - Preference usageStatsPref = findPreference(PREF_USAGE_STATS); if (usageStatsPref != null) { if (BuildInfo.isAtLeastQ() && prefServiceBridge.getBoolean(Pref.USAGE_STATS_ENABLED)) { @@ -257,18 +138,6 @@ return preference -> { String key = preference.getKey(); PrefServiceBridge prefs = PrefServiceBridge.getInstance(); - if (PREF_NAVIGATION_ERROR.equals(key)) { - return prefs.isResolveNavigationErrorManaged(); - } - if (PREF_SEARCH_SUGGESTIONS.equals(key)) { - return prefs.isSearchSuggestManaged(); - } - if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) { - return prefs.isSafeBrowsingExtendedReportingManaged(); - } - if (PREF_SAFE_BROWSING.equals(key)) { - return prefs.isSafeBrowsingManaged(); - } if (PREF_NETWORK_PREDICTIONS.equals(key)) { return prefs.isNetworkPredictionManaged(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java index 9f0c4f2..db2bbb5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/sync/SyncPreferenceUtils.java
@@ -19,7 +19,6 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.LaunchIntentDispatcher; import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; @@ -108,10 +107,7 @@ if (profileSyncService.isPassphraseRequiredForDecryption()) { return res.getString(R.string.sync_need_passphrase); } - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - return context.getString(R.string.sync_and_services_summary_sync_on); - } - return context.getString(R.string.account_management_sync_summary, accountName); + return context.getString(R.string.sync_and_services_summary_sync_on); } return context.getString(R.string.sync_is_disabled); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/sharing/OWNERS new file mode 100644 index 0000000..9eddd18 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/sharing/OWNERS
@@ -0,0 +1,4 @@ +file://chrome/browser/sharing/OWNERS + +# COMPONENT: UI>Browser>Sharing +# OS: Android
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/SharingJNIBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/sharing/SharingJNIBridge.java new file mode 100644 index 0000000..b1aaf00 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/sharing/SharingJNIBridge.java
@@ -0,0 +1,27 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.sharing; + +import android.content.Context; +import android.telephony.TelephonyManager; + +import org.chromium.base.ContextUtils; +import org.chromium.base.annotations.CalledByNative; + +/** + * JNI bridge for SharingService. + */ +public class SharingJNIBridge { + private static final String TAG = "SharingJNIBridge"; + + // Returns if device supports telephony capability. + @CalledByNative + public static boolean isTelephonySupported() { + Context context = ContextUtils.getApplicationContext(); + TelephonyManager tm = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + return (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java new file mode 100644 index 0000000..c591e56 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandler.java
@@ -0,0 +1,82 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.sharing.click_to_call; + +import android.app.Notification; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.support.v4.app.NotificationCompat; + +import org.chromium.base.ContextUtils; +import org.chromium.base.annotations.CalledByNative; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.notifications.ChromeNotification; +import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder; +import org.chromium.chrome.browser.notifications.NotificationBuilderFactory; +import org.chromium.chrome.browser.notifications.NotificationConstants; +import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl; +import org.chromium.chrome.browser.notifications.NotificationMetadata; +import org.chromium.chrome.browser.notifications.NotificationUmaTracker; +import org.chromium.chrome.browser.notifications.PendingIntentProvider; +import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions; + +/** + * Manages ClickToCall related notifications for Android. + */ +public class ClickToCallMessageHandler { + private static final String EXTRA_PHONE_NUMBER = "ClickToCallMessageHandler.EXTRA_PHONE_NUMBER"; + + /** + * Handles the tapping of a notification by firing the call intent. + */ + public static final class TapReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + // TODO(mvanouwerkerk): fire the call intent. + } + } + + /** + * Displays a notification that starts a phone call when clicked. + * + * @param phoneNumber The phone number to call when the user taps on the notification. + */ + @CalledByNative + private static void showNotification(String phoneNumber) { + Context context = ContextUtils.getApplicationContext(); + PendingIntentProvider contentIntent = PendingIntentProvider.getBroadcast(context, + /*requestCode=*/0, + new Intent(context, TapReceiver.class).putExtra(EXTRA_PHONE_NUMBER, phoneNumber), + PendingIntent.FLAG_UPDATE_CURRENT); + Resources resources = context.getResources(); + String text = resources.getString(R.string.click_to_call_notification_text, phoneNumber); + ChromeNotificationBuilder builder = + NotificationBuilderFactory + .createChromeNotificationBuilder(/*preferCompat=*/true, + ChannelDefinitions.ChannelId.SHARING, + /*remoteAppPackageName=*/null, + new NotificationMetadata( + NotificationUmaTracker.SystemNotificationType.CLICK_TO_CALL, + NotificationConstants.GROUP_CLICK_TO_CALL, + NotificationConstants.NOTIFICATION_ID_CLICK_TO_CALL)) + .setContentIntent(contentIntent) + .setContentText(text) + .setGroup(NotificationConstants.GROUP_CLICK_TO_CALL) + .setPriorityBeforeO(NotificationCompat.PRIORITY_HIGH) + .setVibrate(new long[0]) + .setSmallIcon(R.drawable.ic_chrome) + .setAutoCancel(true) + .setDefaults(Notification.DEFAULT_ALL); + ChromeNotification notification = builder.buildChromeNotification(); + + new NotificationManagerProxyImpl(context).notify(notification); + NotificationUmaTracker.getInstance().onNotificationShown( + NotificationUmaTracker.SystemNotificationType.CLICK_TO_CALL, + notification.getNotification()); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java index 79ece13..30b5a51b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java
@@ -31,22 +31,15 @@ import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ContextUtils; -import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.AppHooks; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromeBasePreference; import org.chromium.chrome.browser.preferences.PrefServiceBridge; -import org.chromium.chrome.browser.preferences.Preferences; import org.chromium.chrome.browser.preferences.PreferencesLauncher; -import org.chromium.chrome.browser.preferences.sync.SyncPreference; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileAccountManagementMetrics; import org.chromium.chrome.browser.signin.SignOutDialogFragment.SignOutDialogListener; import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; import org.chromium.chrome.browser.sync.ProfileSyncService; -import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener; -import org.chromium.chrome.browser.sync.ui.SyncCustomizationFragment; import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.ChromeSigninController; import org.chromium.components.signin.GAIAServiceType; @@ -63,7 +56,7 @@ * Note: This can be triggered from a web page, e.g. a GAIA sign-in page. */ public class AccountManagementFragment extends PreferenceFragment - implements SignOutDialogListener, SyncStateChangedListener, SignInStateObserver, + implements SignOutDialogListener, SignInStateObserver, ConfirmManagedSyncDataDialog.Listener, ProfileDataCache.Observer { private static final String TAG = "AcctManagementPref"; @@ -89,11 +82,6 @@ public static final String PREF_PARENT_ACCOUNTS = "parent_accounts"; public static final String PREF_CHILD_CONTENT = "child_content"; public static final String PREF_CHILD_CONTENT_DIVIDER = "child_content_divider"; - public static final String PREF_GOOGLE_ACTIVITY_CONTROLS = "google_activity_controls"; - public static final String PREF_GOOGLE_ACTIVITY_CONTROLS_DIVIDER = - "google_activity_controls_divider"; - public static final String PREF_SYNC_SETTINGS = "sync_settings"; - public static final String PREF_SYNC_SETTINGS_DIVIDER = "sync_settings_divider"; public static final String PREF_SIGN_OUT = "sign_out"; public static final String PREF_SIGN_OUT_DIVIDER = "sign_out_divider"; @@ -158,11 +146,6 @@ super.onResume(); SigninManager.get().addSignInStateObserver(this); mProfileDataCache.addObserver(this); - ProfileSyncService syncService = ProfileSyncService.get(); - if (syncService != null) { - syncService.addSyncStateChangedListener(this); - } - mProfileDataCache.update(AccountManagerFacade.get().tryGetGoogleAccountNames()); update(); } @@ -172,10 +155,6 @@ super.onPause(); SigninManager.get().removeSignInStateObserver(this); mProfileDataCache.removeObserver(this); - ProfileSyncService syncService = ProfileSyncService.get(); - if (syncService != null) { - syncService.removeSyncStateChangedListener(this); - } } public void update() { @@ -200,8 +179,6 @@ configureSignOutSwitch(); configureChildAccountPreferences(); - configureSyncSettings(); - configureGoogleActivityControls(); updateAccountsList(); } @@ -221,10 +198,7 @@ getPreferenceScreen().removePreference(signOutSwitch); getPreferenceScreen().removePreference(findPreference(PREF_SIGN_OUT_DIVIDER)); } else { - signOutSwitch.setTitle(ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT) - ? R.string.sign_out_and_turn_off_sync - : R.string.account_management_sign_out); - + signOutSwitch.setTitle(R.string.sign_out_and_turn_off_sync); signOutSwitch.setEnabled(getSignOutAllowedPreferenceValue()); signOutSwitch.setOnPreferenceClickListener(preference -> { if (!isVisible() || !isResumed()) return false; @@ -263,44 +237,6 @@ } } - private void configureSyncSettings() { - Preference syncSettings = findPreference(PREF_SYNC_SETTINGS); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - getPreferenceScreen().removePreference(syncSettings); - getPreferenceScreen().removePreference(findPreference(PREF_SYNC_SETTINGS_DIVIDER)); - return; - } - final Preferences preferences = (Preferences) getActivity(); - syncSettings.setOnPreferenceClickListener(preference -> { - if (!isVisible() || !isResumed()) return false; - - if (ProfileSyncService.get() == null) return true; - - preferences.startFragment(SyncCustomizationFragment.class.getName(), new Bundle()); - return true; - }); - } - - private void configureGoogleActivityControls() { - Preference pref = findPreference(PREF_GOOGLE_ACTIVITY_CONTROLS); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - getPreferenceScreen().removePreference(pref); - getPreferenceScreen().removePreference( - findPreference(PREF_GOOGLE_ACTIVITY_CONTROLS_DIVIDER)); - return; - } - if (mProfile.isChild()) { - pref.setSummary(R.string.sign_in_google_activity_controls_message_child_account); - } - pref.setOnPreferenceClickListener(preference -> { - Activity activity = getActivity(); - AppHooks.get().createGoogleActivityController().openWebAndAppActivitySettings( - activity, mSignedInAccountName); - RecordUserAction.record("Signin_AccountSettings_GoogleActivityControlsClicked"); - return true; - }); - } - private void configureChildAccountPreferences() { Preference parentAccounts = findPreference(PREF_PARENT_ACCOUNTS); Preference childContent = findPreference(PREF_CHILD_CONTENT); @@ -474,18 +410,6 @@ onSignOutDialogDismissed(false); } - // ProfileSyncServiceListener implementation: - - @Override - public void syncStateChanged() { - SyncPreference pref = (SyncPreference) findPreference(PREF_SYNC_SETTINGS); - if (pref != null) { - pref.updateSyncSummaryAndIcon(); - } - - // TODO(crbug/557784): Show notification for sync error - } - // SignInStateObserver implementation: @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java index e39314a..778463d7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java
@@ -13,7 +13,6 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.SynchronousInitializationActivity; import org.chromium.chrome.browser.preferences.ManagedPreferencesUtils; import org.chromium.chrome.browser.preferences.PrefServiceBridge; @@ -66,13 +65,7 @@ return false; } - final Intent intent; - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - intent = SigninActivity.createIntent(context, accessPoint); - } else { - intent = createIntentForDefaultSigninFlow(context, accessPoint, false); - } - context.startActivity(intent); + context.startActivity(SigninActivity.createIntent(context, accessPoint)); return true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/IdentityServicesProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/IdentityServicesProvider.java index 006956e..0e0bd46 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/IdentityServicesProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/IdentityServicesProvider.java
@@ -29,6 +29,14 @@ return result; } + public static SigninManager getSigninManager() { + ThreadUtils.assertOnUiThread(); + SigninManager result = nativeGetSigninManager(Profile.getLastUsedProfile()); + assert result != null; + return result; + } + private static native AccountTrackerService nativeGetAccountTrackerService(Profile profile); private static native OAuth2TokenService nativeGetOAuth2TokenService(Profile profile); + private static native SigninManager nativeGetSigninManager(Profile profile); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java index 9f3bb4d..2b37f952 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java
@@ -66,16 +66,13 @@ SHOW_GAIA_SERVICE_TYPE_EXTRA, mGaiaServiceType); } - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - if (ChromeFeatureList.isEnabled(ChromeFeatureList.OFFER_WIPE_DATA_ON_SIGNOUT)) { - return createDialogUnifiedConsentAndForceWipeDataFeatureEnabled(); - } - return createDialogUnifiedConsentFeatureEnabled(); + if (ChromeFeatureList.isEnabled(ChromeFeatureList.OFFER_WIPE_DATA_ON_SIGNOUT)) { + return createDialogForceWipeDataFeatureEnabled(); } - return createDialogPreUnifiedConsent(); + return createDialog(); } - private Dialog createDialogUnifiedConsentFeatureEnabled() { + private Dialog createDialog() { String domain = SigninManager.get().getManagementDomain(); String message = domain == null ? getString(R.string.signout_message_without_remove_local_data) @@ -88,20 +85,7 @@ .create(); } - private Dialog createDialogPreUnifiedConsent() { - String domain = SigninManager.get().getManagementDomain(); - String message = domain == null - ? getString(R.string.signout_message_legacy) - : getString(R.string.signout_managed_account_message, domain); - return new AlertDialog.Builder(getActivity(), R.style.Theme_Chromium_AlertDialog) - .setTitle(R.string.signout_title_legacy) - .setPositiveButton(R.string.signout_dialog_positive_button, this) - .setNegativeButton(R.string.cancel, this) - .setMessage(message) - .create(); - } - - private Dialog createDialogUnifiedConsentAndForceWipeDataFeatureEnabled() { + private Dialog createDialogForceWipeDataFeatureEnabled() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Theme_Chromium_AlertDialog); LayoutInflater inflater = LayoutInflater.from(builder.getContext());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java index d2f2c2c2..3824041a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java
@@ -177,10 +177,10 @@ } @SuppressLint("StaticFieldLeak") - private static SigninManager sSigninManager; + private static SigninManager sTestingSigninManager; private static int sSignInAccessPoint = SigninAccessPoint.UNKNOWN; - private long mNativeSigninManagerAndroid; + private final long mNativeSigninManagerAndroid; private final Context mContext; private final SigninManagerDelegate mDelegate; private final AccountTrackerService mAccountTrackerService; @@ -212,37 +212,48 @@ private @Nullable SignOutState mSignOutState; /** - * A helper method for retrieving the application-wide SigninManager. - * <p/> - * Can only be accessed on the main thread. - * - * @return a singleton instance of the SigninManager. + * Called by native to create an instance of SigninManager. + * @param nativeSigninManagerAndroid A pointer to native's SigninManagerAndroid. + * @return */ - public static SigninManager get() { - ThreadUtils.assertOnUiThread(); - if (sSigninManager == null) { - sSigninManager = new SigninManager(); - } - return sSigninManager; - } - - private SigninManager() { - this(ContextUtils.getApplicationContext(), new ChromeSigninManagerDelegate(), + @CalledByNative + private static SigninManager create(long nativeSigninManagerAndroid) { + assert nativeSigninManagerAndroid != 0; + return new SigninManager(ContextUtils.getApplicationContext(), nativeSigninManagerAndroid, + new ChromeSigninManagerDelegate(), IdentityServicesProvider.getAccountTrackerService()); } + /** + * A helper method for retrieving the application-wide SigninManager. + * <p/> + * Can only be accessed on the main thread. + * @deprecated + * This method will be removed in https://crrev.com/c/1674022, use + * IdentityServicesProvider.getSigninManager() instead. + * + * @return a singleton instance of the SigninManager. + */ + @Deprecated() + public static SigninManager get() { + if (sTestingSigninManager != null) { + return sTestingSigninManager; + } + return IdentityServicesProvider.getSigninManager(); + } + @VisibleForTesting - SigninManager(Context context, SigninManagerDelegate delegate, + SigninManager(Context context, long nativeSigninManagerAndroid, SigninManagerDelegate delegate, AccountTrackerService accountTrackerService) { ThreadUtils.assertOnUiThread(); assert context != null; assert delegate != null; assert accountTrackerService != null; - mDelegate = delegate; mContext = context; + mNativeSigninManagerAndroid = nativeSigninManagerAndroid; + mDelegate = delegate; mAccountTrackerService = accountTrackerService; - mNativeSigninManagerAndroid = SigninManagerJni.get().init(this); mSigninAllowedByPolicy = SigninManagerJni.get().isSigninAllowedByPolicy(this, mNativeSigninManagerAndroid); @@ -252,6 +263,7 @@ /** * Perform destruction of the object, cascading destruction to delegate. */ + @CalledByNative public void destroy() { mDelegate.destroy(); } @@ -703,16 +715,22 @@ return SigninManagerJni.get().extractDomainName(email); } + /** + * Override the SigninManager to be used for tests + * @deprecated + * This method will be removed in https://crrev.com/c/1674022, provide SigninManager as a + * parameter of your tested objects instead. + * @param signinManager + */ @VisibleForTesting + @Deprecated public static void setInstanceForTesting(SigninManager signinManager) { - sSigninManager = signinManager; + sTestingSigninManager = signinManager; } // Native methods. @NativeMethods interface Natives { - long init(@JCaller SigninManager self); - boolean isSigninAllowedByPolicy( @JCaller SigninManager self, long nativeSigninManagerAndroid);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java index 5e881178..2effd36 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
@@ -5,7 +5,6 @@ package org.chromium.chrome.browser.signin; import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.support.annotation.DimenRes; @@ -19,7 +18,6 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.metrics.ImpressionTracker; import org.chromium.chrome.browser.metrics.OneShotImpressionListener; import org.chromium.chrome.browser.signin.AccountSigninActivity.AccessPoint; @@ -65,7 +63,6 @@ private final @Nullable String mImpressionsTilDismissHistogramName; private final @Nullable String mImpressionsTilSigninButtonsHistogramName; private final @Nullable String mImpressionsTilXButtonHistogramName; - private final @StringRes int mDescriptionStringIdLegacy; private final @StringRes int mDescriptionStringId; private final @StringRes int mDescriptionStringIdNoAccount; private boolean mWasDisplayed; @@ -123,7 +120,6 @@ "MobileSignInPromo.BookmarkManager.ImpressionsTilSigninButtons"; mImpressionsTilXButtonHistogramName = "MobileSignInPromo.BookmarkManager.ImpressionsTilXButton"; - mDescriptionStringIdLegacy = R.string.signin_promo_description_bookmarks_legacy; mDescriptionStringId = R.string.signin_promo_description_bookmarks; mDescriptionStringIdNoAccount = R.string.signin_promo_description_bookmarks_no_account; @@ -147,8 +143,6 @@ mImpressionsTilDismissHistogramName = null; mImpressionsTilSigninButtonsHistogramName = null; mImpressionsTilXButtonHistogramName = null; - mDescriptionStringIdLegacy = - R.string.signin_promo_description_ntp_content_suggestions_legacy; mDescriptionStringId = R.string.signin_promo_description_ntp_content_suggestions; mDescriptionStringIdNoAccount = R.string.signin_promo_description_ntp_content_suggestions_no_account; @@ -170,7 +164,6 @@ mImpressionsTilDismissHistogramName = null; mImpressionsTilSigninButtonsHistogramName = null; mImpressionsTilXButtonHistogramName = null; - mDescriptionStringIdLegacy = R.string.signin_promo_description_recent_tabs_legacy; mDescriptionStringId = R.string.signin_promo_description_recent_tabs; mDescriptionStringIdNoAccount = R.string.signin_promo_description_recent_tabs_no_account; @@ -193,7 +186,6 @@ "MobileSignInPromo.SettingsManager.ImpressionsTilSigninButtons"; mImpressionsTilXButtonHistogramName = "MobileSignInPromo.SettingsManager.ImpressionsTilXButton"; - mDescriptionStringIdLegacy = R.string.signin_promo_description_settings_legacy; mDescriptionStringId = R.string.signin_promo_description_settings; mDescriptionStringIdNoAccount = R.string.signin_promo_description_settings_no_account; @@ -269,7 +261,6 @@ /** @return the resource used for the text displayed as promo description. */ public @StringRes int getDescriptionStringId() { - if (!isUnifiedConsent()) return mDescriptionStringIdLegacy; return mProfileData == null ? mDescriptionStringIdNoAccount : mDescriptionStringId; } @@ -277,9 +268,7 @@ view.getImage().setImageResource(R.drawable.chrome_sync_logo); setImageSize(context, view, R.dimen.signin_promo_cold_state_image_size); - @StringRes int descriptionTextId = - isUnifiedConsent() ? mDescriptionStringIdNoAccount : mDescriptionStringIdLegacy; - view.getDescription().setText(descriptionTextId); + view.getDescription().setText(mDescriptionStringIdNoAccount); view.getSigninButton().setText(R.string.sign_in_to_chrome); view.getSigninButton().setOnClickListener(v -> signinWithNewAccount(context)); @@ -288,30 +277,18 @@ } private void setupHotState(final Context context, PersonalizedSigninPromoView view) { - final @StringRes int descriptionTextId; - final String chooseAccountButtonText; - if (isUnifiedConsent()) { - descriptionTextId = mDescriptionStringId; - chooseAccountButtonText = - context.getString(R.string.signin_promo_choose_another_account); - } else { - descriptionTextId = mDescriptionStringIdLegacy; - chooseAccountButtonText = context.getString( - R.string.signin_promo_choose_account, mProfileData.getAccountName()); - } - Drawable accountImage = mProfileData.getImage(); view.getImage().setImageDrawable(accountImage); setImageSize(context, view, R.dimen.signin_promo_account_image_size); - view.getDescription().setText(descriptionTextId); + view.getDescription().setText(mDescriptionStringId); String signinButtonText = context.getString( R.string.signin_promo_continue_as, mProfileData.getFullNameOrEmail()); view.getSigninButton().setText(signinButtonText); view.getSigninButton().setOnClickListener(v -> signinWithDefaultAccount(context)); - view.getChooseAccountButton().setText(chooseAccountButtonText); + view.getChooseAccountButton().setText(R.string.signin_promo_choose_another_account); view.getChooseAccountButton().setOnClickListener(v -> signinWithNotDefaultAccount(context)); view.getChooseAccountButton().setVisibility(View.VISIBLE); } @@ -324,42 +301,22 @@ private void signinWithNewAccount(Context context) { recordSigninButtonUsed(); RecordUserAction.record(mSigninNewAccountUserActionName); - final Intent intent; - if (isUnifiedConsent()) { - intent = SigninActivity.createIntentForPromoAddAccountFlow(context, mAccessPoint); - } else { - intent = AccountSigninActivity.createIntentForAddAccountSigninFlow( - context, mAccessPoint, true); - } - context.startActivity(intent); + context.startActivity( + SigninActivity.createIntentForPromoAddAccountFlow(context, mAccessPoint)); } private void signinWithDefaultAccount(Context context) { recordSigninButtonUsed(); RecordUserAction.record(mSigninWithDefaultUserActionName); - final Intent intent; - if (isUnifiedConsent()) { - intent = SigninActivity.createIntentForPromoDefaultFlow( - context, mAccessPoint, mProfileData.getAccountName()); - } else { - intent = AccountSigninActivity.createIntentForConfirmationOnlySigninFlow( - context, mAccessPoint, mProfileData.getAccountName(), true, true); - } - context.startActivity(intent); + context.startActivity(SigninActivity.createIntentForPromoDefaultFlow( + context, mAccessPoint, mProfileData.getAccountName())); } private void signinWithNotDefaultAccount(Context context) { recordSigninButtonUsed(); RecordUserAction.record(mSigninNotDefaultUserActionName); - final Intent intent; - if (isUnifiedConsent()) { - intent = SigninActivity.createIntentForPromoChooseAccountFlow( - context, mAccessPoint, mProfileData.getAccountName()); - } else { - intent = AccountSigninActivity.createIntentForDefaultSigninFlow( - context, mAccessPoint, true); - } - context.startActivity(intent); + context.startActivity(SigninActivity.createIntentForPromoChooseAccountFlow( + context, mAccessPoint, mProfileData.getAccountName())); } private void recordSigninButtonUsed() { @@ -394,10 +351,6 @@ } } - private static boolean isUnifiedConsent() { - return ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT); - } - @VisibleForTesting public static int getMaxImpressionsBookmarksForTests() { return MAX_IMPRESSIONS_BOOKMARKS;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/UnifiedConsentServiceBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/UnifiedConsentServiceBridge.java index a82cf2d..bda1b3e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/UnifiedConsentServiceBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/UnifiedConsentServiceBridge.java
@@ -7,8 +7,7 @@ import org.chromium.chrome.browser.profiles.Profile; /** - * Bridge to UnifiedConsentService. Should only be used if - * {@link org.chromium.chrome.browser.ChromeFeatureList.UNIFIED_CONSENT} feature is enabled. + * Bridge to UnifiedConsentService. */ public class UnifiedConsentServiceBridge { private UnifiedConsentServiceBridge() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java index 3959e0c..ca2b453 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncNotificationController.java
@@ -7,13 +7,11 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.os.Bundle; import android.util.Log; import org.chromium.base.ContextUtils; import org.chromium.base.ThreadUtils; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.notifications.ChromeNotification; import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder; import org.chromium.chrome.browser.notifications.NotificationBuilderFactory; @@ -26,7 +24,6 @@ import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions; import org.chromium.chrome.browser.preferences.PreferencesLauncher; import org.chromium.chrome.browser.preferences.sync.SyncAndServicesPreferences; -import org.chromium.chrome.browser.signin.AccountManagementFragment; import org.chromium.chrome.browser.sync.GoogleServiceAuthError.State; import org.chromium.chrome.browser.sync.ui.PassphraseActivity; import org.chromium.components.sync.AndroidSyncSettings; @@ -149,17 +146,9 @@ * @return the intent for opening the settings */ private Intent createSettingsIntent() { - final String fragmentName; - final Bundle fragmentArguments; - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - fragmentName = SyncAndServicesPreferences.class.getName(); - fragmentArguments = SyncAndServicesPreferences.createArguments(false); - } else { - fragmentName = AccountManagementFragment.class.getName(); - fragmentArguments = null; - } - return PreferencesLauncher.createIntentForSettingsPage( - ContextUtils.getApplicationContext(), fragmentName, fragmentArguments); + return PreferencesLauncher.createIntentForSettingsPage(ContextUtils.getApplicationContext(), + SyncAndServicesPreferences.class.getName(), + SyncAndServicesPreferences.createArguments(false)); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webauth/EmptyHandlerResponseCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/webauth/EmptyHandlerResponseCallback.java deleted file mode 100644 index a657b05..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/webauth/EmptyHandlerResponseCallback.java +++ /dev/null
@@ -1,26 +0,0 @@ -// 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. - -package org.chromium.chrome.browser.webauth; - -import org.chromium.blink.mojom.GetAssertionAuthenticatorResponse; -import org.chromium.blink.mojom.MakeCredentialAuthenticatorResponse; - -/** - * Empty HandlerResponseCallback Temporarily used for landing CLs for - * IsUserVerifyingPlatformAuthenticatorAvailable error response. - */ -public class EmptyHandlerResponseCallback extends HandlerResponseCallback { - @Override - public void onRegisterResponse(Integer status, MakeCredentialAuthenticatorResponse response){}; - - @Override - public void onSignResponse(Integer status, GetAssertionAuthenticatorResponse response){}; - - @Override - public void onIsUserVerifyingPlatformAuthenticatorAvailableResponse(boolean isUVPAA){}; - - @Override - public void onError(Integer status){}; -}
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index ca2061e2..d4e9cba 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -348,15 +348,6 @@ <message name="IDS_SIGN_IN_TO_CHROME_DISABLED_SUMMARY" desc="A descriptive line of text that appears under the 'Sign in to Chrome' option, in Chrome Settings on Android. The text explains why 'Sign in to Chrome' is disabled. 'Administrator' refers to the IT administrator of the company/organization that owns the user’s device."> Disabled by the administrator of this device </message> - <message name="IDS_SIGN_IN_GOOGLE_ACTIVITY_CONTROLS_LEGACY" desc="Title of Google activity controls preference in signed in accounts settings screen"> - Google Activity Controls - </message> - <message name="IDS_SIGN_IN_GOOGLE_ACTIVITY_CONTROLS_MESSAGE_LEGACY" desc="Message of Google activity controls preference in signed in accounts settings screen"> - Control how Google uses your browsing history to personalize Search, ads, and other Google services. - </message> - <message name="IDS_SIGN_IN_GOOGLE_ACTIVITY_CONTROLS_MESSAGE_CHILD_ACCOUNT" desc="Message of Google activity controls preference in signed in accounts settings screen for child accounts"> - Control how Google uses your browsing history to personalize Search and other Google services. - </message> <message name="IDS_SIGN_IN_GOOGLE_ACTIVITY_CONTROLS_TITLE" desc="Title of Google activity controls preference in signed in accounts settings screen"> Google activity controls </message> @@ -698,18 +689,6 @@ <message name="IDS_PREFS_PRIVACY" desc="Title for the Privacy preferences. [CHAR-LIMIT=32]"> Privacy </message> - <message name="IDS_NAVIGATION_ERROR_TITLE" desc="Title for checkbox to enable or disable navigation error suggestions."> - Navigation error suggestions - </message> - <message name="IDS_NAVIGATION_ERROR_SUMMARY" desc="Summary for navigation error suggestions."> - Show suggestions when a web address does not resolve or a connection cannot be made - </message> - <message name="IDS_SEARCH_SUGGESTIONS_TITLE" desc="Title for search and url suggestions."> - Search and URL suggestions - </message> - <message name="IDS_SEARCH_SUGGESTIONS_SUMMARY" desc="Summary for search and url suggestions."> - Use a prediction service to show related queries and popular websites as you type in the address bar - </message> <message name="IDS_SAFE_BROWSING_SCOUT_REPORTING_TITLE" desc="Title for checkbox that controls reporting data to detect bad apps/sites. Please ensure ‘Safe Browsing’ in this message matches the ‘Safe Browsing’ settings title."> Help improve Chrome security </message> @@ -722,12 +701,6 @@ <message name="IDS_SAFE_BROWSING_SUMMARY" desc="Summary for safe browsing."> Sends URLs of some pages you visit to Google, when your security is at risk </message> - <message name="IDS_NETWORK_PREDICTIONS_TITLE" desc="Title of a setting in Chrome settings. Followed by a body that describes the setting. If setting is turned on, Chrome will download certain pages to the user’s phone automatically for offline reading. 'predictions' convey the idea that Chrome is using predictive models to figure out pages likely of interest to the user."> - Use page predictions - </message> - <message name="IDS_NETWORK_PREDICTIONS_SUMMARY" desc="Body text for the “Use page predictions” setting in Chrome settings. Describes what happens if the setting is turned on. 'Preload' conveys the idea that Chrome is getting pages for the user without their explicit interaction or consent."> - Preload pages for faster loading and offline reading - </message> <message name="IDS_CONTEXTUAL_SEARCH_TITLE" desc="Name for the Contextual Search feature, which allows users to search for a term in a web page by tapping on it."> Tap to Search </message> @@ -1517,9 +1490,6 @@ <message name="IDS_ACCOUNT_MANAGEMENT_TITLE" desc="Header title for the account management screen. [CHAR-LIMIT=32]"> Signed in to Google as </message> - <message name="IDS_ACCOUNT_MANAGEMENT_SYNC_SUMMARY" desc="Description for which account the data is being synced to"> - Syncing to <ph name="SYNC_ACCOUNT_USER_NAME">%1$s<ex>johndoe@gmail.com</ex></ph> - </message> <message name="IDS_ACCOUNT_MANAGEMENT_SIGN_OUT" desc="Button text for signing out of Chrome"> Sign out of Chrome </message> @@ -1611,15 +1581,9 @@ </message> <!-- Sign-in strings --> - <message name="IDS_SIGNOUT_TITLE_LEGACY" desc="Title for sign out of Chrome dialog [CHAR-LIMIT=40]"> - Sign out of Chrome? - </message> <message name="IDS_SIGNOUT_TITLE" desc="Title for sign out of Chrome dialog [CHAR-LIMIT=40]"> Sign out and turn off sync? </message> - <message name="IDS_SIGNOUT_MESSAGE_LEGACY" desc="Message to display for sign out of Chrome dialog"> - Changes to your bookmarks, history, passwords, and other settings will no longer be synced to your Google Account. However, your existing data will remain stored in your Google account. - </message> <message name="IDS_SIGNOUT_MESSAGE_WITHOUT_REMOVE_LOCAL_DATA" desc="Message to display in 'Sign out and turn off sync?' dialog"> Your bookmarks, history, passwords, and more will no longer be synced to your Google Account </message> @@ -1632,9 +1596,6 @@ <message name="IDS_SIGNOUT_MANAGED_ACCOUNT_MESSAGE" desc="Message to display for sign out of Chrome dialog when the account has enterprise management, and all user data will be erased"> You are signing out of an account managed by <ph name="DOMAIN_NAME">%1$s<ex>google.com</ex></ph>. This will delete the Chrome data stored on this device, but the data will remain in your Google Account. </message> - <message name="IDS_SIGNOUT_DIALOG_POSITIVE_BUTTON" desc="Button to sign out of Chrome"> - Sign out - </message> <message name="IDS_SIGN_IN_GETTING_ACCOUNT_MANAGEMENT_POLICY" desc="Title of progress bar dialog for getting management policy"> Contacting Google. This may take a minute… </message> @@ -2760,18 +2721,6 @@ </message> <!-- Personalized Signin Promos Strings --> - <message name="IDS_SIGNIN_PROMO_DESCRIPTION_BOOKMARKS_LEGACY" desc="Description string for 'Continue as' signin promo shown in Bookmarks screen."> - To get your bookmarks on all your devices, sign in to Chrome. - </message> - <message name="IDS_SIGNIN_PROMO_DESCRIPTION_NTP_CONTENT_SUGGESTIONS_LEGACY" desc="Description string for 'Continue as' signin promo shown in NTP content suggestions screen."> - To get personalized content suggested by Google, sign in to Chrome. - </message> - <message name="IDS_SIGNIN_PROMO_DESCRIPTION_RECENT_TABS_LEGACY" desc="Description string for 'Continue as' signin promo shown in Recent Tabs screen."> - To get your tabs from your other devices, sign in to Chrome. - </message> - <message name="IDS_SIGNIN_PROMO_DESCRIPTION_SETTINGS_LEGACY" desc="Description string for 'Continue as' signin promo shown in Settings screen."> - Sign in to Chrome to get your bookmarks, passwords, and more on all your devices. - </message> <message name="IDS_SIGNIN_PROMO_CONTINUE_AS" desc="Button that the user can press to login without asking the password and continue using Chrome with this acccount."> Continue as <ph name="USER_FULL_NAME">%1$s<ex>John Doe</ex></ph> </message> @@ -3953,6 +3902,11 @@ Active today </message> + <!-- ClickToCall --> + <message name="IDS_CLICK_TO_CALL_NOTIFICATION_TEXT" desc="Text displayed in a click to call notification."> + Call <ph name="PHONE_NUMBER">%1$s<ex>+1234567890</ex></ph> + </message> + <!-- Chrome Duet --> <message name="IDS_IPH_DUET_TITLE" desc="This string appears in an overlay that explains a new UI to users. 'Search' refers to searching the web, and 'explore' refers to Chrome's suggested content."> Search & explore @@ -4107,8 +4061,8 @@ Google Assistant in Chrome </message> - <message name="IDS_DEVTOOLS_MODULE_TITLE" desc="Text shown when the Developer Tools module is referenced in install start, success, failure UI (e.g. in IDS_MODULE_INSTALL_START_TEXT, which will expand to 'Installing Developer Tools for Chrome…')."> - Developer Tools + <message name="IDS_DEV_UI_MODULE_TITLE" desc="Text shown when the Developer UI module is referenced in install start, success, failure UI (e.g. in IDS_MODULE_INSTALL_START_TEXT, which will expand to 'Installing Developer UI for Chrome…')."> + Developer UI </message> </messages> </release>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java index b1c493a..25de80b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java
@@ -13,7 +13,6 @@ import org.junit.runners.model.Statement; import org.chromium.chrome.browser.ChromeActivity; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.identity.UniqueIdentificationGenerator; import org.chromium.chrome.browser.identity.UniqueIdentificationGeneratorFactory; import org.chromium.chrome.browser.identity.UuidBasedUniqueIdentificationGenerator; @@ -137,12 +136,8 @@ public void signIn(final Account account) { TestThreadUtils.runOnUiThreadBlocking(() -> { SigninManager.get().signIn(account, null, null); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - // Outside of tests, URL-keyed anonymized data collection is enabled by sign-in UI. - // Note: If unified consent is not enabled, then UKM will be enabled based on - // the history sync state. - UnifiedConsentServiceBridge.setUrlKeyedAnonymizedDataCollectionEnabled(true); - } + // Outside of tests, URL-keyed anonymized data collection is enabled by sign-in UI. + UnifiedConsentServiceBridge.setUrlKeyedAnonymizedDataCollectionEnabled(true); }); SyncTestUtil.waitForSyncActive(); SyncTestUtil.triggerSyncAndWaitForCompletion();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java index b9fee5e..5e107e3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java
@@ -15,13 +15,10 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.metrics.UmaSessionStats; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.browser.Features.DisableFeatures; -import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; import org.chromium.components.sync.ModelType; import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils; @@ -137,33 +134,6 @@ @Test @SmallTest - @DisableFeatures(ChromeFeatureList.UNIFIED_CONSENT) - public void secondaryPassphraseCheck() throws Exception { - // Keep in sync with UkmBrowserTest.SecondaryPassphraseCheck in - // chrome/browser/metrics/ukm_browsertest.cc. - // Make sure that UKM is disabled when an secondary passphrase is set. - - TestThreadUtils.runOnUiThreadBlocking( - () -> UmaSessionStats.updateMetricsAndCrashReportingForTesting(true)); - - // Enable a Syncing account. - Account account = mSyncTestRule.setUpTestAccountAndSignIn(); - Tab normalTab = mSyncTestRule.getActivity().getActivityTab(); - Assert.assertTrue("UKM Enabled:", isUkmEnabled(normalTab)); - - String clientId = getUkmClientId(normalTab); - - // Add a passphrase. This should disable UKM. - SyncTestUtil.encryptWithPassphrase("passphrase"); - - Assert.assertFalse("UKM Enabled:", isUkmEnabled(normalTab)); - - // Client ID should have been reset. - Assert.assertNotEquals("Client id:", clientId, getUkmClientId(normalTab)); - } - - @Test - @SmallTest public void singleSyncSignoutCheck() throws Exception { // Keep in sync with UkmBrowserTest.SingleSyncSignoutCheck in // chrome/browser/metrics/ukm_browsertest.cc. @@ -208,23 +178,7 @@ // Disable Sync for history. mSyncTestRule.disableDataType(ModelType.TYPED_URLS); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_CONSENT)) { - // Disable history sync does not disable UKM when unified consent is - // enabled. - Assert.assertTrue("UKM Enabled:", isUkmEnabled(normalTab)); - } else { - Assert.assertFalse("UKM Enabled:", isUkmEnabled(normalTab)); - - // Client ID should have been reset. - Assert.assertNotEquals("Client id:", originalClientId, getUkmClientId(normalTab)); - - // Re-enable Sync for history. - mSyncTestRule.enableDataType(ModelType.TYPED_URLS); - - Assert.assertTrue("UKM Enabled:", isUkmEnabled(normalTab)); - - // Client ID should still be different. - Assert.assertNotEquals("Client id:", originalClientId, getUkmClientId(normalTab)); - } + // Disable history sync does not disable UKM + Assert.assertTrue("UKM Enabled:", isUkmEnabled(normalTab)); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java index ed5f1b06..04a4830e 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
@@ -101,8 +101,8 @@ @Config(manifest = Config.NONE, shadows = {CustomShadowAsyncTask.class, ShadowPostTask.class, NewTabPageAdapterTest.ShadowChromeFeatureList.class}) -@DisableFeatures({ChromeFeatureList.CONTENT_SUGGESTIONS_SCROLL_TO_LOAD, - ChromeFeatureList.CHROME_DUET, ChromeFeatureList.UNIFIED_CONSENT}) +@DisableFeatures( + {ChromeFeatureList.CONTENT_SUGGESTIONS_SCROLL_TO_LOAD, ChromeFeatureList.CHROME_DUET}) public class NewTabPageAdapterTest { @Rule public DisableHistogramsRule mDisableHistogramsRule = new DisableHistogramsRule(); @@ -1010,7 +1010,7 @@ public void testSigninPromoDismissal() { final String signInPromoText = "sign in"; when(MyShadowResources.sResources.getText( - R.string.signin_promo_description_ntp_content_suggestions_legacy)) + R.string.signin_promo_description_ntp_content_suggestions_no_account)) .thenReturn(signInPromoText); when(mMockSigninManager.isSignInAllowed()).thenReturn(true);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java index ae2c0f3..154f125 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
@@ -59,13 +59,13 @@ initMocks(this); mocker.mock(SigninManagerJni.TEST_HOOKS, mNativeMock); - doReturn(0l).when(mNativeMock).init(any()); + doReturn(true).when(mNativeMock).isSigninAllowedByPolicy(any(), anyLong()); mAccountTrackerService = mock(AccountTrackerService.class); - mSigninManager = spy(new SigninManager( - ContextUtils.getApplicationContext(), mDelegateMock, mAccountTrackerService)); + mSigninManager = spy(new SigninManager(ContextUtils.getApplicationContext(), + 0 /* nativeSigninManagerAndroid */, mDelegateMock, mAccountTrackerService)); } @Test
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java index b19b965..7f5648f 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/NoTouchActivity.java
@@ -12,6 +12,8 @@ import android.os.SystemClock; import android.view.ViewGroup; +import org.chromium.base.ActivityState; +import org.chromium.base.ApplicationStatus; import org.chromium.base.VisibleForTesting; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.ChromeActivity; @@ -82,9 +84,14 @@ // TODO(mthiesse): For now, let's just clobber current tab always. Are the other // tab open types meaningful when we only have a single tab? - // When we get a view intent, create a new tab to reset history state so that - // back returns you to the sender. - if (tabOpenType != TabOpenType.BRING_TAB_TO_FRONT) createAndShowTab(); + boolean stopped = ApplicationStatus.getStateForActivity(NoTouchActivity.this) + == ActivityState.STOPPED; + + // When we get a view intent while stopped, create a new tab to reset history + // state so that back returns you to the sender. + if (tabOpenType != TabOpenType.BRING_TAB_TO_FRONT && stopped) { + createAndShowTab(); + } Tab currentTab = getActivityTab(); TabRedirectHandler.from(currentTab).updateIntent(intent); int transitionType = PageTransition.LINK | PageTransition.FROM_API; @@ -208,6 +215,7 @@ /** * @return Whether this activity supports the find in page page */ + @Override public boolean supportsFindInPage() { return false; }
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/OpenLastTabMediator.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/OpenLastTabMediator.java index 962996c..8b7e7273 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/OpenLastTabMediator.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/OpenLastTabMediator.java
@@ -20,6 +20,7 @@ import org.chromium.chrome.browser.history.HistoryItem; import org.chromium.chrome.browser.history.HistoryProvider; import org.chromium.chrome.browser.native_page.ContextMenuManager; +import org.chromium.chrome.browser.native_page.ContextMenuManager.ContextMenuItemId; import org.chromium.chrome.browser.native_page.NativePageFactory; import org.chromium.chrome.browser.native_page.NativePageHost; import org.chromium.chrome.browser.profiles.Profile; @@ -241,7 +242,8 @@ @Override public boolean isItemSupported( @ContextMenuManager.ContextMenuItemId int menuItemId) { - return menuItemId == ContextMenuManager.ContextMenuItemId.REMOVE; + return menuItemId == ContextMenuItemId.SEARCH + || menuItemId == ContextMenuManager.ContextMenuItemId.REMOVE; } @Override
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java index e0d95152..28eff334 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java
@@ -22,6 +22,7 @@ import android.widget.TextView; import org.chromium.chrome.browser.native_page.ContextMenuManager; +import org.chromium.chrome.browser.native_page.ContextMenuManager.ContextMenuItemId; import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegate; import org.chromium.chrome.browser.util.UrlConstants; import org.chromium.chrome.touchless.R; @@ -94,7 +95,8 @@ @Override public boolean isItemSupported(int menuItemId) { - return menuItemId == ContextMenuManager.ContextMenuItemId.REMOVE; + return menuItemId == ContextMenuManager.ContextMenuItemId.SEARCH + || menuItemId == ContextMenuManager.ContextMenuItemId.REMOVE; } @Override @@ -181,7 +183,12 @@ -> mNavDelegate.navigateToSuggestionUrl( WindowOpenDisposition.CURRENT_TAB, UrlConstants.EXPLORE_URL)); ContextMenuManager.registerViewForTouchlessContextMenu( - tile, new ContextMenuManager.EmptyDelegate()); + tile, new ContextMenuManager.EmptyDelegate() { + @Override + public boolean isItemSupported(@ContextMenuItemId int menuItemId) { + return menuItemId == ContextMenuManager.ContextMenuItemId.SEARCH; + } + }); tile.setContentDescription(tile.getResources().getString(R.string.ntp_all_apps)); } else if (holder.getItemViewType() == ViewType.SUGGESTION_TYPE) { // If site suggestion, attach context menu handler; clicks navigate to site url.
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessActionItemViewHolder.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessActionItemViewHolder.java index 16dad97..ca4b875 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessActionItemViewHolder.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessActionItemViewHolder.java
@@ -59,7 +59,8 @@ @Override public boolean isItemSupported(@ContextMenuItemId int menuItemId) { - return menuItemId == ContextMenuItemId.LEARN_MORE; + return menuItemId == ContextMenuItemId.SEARCH + || menuItemId == ContextMenuItemId.LEARN_MORE; } }); }
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessContextMenuManager.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessContextMenuManager.java index 7abdcb9..1afba35 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessContextMenuManager.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessContextMenuManager.java
@@ -142,7 +142,7 @@ // Here we filter out any item IDs that don't make sense in touchless. switch (itemId) { case ContextMenuItemId.SEARCH: - return true; + return delegate.isItemSupported(itemId); case ContextMenuItemId.REMOVE: // fall through case ContextMenuItemId.LEARN_MORE:
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 239951c..4ff7bc6 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1500,6 +1500,8 @@ "sessions/tab_restore_service_factory.h", "sharing/ack_message_handler.cc", "sharing/ack_message_handler.h", + "sharing/click_to_call/click_to_call_message_handler_android.cc", + "sharing/click_to_call/click_to_call_message_handler_android.h", "sharing/click_to_call/feature.cc", "sharing/click_to_call/feature.h", "sharing/fcm_constants.cc", @@ -2001,6 +2003,8 @@ "//components/signin/core/browser", "//components/signin/core/browser:signin_buildflags", "//components/signin/core/browser/webdata", + "//components/signin/internal/identity_manager", # TODO(974198): remove once closed + "//components/signin/public/identity_manager", "//components/spellcheck:buildflags", "//components/ssl_errors", "//components/startup_metric_utils/browser:host", @@ -2086,7 +2090,7 @@ "//services/device/public/mojom", "//services/device/public/mojom:usb", "//services/identity:lib", - "//services/identity/public/cpp", + "//services/identity/public/cpp:cpp_types", "//services/image_annotation:service", "//services/image_annotation/public/mojom", "//services/metrics/public/cpp:ukm_builders", @@ -2771,6 +2775,10 @@ "search_engines/template_url_service_factory_android.cc", "search_engines/template_url_service_factory_android.h", "signin/identity_services_provider_android.cc", + "signin/signin_manager_android_wrapper.cc", + "signin/signin_manager_android_wrapper.h", + "signin/signin_manager_android_wrapper_factory.cc", + "signin/signin_manager_android_wrapper_factory.h", "ssl/security_state_model_android.cc", "sync/glue/synced_tab_delegate_android.cc", "sync/glue/synced_tab_delegate_android.h", @@ -2803,12 +2811,12 @@ "//components/payments/content/android", "//components/resources:components_resources", "//components/send_tab_to_self", + "//components/signin/public/identity_manager", "//media/mojo/clients", "//media/mojo/interfaces:constants", "//rlz:rlz_utils", "//sandbox", "//sandbox:sandbox_buildflags", - "//services/identity/public/cpp", "//services/proxy_resolver:lib", "//third_party/android_opengl/etc1", "//third_party/android_sdk:cpu_features", @@ -5351,6 +5359,7 @@ "//components/safe_browsing:csd_proto", "//components/search_engines:test_support", "//components/sessions:test_support", + "//components/signin/public/identity_manager:test_support", "//components/subresource_filter/core/browser:test_support", "//components/subresource_filter/core/common:test_support", "//components/sync_preferences:test_support", @@ -5358,7 +5367,6 @@ "//content/test:test_support", "//google_apis:test_support", "//net:test_support", - "//services/identity/public/cpp:test_support", "//services/preferences/public/cpp/tracked:test_support", "//skia", "//testing/gmock",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 15ca8c9..54738cc 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3019,12 +3019,6 @@ FEATURE_VALUE_TYPE( autofill::features::kAutofillRestrictUnownedFieldsToFormlessCheckout)}, -#if defined(TOOLKIT_VIEWS) - {"views-cast-dialog", flag_descriptions::kViewsCastDialogName, - flag_descriptions::kViewsCastDialogDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kViewsCastDialog)}, -#endif // defined(TOOLKIT_VIEWS) - #if defined(OS_ANDROID) {"enable-horizontal-tab-switcher", flag_descriptions::kHorizontalTabSwitcherAndroidName, @@ -3824,7 +3818,8 @@ #endif // OS_ANDROID {"enable-skia-renderer", flag_descriptions::kSkiaRendererName, - flag_descriptions::kSkiaRendererDescription, kOsLinux | kOsAndroid, + flag_descriptions::kSkiaRendererDescription, + kOsLinux | kOsWin | kOsAndroid, FEATURE_VALUE_TYPE(features::kUseSkiaRenderer)}, #if defined(OS_CHROMEOS) @@ -4057,6 +4052,13 @@ FEATURE_VALUE_TYPE(media::kGlobalMediaControls)}, #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) +#if BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN) + {"win-use-native-spellchecker", + flag_descriptions::kWinUseBrowserSpellCheckerName, + flag_descriptions::kWinUseBrowserSpellCheckerDescription, kOsWin, + FEATURE_VALUE_TYPE(spellcheck::kWinUseBrowserSpellChecker)}, +#endif // BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN) + // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc index 08c58be..472c45b4 100644 --- a/chrome/browser/android/autofill_assistant/client_android.cc +++ b/chrome/browser/android/autofill_assistant/client_android.cc
@@ -29,12 +29,12 @@ #include "components/autofill_assistant/browser/controller.h" #include "components/autofill_assistant/browser/features.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/version_info/channel.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "google_apis/google_api_keys.h" -#include "services/identity/public/cpp/identity_manager.h" #include "url/gurl.h" using base::android::AttachCurrentThread;
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android.cc b/chrome/browser/android/autofill_assistant/ui_controller_android.cc index 8e224ec..b246f963 100644 --- a/chrome/browser/android/autofill_assistant/ui_controller_android.cc +++ b/chrome/browser/android/autofill_assistant/ui_controller_android.cc
@@ -41,13 +41,13 @@ #include "components/autofill_assistant/browser/metrics.h" #include "components/autofill_assistant/browser/rectf.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/version_info/channel.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "google_apis/google_api_keys.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" using base::android::AttachCurrentThread;
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc index 27a51ac..b197dc0a 100644 --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc +++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -33,10 +33,10 @@ #include "components/bookmarks/managed/managed_bookmark_service.h" #include "components/prefs/pref_service.h" #include "components/query_parser/query_parser.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/undo/bookmark_undo_service.h" #include "components/undo/undo_manager.h" #include "content/public/browser/browser_thread.h" -#include "services/identity/public/cpp/identity_manager.h" using base::android::AttachCurrentThread; using base::android::ConvertUTF8ToJavaString;
diff --git a/chrome/browser/android/profiles/profile_downloader_android.cc b/chrome/browser/android/profiles/profile_downloader_android.cc index 18cad19..45b4d2c 100644 --- a/chrome/browser/android/profiles/profile_downloader_android.cc +++ b/chrome/browser/android/profiles/profile_downloader_android.cc
@@ -17,8 +17,8 @@ #include "chrome/browser/profiles/profile_downloader_delegate.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_manager.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/image/image_skia.h"
diff --git a/chrome/browser/android/signin/chrome_signin_manager_delegate.cc b/chrome/browser/android/signin/chrome_signin_manager_delegate.cc index ab165ca..d7789d52 100644 --- a/chrome/browser/android/signin/chrome_signin_manager_delegate.cc +++ b/chrome/browser/android/signin/chrome_signin_manager_delegate.cc
@@ -17,10 +17,10 @@ #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browsing_data_filter_builder.h" #include "content/public/browser/browsing_data_remover.h" #include "content/public/browser/storage_partition.h" -#include "services/identity/public/cpp/identity_manager.h" using base::android::JavaParamRef;
diff --git a/chrome/browser/android/signin/signin_investigator_android.cc b/chrome/browser/android/signin/signin_investigator_android.cc index f670a389..165d3a7 100644 --- a/chrome/browser/android/signin/signin_investigator_android.cc +++ b/chrome/browser/android/signin/signin_investigator_android.cc
@@ -12,7 +12,7 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/investigator_dependency_provider.h" #include "components/signin/core/browser/account_info.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" using base::android::ConvertJavaStringToUTF8; using base::android::JavaParamRef;
diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc index d573bd5f..2cd4076 100644 --- a/chrome/browser/android/signin/signin_manager_android.cc +++ b/chrome/browser/android/signin/signin_manager_android.cc
@@ -12,15 +12,14 @@ #include "base/feature_list.h" #include "chrome/android/chrome_jni_headers/SigninManager_jni.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/primary_account_mutator.h" using base::android::JavaParamRef; @@ -32,23 +31,34 @@ } } // namespace -SigninManagerAndroid::SigninManagerAndroid(JNIEnv* env, jobject obj) - : profile_(NULL) { - java_signin_manager_.Reset(env, obj); - profile_ = ProfileManager::GetActiveUserProfile(); +SigninManagerAndroid::SigninManagerAndroid( + Profile* profile, + identity::IdentityManager* identity_manager) + : profile_(profile), identity_manager_(identity_manager) { DCHECK(profile_); - IdentityManagerFactory::GetForProfile(profile_)->AddObserver(this); + DCHECK(identity_manager_); + identity_manager_->AddObserver(this); pref_change_registrar_.Init(profile_->GetPrefs()); pref_change_registrar_.Add( prefs::kSigninAllowed, base::Bind(&SigninManagerAndroid::OnSigninAllowedPrefChanged, base::Unretained(this))); + java_signin_manager_ = Java_SigninManager_create( + base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this)); +} + +base::android::ScopedJavaLocalRef<jobject> +SigninManagerAndroid::GetJavaObject() { + return base::android::ScopedJavaLocalRef<jobject>(java_signin_manager_); } SigninManagerAndroid::~SigninManagerAndroid() { - IdentityManagerFactory::GetForProfile(profile_)->RemoveObserver(this); - // TODO(crbug.com/963408) Call SigninManager.java Destroy once ownership is - // reversed. + Java_SigninManager_destroy(base::android::AttachCurrentThread(), + java_signin_manager_); +} + +void SigninManagerAndroid::Shutdown() { + identity_manager_->RemoveObserver(this); } void SigninManagerAndroid::OnSignInCompleted( @@ -59,16 +69,14 @@ // TODO(crbug.com/889902): Migrate to IdentityManager once there's an // API mapping for SigninManager::SignIn(). - IdentityManagerFactory::GetForProfile(profile_) - ->GetPrimaryAccountManager() - ->SignIn(base::android::ConvertJavaStringToUTF8(env, username)); + identity_manager_->GetPrimaryAccountManager()->SignIn( + base::android::ConvertJavaStringToUTF8(env, username)); } void SigninManagerAndroid::SignOut(JNIEnv* env, const JavaParamRef<jobject>& obj, jint signoutReason) { - auto* account_mutator = IdentityManagerFactory::GetForProfile(profile_) - ->GetPrimaryAccountMutator(); + auto* account_mutator = identity_manager_->GetPrimaryAccountMutator(); // GetPrimaryAccountMutator() returns nullptr on ChromeOS only. DCHECK(account_mutator); @@ -89,12 +97,10 @@ void SigninManagerAndroid::LogInSignedInUser(JNIEnv* env, const JavaParamRef<jobject>& obj) { - identity::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile_); // With the account consistency enabled let the account Reconcilor handles // everything. // TODO(https://crbug.com/930094): Determine the right long-term flow here. - identity_manager->LegacyReloadAccountsFromSystem(); + identity_manager_->LegacyReloadAccountsFromSystem(); } jboolean SigninManagerAndroid::IsSigninAllowedByPolicy( @@ -114,7 +120,7 @@ jboolean SigninManagerAndroid::IsSignedInOnNative( JNIEnv* env, const JavaParamRef<jobject>& obj) { - return IdentityManagerFactory::GetForProfile(profile_)->HasPrimaryAccount(); + return identity_manager_->HasPrimaryAccount(); } void SigninManagerAndroid::OnPrimaryAccountCleared( @@ -130,13 +136,6 @@ profile_->GetPrefs()->GetBoolean(prefs::kSigninAllowed)); } -static jlong JNI_SigninManager_Init(JNIEnv* env, - const JavaParamRef<jobject>& obj) { - SigninManagerAndroid* signin_manager_android = - new SigninManagerAndroid(env, obj); - return reinterpret_cast<intptr_t>(signin_manager_android); -} - base::android::ScopedJavaLocalRef<jstring> JNI_SigninManager_ExtractDomainName( JNIEnv* env, const JavaParamRef<jstring>& j_email) {
diff --git a/chrome/browser/android/signin/signin_manager_android.h b/chrome/browser/android/signin/signin_manager_android.h index bf6220f..7c30fc6 100644 --- a/chrome/browser/android/signin/signin_manager_android.h +++ b/chrome/browser/android/signin/signin_manager_android.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/threading/thread_checker.h" #include "components/prefs/pref_change_registrar.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class Profile; @@ -26,7 +26,14 @@ // is available before sign-in completes. class SigninManagerAndroid : public identity::IdentityManager::Observer { public: - SigninManagerAndroid(JNIEnv* env, jobject obj); + SigninManagerAndroid(Profile* profile, + identity::IdentityManager* identity_manager); + + ~SigninManagerAndroid() override; + + void Shutdown(); + + base::android::ScopedJavaLocalRef<jobject> GetJavaObject(); // Indicates that the user has made the choice to sign-in. |username| // contains the email address of the account to use as primary. @@ -60,12 +67,12 @@ const CoreAccountInfo& previous_primary_account_info) override; private: - ~SigninManagerAndroid() override; - void OnSigninAllowedPrefChanged(); Profile* profile_; + identity::IdentityManager* identity_manager_; + // Java-side SigninManager object. base::android::ScopedJavaGlobalRef<jobject> java_signin_manager_;
diff --git a/chrome/browser/apps/platform_apps/api/sync_file_system/sync_file_system_browsertest.cc b/chrome/browser/apps/platform_apps/api/sync_file_system/sync_file_system_browsertest.cc index c3bb4a6..a9c42fd 100644 --- a/chrome/browser/apps/platform_apps/api/sync_file_system/sync_file_system_browsertest.cc +++ b/chrome/browser/apps/platform_apps/api/sync_file_system/sync_file_system_browsertest.cc
@@ -18,10 +18,10 @@ #include "chrome/browser/sync_file_system/sync_file_system_service_factory.h" #include "components/drive/service/fake_drive_service.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "storage/browser/quota/quota_manager.h" #include "third_party/leveldatabase/leveldb_chrome.h"
diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc index 1997173..0f22ebd 100644 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
@@ -36,6 +36,7 @@ #include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/browser/omnibox_pedal_provider.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "components/unified_consent/url_keyed_data_collection_consent_helper.h" #include "content/public/browser/navigation_entry.h" @@ -45,7 +46,6 @@ #include "content/public/browser/web_contents.h" #include "extensions/buildflags/buildflags.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/identity_manager.h" #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/autocomplete/keyword_extensions_delegate_impl.h"
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc index f64ddef..0aa08ac 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -48,6 +48,8 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/signin_buildflags.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/browsing_data_filter_builder.h" @@ -71,8 +73,6 @@ #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/simple_url_loader.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc b/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc index 985ab47..cae54d9a 100644 --- a/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc +++ b/chrome/browser/browsing_data/counters/browsing_data_counter_utils.cc
@@ -15,8 +15,8 @@ #include "chrome/grit/generated_resources.h" #include "components/browsing_data/core/pref_names.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/text/bytes_formatting.h"
diff --git a/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc b/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc index 8b871a37..95f74785 100644 --- a/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc +++ b/chrome/browser/browsing_data/counters/browsing_data_counter_utils_browsertest.cc
@@ -23,7 +23,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/signin/identity_manager_factory.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #endif namespace browsing_data_counter_utils {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index bd82e897..4b9d58b 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -190,6 +190,7 @@ "//components/session_manager/core", "//components/signin/core/browser", "//components/signin/core/browser/webdata", + "//components/signin/public/identity_manager", "//components/storage_monitor", "//components/strings", "//components/sync", @@ -236,7 +237,7 @@ "//services/device/public/cpp/usb", "//services/device/public/mojom", "//services/device/public/mojom:usb", - "//services/identity/public/cpp", + "//services/identity/public/cpp:cpp_types", "//services/identity/public/mojom", "//services/metrics/public/cpp:ukm_builders", "//services/preferences/public/mojom", @@ -2817,6 +2818,7 @@ "//components/renderer_context_menu", "//components/resources", "//components/session_manager/core", + "//components/signin/public/identity_manager:test_support", "//components/sync", "//components/sync_preferences", "//components/user_prefs", @@ -2830,7 +2832,6 @@ "//mojo/public/cpp/system:system", "//services/data_decoder/public/cpp:test_support", "//services/device/public/cpp:test_support", - "//services/identity/public/cpp:test_support", "//services/service_manager/public/cpp/test:test_support", "//skia", "//storage/browser:test_support",
diff --git a/chrome/browser/chromeos/account_manager/account_manager_migrator.cc b/chrome/browser/chromeos/account_manager/account_manager_migrator.cc index c83bf021..8d9121ae 100644 --- a/chrome/browser/chromeos/account_manager/account_manager_migrator.cc +++ b/chrome/browser/chromeos/account_manager/account_manager_migrator.cc
@@ -38,10 +38,10 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/webdata/token_web_data.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user.h" #include "components/webdata/common/web_data_service_consumer.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" -#include "services/identity/public/cpp/identity_manager.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc b/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc index 665ed22..95571505 100644 --- a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc +++ b/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc
@@ -23,9 +23,9 @@ #include "components/arc/arc_prefs.h" #include "components/arc/arc_util.h" #include "components/consent_auditor/consent_auditor.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync_preferences/pref_service_syncable.h" #include "content/public/browser/browser_thread.h" -#include "services/identity/public/cpp/identity_manager.h" using sync_pb::UserConsentTypes;
diff --git a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc b/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc index 6cc764a..f33a475 100644 --- a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc +++ b/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc
@@ -27,10 +27,10 @@ #include "components/arc/session/arc_session_runner.h" #include "components/arc/test/fake_arc_session.h" #include "components/consent_auditor/fake_consent_auditor.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc b/chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc index 9dc5eb2..ee70227 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc +++ b/chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc
@@ -44,6 +44,7 @@ #include "components/policy/core/common/policy_switches.h" #include "components/prefs/pref_member.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_manager.h" #include "content/public/browser/browser_thread.h" @@ -52,7 +53,6 @@ #include "net/base/upload_bytes_element_reader.h" #include "net/base/upload_data_stream.h" #include "net/url_request/url_request_test_job.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/chrome/browser/chromeos/arc/arc_support_host.cc b/chrome/browser/chromeos/arc/arc_support_host.cc index 909cbc2a..22dbaf2d 100644 --- a/chrome/browser/chromeos/arc/arc_support_host.cc +++ b/chrome/browser/chromeos/arc/arc_support_host.cc
@@ -29,10 +29,10 @@ #include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" #include "components/consent_auditor/consent_auditor.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/known_user.h" #include "components/user_manager/user_manager.h" #include "extensions/browser/extension_registry.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h" #include "ui/chromeos/devicetype_utils.h"
diff --git a/chrome/browser/chromeos/arc/arc_support_host_unittest.cc b/chrome/browser/chromeos/arc/arc_support_host_unittest.cc index 2f14ac6..751b89eb 100644 --- a/chrome/browser/chromeos/arc/arc_support_host_unittest.cc +++ b/chrome/browser/chromeos/arc/arc_support_host_unittest.cc
@@ -15,10 +15,10 @@ #include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/testing_profile.h" #include "components/consent_auditor/fake_consent_auditor.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_context.cc b/chrome/browser/chromeos/arc/auth/arc_auth_context.cc index edd6436..e2d09d64 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_context.cc +++ b/chrome/browser/chromeos/arc/auth/arc_auth_context.cc
@@ -15,9 +15,9 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "components/signin/core/browser/ubertoken_fetcher.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" #include "content/public/common/url_constants.h" #include "google_apis/gaia/gaia_auth_fetcher.h" -#include "services/identity/public/cpp/access_token_fetcher.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace arc {
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_context.h b/chrome/browser/chromeos/arc/auth/arc_auth_context.h index 5ab03c9..0279e628 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_context.h +++ b/chrome/browser/chromeos/arc/auth/arc_auth_context.h
@@ -11,8 +11,8 @@ #include "base/callback.h" #include "base/macros.h" #include "base/timer/timer.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "net/base/backoff_entry.h" -#include "services/identity/public/cpp/identity_manager.h" class Profile;
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service.h b/chrome/browser/chromeos/arc/auth/arc_auth_service.h index 53ac0ea..a845e57 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_service.h +++ b/chrome/browser/chromeos/arc/auth/arc_auth_service.h
@@ -19,7 +19,7 @@ #include "components/arc/common/auth.mojom.h" #include "components/arc/session/connection_observer.h" #include "components/keyed_service/core/keyed_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class Profile;
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc index 1ca760a5..1973c94e 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc +++ b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
@@ -57,12 +57,12 @@ #include "components/policy/core/common/policy_switches.h" #include "components/prefs/pref_member.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" #include "content/public/browser/browser_task_traits.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc b/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc index 3d721bd..0655921a 100644 --- a/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc +++ b/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc
@@ -13,6 +13,8 @@ #include "base/values.h" #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" #include "components/account_id/account_id.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "components/user_manager/known_user.h" #include "content/public/browser/browser_context.h" #include "content/public/common/url_constants.h" @@ -21,8 +23,6 @@ #include "net/base/load_flags.h" #include "net/http/http_status_code.h" #include "net/url_request/url_request_context_getter.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/access_token_info.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/chrome/browser/chromeos/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc b/chrome/browser/chromeos/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc index f2eb3603..c464cee 100644 --- a/chrome/browser/chromeos/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc +++ b/chrome/browser/chromeos/arc/optin/arc_terms_of_service_default_negotiator_unittest.cc
@@ -27,11 +27,11 @@ #include "components/consent_auditor/fake_consent_auditor.h" #include "components/prefs/pref_service.h" #include "components/prefs/testing_pref_store.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/chromeos/arc/policy/arc_android_management_checker.h b/chrome/browser/chromeos/arc/policy/arc_android_management_checker.h index 61dd2eb..812a865 100644 --- a/chrome/browser/chromeos/arc/policy/arc_android_management_checker.h +++ b/chrome/browser/chromeos/arc/policy/arc_android_management_checker.h
@@ -12,7 +12,7 @@ #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "chrome/browser/chromeos/policy/android_management_client.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class Profile;
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc index e2ea348e..c3885c2 100644 --- a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
@@ -37,10 +37,10 @@ #include "components/drive/drive_pref_names.h" #include "components/drive/file_change.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "extensions/common/extension.h" #include "extensions/common/install_warning.h" #include "google_apis/drive/test_util.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "storage/browser/fileapi/external_mount_points.h" using ::testing::_;
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc index 5df83ae..12ce010 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
@@ -45,13 +45,13 @@ #include "chromeos/network/network_state_handler.h" #include "components/drive/chromeos/search_metadata.h" #include "components/drive/event_logger.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" #include "google_apis/drive/auth_service.h" #include "google_apis/drive/drive_api_url_generator.h" #include "mojo/public/cpp/bindings/callback_helpers.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/network_connection_tracker.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "storage/common/fileapi/file_system_info.h"
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc index 1473d3e..93b1643 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -62,6 +62,7 @@ #include "components/drive/drive_pref_names.h" #include "components/drive/event_logger.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user_manager.h" #include "components/zoom/page_zoom.h" #include "content/public/browser/system_connector.h" @@ -72,7 +73,6 @@ #include "extensions/browser/app_window/app_window_registry.h" #include "google_apis/drive/auth_service.h" #include "net/base/hex_utils.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "storage/common/fileapi/file_system_types.h" #include "storage/common/fileapi/file_system_util.h"
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc index 29e981f..f74b92c 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -14,10 +14,10 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chromeos/constants/chromeos_switches.h" #include "components/session_manager/core/session_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_manager_base.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" namespace file_manager {
diff --git a/chrome/browser/chromeos/first_run/first_run.cc b/chrome/browser/chromeos/first_run/first_run.cc index 8c880f20..9b1648f 100644 --- a/chrome/browser/chromeos/first_run/first_run.cc +++ b/chrome/browser/chromeos/first_run/first_run.cc
@@ -31,6 +31,7 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/user_manager/user_manager.h" #include "content/public/browser/notification_observer.h" @@ -39,7 +40,6 @@ #include "content/public/common/content_switches.h" #include "extensions/browser/extension_system.h" #include "extensions/common/constants.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/gfx/geometry/rect.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc index 4028813..dd7fc613 100644 --- a/chrome/browser/chromeos/login/kiosk_browsertest.cc +++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc
@@ -71,6 +71,7 @@ #include "chromeos/tpm/stub_install_attributes.h" #include "components/crx_file/crx_verifier.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" @@ -97,7 +98,6 @@ #include "services/audio/public/cpp/fake_system_info.h" #include "services/audio/public/cpp/sounds/audio_stream_handler.h" #include "services/audio/public/cpp/sounds/sounds_manager.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/service_manager/public/cpp/connector.h" #include "ui/aura/window.h" #include "ui/base/accelerators/accelerator.h"
diff --git a/chrome/browser/chromeos/login/screens/reset_screen.cc b/chrome/browser/chromeos/login/screens/reset_screen.cc index 753ba65..3f60cd48 100644 --- a/chrome/browser/chromeos/login/screens/reset_screen.cc +++ b/chrome/browser/chromeos/login/screens/reset_screen.cc
@@ -10,10 +10,13 @@ #include "base/task/post_task.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h" #include "chrome/browser/chromeos/login/screens/error_screen.h" #include "chrome/browser/chromeos/login/screens/network_error.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" +#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/reset/metrics.h" +#include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/tpm_firmware_update.h" #include "chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h" #include "chrome/common/pref_names.h" @@ -79,6 +82,23 @@ SessionManagerClient::Get()->StartTPMFirmwareUpdate(mode_string); } +// Checks if powerwash is allowed based on update modes and passes the result +// to |callback|. +void OnUpdateModesAvailable( + base::OnceCallback<void(bool, base::Optional<tpm_firmware_update::Mode>)> + callback, + const std::set<tpm_firmware_update::Mode>& modes) { + using tpm_firmware_update::Mode; + for (Mode mode : {Mode::kPowerwash, Mode::kCleanup}) { + if (modes.count(mode) == 0) + continue; + + std::move(callback).Run(true, mode); + return; + } + std::move(callback).Run(false, base::nullopt); +} + } // namespace // static @@ -87,6 +107,41 @@ g_tpm_firmware_update_checker = checker; } +// static +void ResetScreen::CheckIfPowerwashAllowed( + base::OnceCallback<void(bool, base::Optional<tpm_firmware_update::Mode>)> + callback) { + if (g_browser_process->platform_part() + ->browser_policy_connector_chromeos() + ->IsEnterpriseManaged()) { + // Admin can explicitly allow to powerwash. If the policy is not loaded yet, + // we consider by default that the device is not allowed to powerwash. + bool is_powerwash_allowed = false; + CrosSettings::Get()->GetBoolean(kDevicePowerwashAllowed, + &is_powerwash_allowed); + if (is_powerwash_allowed) { + std::move(callback).Run(true, base::nullopt); + return; + } + + // Check if powerwash is only allowed by the admin specifically for the + // purpose of installing a TPM firmware update. + tpm_firmware_update::GetAvailableUpdateModes( + base::Bind(&OnUpdateModesAvailable, base::Passed(&callback)), + base::TimeDelta()); + return; + } + + // Devices that are still in OOBE may be subject to forced re-enrollment (FRE) + // and thus pending for enterprise management. These should not be allowed to + // powerwash either. Note that taking consumer device ownership has the side + // effect of dropping the FRE requirement if it was previously in effect. + std::move(callback).Run( + AutoEnrollmentController::GetFRERequirement() != + AutoEnrollmentController::FRERequirement::kExplicitlyRequired, + base::nullopt); +} + ResetScreen::ResetScreen(ResetView* view, ErrorScreen* error_screen, const base::RepeatingClosure& exit_callback)
diff --git a/chrome/browser/chromeos/login/screens/reset_screen.h b/chrome/browser/chromeos/login/screens/reset_screen.h index b662b1bb..77595c6 100644 --- a/chrome/browser/chromeos/login/screens/reset_screen.h +++ b/chrome/browser/chromeos/login/screens/reset_screen.h
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" +#include "base/optional.h" #include "chrome/browser/chromeos/login/help_app_launcher.h" #include "chrome/browser/chromeos/login/screens/base_screen.h" #include "chrome/browser/chromeos/tpm_firmware_update.h" @@ -52,6 +53,13 @@ static void SetTpmFirmwareUpdateCheckerForTesting( TpmFirmwareUpdateAvailabilityChecker* checker); + // Checks if powerwash is allowed and passes the result to |callback|. In case + // TPM firmware update has to be installed, the mode of update will be passed + // as second parameter to |callback|. + static void CheckIfPowerwashAllowed( + base::OnceCallback<void(bool, base::Optional<tpm_firmware_update::Mode>)> + callback); + private: // BaseScreen implementation: void Show() override;
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc index bcd5db3..908897c9 100644 --- a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc +++ b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
@@ -17,9 +17,9 @@ #include "chrome/common/webui_url_constants.h" #include "components/consent_auditor/consent_auditor.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "components/user_manager/user_manager.h" -#include "services/identity/public/cpp/identity_manager.h" namespace chromeos { namespace {
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager.cc b/chrome/browser/chromeos/login/session/chrome_session_manager.cc index 5388b124..ac52f85e 100644 --- a/chrome/browser/chromeos/login/session/chrome_session_manager.cc +++ b/chrome/browser/chromeos/login/session/chrome_session_manager.cc
@@ -47,6 +47,8 @@ #include "chromeos/dbus/session_manager/session_manager_client.h" #include "components/account_id/account_id.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" #include "components/user_manager/user_type.h" @@ -54,8 +56,6 @@ #include "content/public/browser/notification_service.h" #include "content/public/common/content_switches.h" #include "content/public/common/service_manager_connection.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "services/service_manager/public/cpp/connector.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index 8d2ec69..c2e49e2 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -121,6 +121,7 @@ #include "chromeos/dbus/cryptohome/tpm_util.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/session_manager/session_manager_client.h" +#include "chromeos/login/auth/challenge_response/known_user_pref_utils.h" #include "chromeos/login/auth/stub_authenticator_builder.h" #include "chromeos/login/session/session_termination_manager.h" #include "chromeos/network/network_cert_loader.h" @@ -141,6 +142,9 @@ #include "components/quirks/quirks_manager.h" #include "components/session_manager/core/session_manager.h" #include "components/signin/core/browser/signin_error_controller.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/user_manager/known_user.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" @@ -155,9 +159,6 @@ #include "content/public/common/page_zoom.h" #include "extensions/common/features/feature_session_type.h" #include "rlz/buildflags/buildflags.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "third_party/cros_system_api/switches/chrome_switches.h" #include "ui/base/ime/chromeos/input_method_descriptor.h" #include "ui/base/ime/chromeos/input_method_manager.h" @@ -408,6 +409,16 @@ user_context.GetAuthFlow() == UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML; } +// Stores the information about the challenge-response keys, that were used for +// authentication, persistently in the known_user database for future +// authentication attempts. +void PersistChallengeResponseKeys(const UserContext& user_context) { + user_manager::known_user::SetChallengeResponseKeys( + user_context.GetAccountId(), + SerializeChallengeResponseKeysForKnownUser( + user_context.GetChallengeResponseKeys())); +} + } // namespace UserSessionManagerDelegate::~UserSessionManagerDelegate() {} @@ -1601,6 +1612,9 @@ login::SaveSyncPasswordDataToProfile(user_context_, profile); } + if (!user_context_.GetChallengeResponseKeys().empty()) + PersistChallengeResponseKeys(user_context_); + VLOG(1) << "Clearing all secrets"; user_context_.ClearSecrets(); if (TokenHandlesEnabled()) {
diff --git a/chrome/browser/chromeos/login/signin/auth_sync_observer.cc b/chrome/browser/chromeos/login/signin/auth_sync_observer.cc index db52107..9eaa5c8 100644 --- a/chrome/browser/chromeos/login/signin/auth_sync_observer.cc +++ b/chrome/browser/chromeos/login/signin/auth_sync_observer.cc
@@ -14,10 +14,10 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/signin_error_controller_factory.h" #include "chrome/browser/sync/profile_sync_service_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_type.h" -#include "services/identity/public/cpp/identity_manager.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc index cc8a29a..a26c1fe 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc +++ b/chrome/browser/chromeos/login/signin/oauth2_browsertest.cc
@@ -48,6 +48,8 @@ #include "chromeos/login/auth/user_context.h" #include "components/account_id/account_id.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" @@ -66,8 +68,6 @@ #include "net/test/embedded_test_server/http_response.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" using net::test_server::BasicHttpResponse; using net::test_server::HttpRequest;
diff --git a/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc b/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc index c7629fa..5a26f6c 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc +++ b/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc
@@ -18,11 +18,11 @@ #include "chromeos/components/account_manager/account_manager_factory.h" #include "chromeos/constants/chromeos_switches.h" #include "components/account_id/account_id.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user_manager.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/login/signin/oauth2_login_manager.h b/chrome/browser/chromeos/login/signin/oauth2_login_manager.h index 3e6bb37f..2d912cf18 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_login_manager.h +++ b/chrome/browser/chromeos/login/signin/oauth2_login_manager.h
@@ -14,7 +14,7 @@ #include "base/time/time.h" #include "chrome/browser/chromeos/login/signin/oauth2_login_verifier.h" #include "components/keyed_service/core/keyed_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class GoogleServiceAuthError; class Profile;
diff --git a/chrome/browser/chromeos/login/signin/oauth2_login_verifier.cc b/chrome/browser/chromeos/login/signin/oauth2_login_verifier.cc index 7c60cae..70ec248f 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_login_verifier.cc +++ b/chrome/browser/chromeos/login/signin/oauth2_login_verifier.cc
@@ -7,8 +7,8 @@ #include <vector> #include "base/logging.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" #include "content/public/browser/browser_thread.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" using content::BrowserThread;
diff --git a/chrome/browser/chromeos/login/signin/oauth2_login_verifier.h b/chrome/browser/chromeos/login/signin/oauth2_login_verifier.h index e6efb27..951dbbb6 100644 --- a/chrome/browser/chromeos/login/signin/oauth2_login_verifier.h +++ b/chrome/browser/chromeos/login/signin/oauth2_login_verifier.h
@@ -13,7 +13,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/profiles/profile.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/login/signin/token_handle_fetcher.cc b/chrome/browser/chromeos/login/signin/token_handle_fetcher.cc index e8d00b6..49a9505 100644 --- a/chrome/browser/chromeos/login/signin/token_handle_fetcher.cc +++ b/chrome/browser/chromeos/login/signin/token_handle_fetcher.cc
@@ -12,9 +12,9 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "google_apis/gaia/gaia_constants.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/identity/public/cpp/scope_set.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/chrome/browser/chromeos/login/signin/token_handle_fetcher.h b/chrome/browser/chromeos/login/signin/token_handle_fetcher.h index 5fce7af..7daf142 100644 --- a/chrome/browser/chromeos/login/signin/token_handle_fetcher.h +++ b/chrome/browser/chromeos/login/signin/token_handle_fetcher.h
@@ -13,8 +13,8 @@ #include "base/time/time.h" #include "components/account_id/account_id.h" #include "components/keyed_service/core/keyed_service_shutdown_notifier.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "google_apis/gaia/gaia_oauth_client.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" namespace identity { class IdentityManager;
diff --git a/chrome/browser/chromeos/login/test/enrollment_ui_mixin.cc b/chrome/browser/chromeos/login/test/enrollment_ui_mixin.cc index 70cce19..3ea80fd 100644 --- a/chrome/browser/chromeos/login/test/enrollment_ui_mixin.cc +++ b/chrome/browser/chromeos/login/test/enrollment_ui_mixin.cc
@@ -120,7 +120,7 @@ const std::string& location) { OobeJS().TypeIntoPath(asset_id, {kEnrollmentUI, "oauth-enroll-asset-id"}); OobeJS().TypeIntoPath(location, {kEnrollmentUI, "oauth-enroll-location"}); - OobeJS().TapOnPath({kEnrollmentUI, "enroll-attributes-submit-button"}); + OobeJS().TapOnPath({kEnrollmentUI, "attributes-submit"}); } void EnrollmentUIMixin::SetExitHandler() {
diff --git a/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc b/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc index 8632e8b..2ead40d 100644 --- a/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc +++ b/chrome/browser/chromeos/login/users/avatar/user_image_manager_browsertest.cc
@@ -61,6 +61,7 @@ #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user.h" #include "components/user_manager/user_image/user_image.h" @@ -72,7 +73,6 @@ #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/layout.h"
diff --git a/chrome/browser/chromeos/policy/android_management_client.cc b/chrome/browser/chromeos/policy/android_management_client.cc index 8586a7e0..6e26fac 100644 --- a/chrome/browser/chromeos/policy/android_management_client.cc +++ b/chrome/browser/chromeos/policy/android_management_client.cc
@@ -14,11 +14,11 @@ #include "components/policy/core/common/cloud/dm_auth.h" #include "components/policy/core/common/cloud/dmserver_job_configurations.h" #include "components/policy/proto/device_management_backend.pb.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/access_token_info.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace em = enterprise_management;
diff --git a/chrome/browser/chromeos/policy/android_management_client_unittest.cc b/chrome/browser/chromeos/policy/android_management_client_unittest.cc index d108cf3d..997b293 100644 --- a/chrome/browser/chromeos/policy/android_management_client_unittest.cc +++ b/chrome/browser/chromeos/policy/android_management_client_unittest.cc
@@ -16,8 +16,8 @@ #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/policy/core/common/cloud/mock_device_management_service.h" #include "components/policy/proto/device_management_backend.pb.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc index 81d4125..8556059e 100644 --- a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc +++ b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
@@ -115,6 +115,7 @@ #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_service.h" #include "components/session_manager/core/session_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_type.h" @@ -145,7 +146,6 @@ #include "net/test/embedded_test_server/http_response.h" #include "net/url_request/url_fetcher_delegate.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_manager.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/icu/source/common/unicode/locid.h" #include "ui/base/ime/chromeos/extension_ime_util.h"
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc index a76b625..bb57345e 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc
@@ -52,6 +52,7 @@ #include "components/policy/proto/device_management_backend.pb.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/test_browser_thread_bundle.h" @@ -63,7 +64,6 @@ #include "net/url_request/url_fetcher_delegate.h" #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc index 005ea34b1..ff11ad9 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc
@@ -15,9 +15,9 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" #include "components/policy/core/common/cloud/cloud_policy_core.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "content/public/browser/notification_source.h" #include "google_apis/gaia/gaia_constants.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" namespace policy {
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.h b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.h index cc0936e..055e290 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.h +++ b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.h
@@ -13,9 +13,9 @@ #include "base/optional.h" #include "components/keyed_service/core/keyed_service.h" #include "components/policy/core/common/cloud/cloud_policy_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/backoff_entry.h" -#include "services/identity/public/cpp/identity_manager.h" namespace base { class Clock;
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.cc b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.cc index eb1bb40b..300e413 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.cc
@@ -9,7 +9,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace policy {
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_unittest.cc b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_unittest.cc index 225f62c5..cb34eca 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_unittest.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_unittest.cc
@@ -32,6 +32,8 @@ #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" #include "components/policy/core/common/cloud/mock_cloud_policy_service.h" #include "components/policy/core/common/cloud/mock_cloud_policy_store.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_manager.h" @@ -40,8 +42,6 @@ #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/backoff_entry.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/content_settings/local_shared_objects_container.cc b/chrome/browser/content_settings/local_shared_objects_container.cc index a885917..681c6396 100644 --- a/chrome/browser/content_settings/local_shared_objects_container.cc +++ b/chrome/browser/content_settings/local_shared_objects_container.cc
@@ -26,6 +26,7 @@ #include "content/public/common/url_constants.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/cookies/canonical_cookie.h" +#include "net/cookies/cookie_util.h" #include "url/gurl.h" namespace { @@ -173,6 +174,54 @@ return count; } +size_t LocalSharedObjectsContainer::GetDomainCount() const { + std::set<base::StringPiece> hosts; + + for (const auto& it : cookies()->origin_cookie_set_map()) { + for (const auto& cookie : *it.second) { + hosts.insert(cookie.Domain()); + } + } + + for (const auto& origin : local_storages()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& origin : session_storages()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& origin : indexed_dbs()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& origin : service_workers()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& info : shared_workers()->GetSharedWorkerInfo()) + hosts.insert(info.constructor_origin.host()); + + for (const auto& origin : cache_storages()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& origin : file_systems()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& origin : databases()->GetOrigins()) + hosts.insert(origin.host()); + + for (const auto& origin : appcaches()->GetOrigins()) + hosts.insert(origin.host()); + + std::set<std::string> domains; + for (const base::StringPiece& host : hosts) { + std::string domain = net::registry_controlled_domains::GetDomainAndRegistry( + host, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); + if (!domain.empty()) + domains.insert(std::move(domain)); + else + domains.insert(host.as_string()); + } + return domains.size(); +} + void LocalSharedObjectsContainer::Reset() { appcaches_->Reset(); cookies_->Reset();
diff --git a/chrome/browser/content_settings/local_shared_objects_container.h b/chrome/browser/content_settings/local_shared_objects_container.h index 24d5efe..4c7f957 100644 --- a/chrome/browser/content_settings/local_shared_objects_container.h +++ b/chrome/browser/content_settings/local_shared_objects_container.h
@@ -36,6 +36,9 @@ // Returns the number of objects for the given |origin|. size_t GetObjectCountForDomain(const GURL& origin) const; + // Get number of unique registrable domains in the container. + size_t GetDomainCount() const; + // Empties the container. void Reset();
diff --git a/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc b/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc index 7bb7495..d05dda3 100644 --- a/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc +++ b/chrome/browser/content_settings/tab_specific_content_settings_unittest.cc
@@ -271,3 +271,69 @@ content_settings->OnWebDatabaseAccessed(GURL("http://google.com"), blocked_by_policy); } + +TEST_F(TabSpecificContentSettingsTest, LocalSharedObjectsContainer) { + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(web_contents()); + bool blocked_by_policy = false; + auto cookie = + net::CanonicalCookie::Create(GURL("http://google.com"), "k=v", + base::Time::Now(), net::CookieOptions()); + content_settings->OnCookiesRead(GURL("http://google.com"), + GURL("http://google.com"), {*cookie}, + blocked_by_policy); + content_settings->OnFileSystemAccessed(GURL("https://www.google.com"), + blocked_by_policy); + content_settings->OnIndexedDBAccessed(GURL("https://localhost"), + blocked_by_policy); + content_settings->OnLocalStorageAccessed(GURL("http://maps.google.com:8080"), + true, blocked_by_policy); + content_settings->OnWebDatabaseAccessed(GURL("http://192.168.0.1"), + blocked_by_policy); + content_settings->OnSharedWorkerAccessed( + GURL("http://youtube.com/worker.js"), "worker", + url::Origin::Create(GURL("https://youtube.com")), blocked_by_policy); + + const auto& objects = content_settings->allowed_local_shared_objects(); + EXPECT_EQ(6u, objects.GetObjectCount()); + EXPECT_EQ(3u, objects.GetObjectCountForDomain(GURL("http://google.com"))); + EXPECT_EQ(1u, objects.GetObjectCountForDomain(GURL("http://youtube.com"))); + EXPECT_EQ(1u, objects.GetObjectCountForDomain(GURL("http://localhost"))); + EXPECT_EQ(1u, objects.GetObjectCountForDomain(GURL("http://192.168.0.1"))); + // google.com, youtube.com, localhost and 192.168.0.1 should be counted as + // domains. + EXPECT_EQ(4u, objects.GetDomainCount()); +} + +TEST_F(TabSpecificContentSettingsTest, LocalSharedObjectsContainerCookie) { + TabSpecificContentSettings* content_settings = + TabSpecificContentSettings::FromWebContents(web_contents()); + bool blocked_by_policy = false; + auto cookie1 = + net::CanonicalCookie::Create(GURL("http://google.com"), "k1=v", + base::Time::Now(), net::CookieOptions()); + auto cookie2 = net::CanonicalCookie::Create( + GURL("http://www.google.com"), "k2=v; Domain=google.com", + base::Time::Now(), net::CookieOptions()); + auto cookie3 = net::CanonicalCookie::Create( + GURL("http://www.google.com"), "k3=v; Domain=.google.com", + base::Time::Now(), net::CookieOptions()); + auto cookie4 = net::CanonicalCookie::Create( + GURL("http://www.google.com"), "k4=v; Domain=.www.google.com", + base::Time::Now(), net::CookieOptions()); + content_settings->OnCookiesRead( + GURL("http://www.google.com"), GURL("http://www.google.com"), + {*cookie1, *cookie2, *cookie3, *cookie4}, blocked_by_policy); + + auto cookie5 = + net::CanonicalCookie::Create(GURL("https://www.google.com"), "k5=v", + base::Time::Now(), net::CookieOptions()); + content_settings->OnCookiesRead(GURL("https://www.google.com"), + GURL("https://www.google.com"), {*cookie5}, + blocked_by_policy); + + const auto& objects = content_settings->allowed_local_shared_objects(); + EXPECT_EQ(5u, objects.GetObjectCount()); + EXPECT_EQ(5u, objects.GetObjectCountForDomain(GURL("http://google.com"))); + EXPECT_EQ(1u, objects.GetDomainCount()); +}
diff --git a/chrome/browser/download/notification/download_notification_browsertest.cc b/chrome/browser/download/notification/download_notification_browsertest.cc index 51b7955..49508d0 100644 --- a/chrome/browser/download/notification/download_notification_browsertest.cc +++ b/chrome/browser/download/notification/download_notification_browsertest.cc
@@ -35,6 +35,8 @@ #include "components/download/public/common/download_item.h" #include "components/prefs/pref_service.h" #include "components/session_manager/core/session_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -47,8 +49,6 @@ #include "net/http/http_util.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/url_request/url_request_slow_download_job.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/features.h" #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h"
diff --git a/chrome/browser/enterprise_reporting/profile_report_generator.cc b/chrome/browser/enterprise_reporting/profile_report_generator.cc index 5c1e14b5..a2ed1f1a1 100644 --- a/chrome/browser/enterprise_reporting/profile_report_generator.cc +++ b/chrome/browser/enterprise_reporting/profile_report_generator.cc
@@ -10,7 +10,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/signin/core/browser/account_info.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace enterprise_reporting {
diff --git a/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc b/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc index ecd5c4d..c5c79cc 100644 --- a/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc +++ b/chrome/browser/enterprise_reporting/profile_report_generator_unittest.cc
@@ -12,8 +12,8 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" #include "components/account_id/account_id.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace enterprise_reporting {
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 16c40758..4c75fe17 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -832,6 +832,7 @@ "//components/services/unzip/public/cpp", "//components/sessions", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/spellcheck/browser", "//components/storage_monitor", "//components/strings", @@ -869,7 +870,7 @@ "//services/audio/public/cpp", "//services/data_decoder/public/cpp", "//services/device/public/mojom", - "//services/identity/public/cpp", + "//services/identity/public/cpp:cpp_types", "//services/identity/public/mojom", "//services/network/public/mojom", "//services/service_manager/public/cpp",
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc index e8fe204..cd22764 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
@@ -27,6 +27,7 @@ #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "components/browsing_data/core/pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/browsing_data_filter_builder.h" @@ -34,7 +35,6 @@ #include "extensions/common/error_utils.h" #include "extensions/common/extension.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" -#include "services/identity/public/cpp/identity_manager.h" using content::BrowserThread; using browsing_data::ClearBrowsingDataTab;
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc index 5868403..5c4b7b7 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -21,6 +21,8 @@ #include "chrome/test/base/in_process_browser_test.h" #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/signin_buildflags.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" #include "content/public/browser/storage_partition.h" @@ -28,8 +30,6 @@ #include "google_apis/gaia/google_service_auth_error.h" #include "mojo/public/cpp/bindings/callback_helpers.h" #include "net/cookies/canonical_cookie.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "url/gurl.h" using extension_function_test_utils::RunFunctionAndReturnSingleResult;
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc index 3a1ab10..e253961 100644 --- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc +++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc
@@ -33,9 +33,9 @@ #include "components/account_id/account_id.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/user_manager/scoped_user_manager.h" #include "extensions/common/extension_builder.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/service_constants.h"
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc b/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc index 4ea68809..21c09c0f 100644 --- a/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc +++ b/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc
@@ -34,10 +34,10 @@ #include "components/account_id/account_id.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/user_manager/scoped_user_manager.h" #include "extensions/common/extension_builder.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/service_constants.h"
diff --git a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc index 5c76287..1b8de639 100644 --- a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc +++ b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc
@@ -18,9 +18,9 @@ #include "chrome/browser/ui/simple_message_box.h" #include "chrome/grit/generated_resources.h" #include "components/feedback/system_logs/system_logs_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/browser_context.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h"
diff --git a/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc b/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc index 8e1bb05..d55fa8f 100644 --- a/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc +++ b/chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc
@@ -15,9 +15,9 @@ #include "chrome/browser/signin/chrome_device_id_helper.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/signin/core/browser/ubertoken_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_urls.h" #include "net/base/escape.h" -#include "services/identity/public/cpp/identity_manager.h" namespace extensions {
diff --git a/chrome/browser/extensions/api/identity/identity_api.h b/chrome/browser/extensions/api/identity/identity_api.h index 057a33f3..23bc6ed 100644 --- a/chrome/browser/extensions/api/identity/identity_api.h +++ b/chrome/browser/extensions/api/identity/identity_api.h
@@ -30,9 +30,9 @@ #include "chrome/browser/extensions/api/identity/web_auth_flow.h" #include "chrome/browser/extensions/chrome_extension_function.h" #include "components/signin/core/browser/signin_buildflags.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "extensions/browser/browser_context_keyed_api_factory.h" #include "extensions/browser/event_router.h" -#include "services/identity/public/cpp/identity_manager.h" namespace content { class BrowserContext;
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc index 7e81559..4c5a733 100644 --- a/chrome/browser/extensions/api/identity/identity_apitest.cc +++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -49,15 +49,15 @@ #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/list_accounts_test_utils.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_source.h" #include "content/public/test/test_utils.h" #include "extensions/browser/api_test_utils.h" #include "extensions/common/extension_builder.h" #include "net/test/embedded_test_server/embedded_test_server.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/extensions/api/identity/identity_get_accounts_function.cc b/chrome/browser/extensions/api/identity/identity_get_accounts_function.cc index e125be0e..bc522cc 100644 --- a/chrome/browser/extensions/api/identity/identity_get_accounts_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_accounts_function.cc
@@ -14,8 +14,8 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/extensions/api/identity.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_context.h" -#include "services/identity/public/cpp/identity_manager.h" namespace extensions {
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h index 45365e5..eea95fe 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h
@@ -15,11 +15,11 @@ #include "chrome/browser/extensions/api/identity/gaia_web_auth_flow.h" #include "chrome/browser/extensions/api/identity/identity_mint_queue.h" #include "chrome/browser/extensions/chrome_extension_function.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "extensions/browser/extension_function_histogram_value.h" #include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/oauth2_access_token_manager.h" #include "google_apis/gaia/oauth2_mint_token_flow.h" -#include "services/identity/public/cpp/identity_manager.h" namespace identity { class AccessTokenFetcher;
diff --git a/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc b/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc index f452bc2..6b844d55 100644 --- a/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc
@@ -9,10 +9,10 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/extensions/api/identity.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/common/extension.h" #include "extensions/common/permissions/permissions_data.h" -#include "services/identity/public/cpp/identity_manager.h" namespace extensions {
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc index d793222b..5516d337 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.cc
@@ -15,9 +15,9 @@ #include "chrome/common/extensions/api/safe_browsing_private.h" #include "components/policy/core/common/cloud/cloud_policy_client.h" #include "components/policy/core/common/cloud/device_management_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/event_router.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "url/gurl.h"
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc index cba75303..17081c0 100644 --- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc +++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc
@@ -13,9 +13,9 @@ #include "chrome/test/base/testing_profile.h" #include "components/prefs/pref_service.h" #include "components/prefs/testing_pref_store.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_browser_thread_bundle.h" #include "extensions/browser/event_router.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc index fa23cd2..ce5a5c0 100644 --- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
@@ -32,6 +32,7 @@ #include "chrome/common/pref_names.h" #include "components/crx_file/id_util.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/gpu_feature_checker.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" @@ -41,7 +42,6 @@ #include "extensions/common/extension.h" #include "net/base/load_flags.h" #include "net/url_request/url_request.h" -#include "services/identity/public/cpp/identity_manager.h" #include "url/gurl.h" #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc index 35a7e666..1d44065 100644 --- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc +++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc
@@ -13,13 +13,13 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/crx_file/crx_verifier.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/update_client/update_query_params.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/system_connector.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/updater/extension_downloader.h" #include "extensions/common/verifier_formats.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" using extensions::ExtensionDownloader;
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc index d836eb5..4cf9511 100644 --- a/chrome/browser/extensions/updater/extension_updater_unittest.cc +++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc
@@ -44,6 +44,7 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "components/crx_file/id_util.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/update_client/update_query_params.h" #include "content/public/browser/notification_details.h" @@ -73,7 +74,6 @@ #include "net/base/load_flags.h" #include "net/http/http_request_headers.h" #include "services/data_decoder/public/cpp/test_data_decoder_service.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/feedback/feedback_uploader_chrome.cc b/chrome/browser/feedback/feedback_uploader_chrome.cc index f0f4f14..61507172 100644 --- a/chrome/browser/feedback/feedback_uploader_chrome.cc +++ b/chrome/browser/feedback/feedback_uploader_chrome.cc
@@ -8,9 +8,9 @@ #include "base/strings/stringprintf.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "net/url_request/url_fetcher.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace feedback {
diff --git a/chrome/browser/feedback/feedback_uploader_chrome.h b/chrome/browser/feedback/feedback_uploader_chrome.h index 5a49d651..c83333a 100644 --- a/chrome/browser/feedback/feedback_uploader_chrome.h +++ b/chrome/browser/feedback/feedback_uploader_chrome.h
@@ -10,7 +10,7 @@ #include "base/macros.h" #include "base/single_thread_task_runner.h" #include "components/feedback/feedback_uploader.h" -#include "services/identity/public/cpp/access_token_info.h" +#include "components/signin/public/identity_manager/access_token_info.h" namespace identity { class PrimaryAccountAccessTokenFetcher;
diff --git a/chrome/browser/feedback/show_feedback_page.cc b/chrome/browser/feedback/show_feedback_page.cc index d850c27..3a493f8d 100644 --- a/chrome/browser/feedback/show_feedback_page.cc +++ b/chrome/browser/feedback/show_feedback_page.cc
@@ -19,7 +19,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/signin/identity_manager_factory.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #endif namespace feedback_private = extensions::api::feedback_private;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 94481067..480b3ee2 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -3126,6 +3126,11 @@ "expiry_milestone": 79 }, { + "name": "win-use-native-spellchecker", + "owners": [ "gujen@google.com", "yyushkina@google.com" ], + "expiry_milestone": 81 + }, + { "name": "windows-mixed-reality", "owners": [ "//device/vr/OWNERS", "xr-dev@chromium.org" ], "expiry_milestone": 79
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 0901aa2..5274dc4 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1083,10 +1083,6 @@ "Enables using Google information to populate the profile name and icon in " "the avatar menu."; -const char kViewsCastDialogName[] = "Views Cast dialog"; -const char kViewsCastDialogDescription[] = - "Replace the WebUI Cast dialog with a Views toolkit dialog."; - const char kHandwritingGestureName[] = "Handwriting Gestures"; const char kHandwritingGestureDescription[] = "Enables handwriting gestures within the virtual keyboard"; @@ -2811,6 +2807,13 @@ "Use Windows Runtime MIDI API for WebMIDI (effective only on Windows 10 or " "later)."; +#if BUILDFLAG(ENABLE_SPELLCHECK) +const char kWinUseBrowserSpellCheckerName[] = "Use the Windows OS spellchecker"; +const char kWinUseBrowserSpellCheckerDescription[] = + "Use the Windows OS spellchecker to find spelling mistakes and provide " + "spelling suggestions instead of using the Hunspell engine."; +#endif // BUILDFLAG(ENABLE_SPELLCHECK) + #endif // defined(OS_WIN) // Mac -------------------------------------------------------------------------
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 7e84c58..94d6fca 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -11,6 +11,7 @@ #include "build/buildflag.h" #include "chrome/common/buildflags.h" #include "components/nacl/common/buildflags.h" +#include "components/spellcheck/spellcheck_buildflags.h" #include "device/vr/buildflags/buildflags.h" #include "media/media_buildflags.h" #include "ppapi/buildflags/buildflags.h" @@ -665,9 +666,6 @@ extern const char kTabSwitcherOnReturnName[]; extern const char kTabSwitcherOnReturnDescription[]; -extern const char kViewsCastDialogName[]; -extern const char kViewsCastDialogDescription[]; - extern const char kHideActiveAppsFromShelfName[]; extern const char kHideActiveAppsFromShelfDescription[]; @@ -1658,6 +1656,11 @@ extern const char kUseWinrtMidiApiName[]; extern const char kUseWinrtMidiApiDescription[]; +#if BUILDFLAG(ENABLE_SPELLCHECK) +extern const char kWinUseBrowserSpellCheckerName[]; +extern const char kWinUseBrowserSpellCheckerDescription[]; +#endif // BUILDFLAG(ENABLE_SPELLCHECK) + #endif // defined(OS_WIN) // Mac ------------------------------------------------------------------------
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc index ecce1cd..e90c19d 100644 --- a/chrome/browser/infobars/infobars_browsertest.cc +++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -407,7 +407,7 @@ case IBD::TAB_SHARING_INFOBAR_DELEGATE: TabSharingInfoBarDelegate::Create( GetInfoBarService(), base::ASCIIToUTF16("example.com"), - base::ASCIIToUTF16("application.com"), nullptr); + base::ASCIIToUTF16("application.com"), true, nullptr); break; default:
diff --git a/chrome/browser/media/cast_remoting_connector.cc b/chrome/browser/media/cast_remoting_connector.cc index 076102d..a5ce4ef3 100644 --- a/chrome/browser/media/cast_remoting_connector.cc +++ b/chrome/browser/media/cast_remoting_connector.cc
@@ -146,7 +146,6 @@ base::BindRepeating( [](content::WebContents* contents, PermissionResultCallback result_callback) { - if (media_router::ShouldUseViewsDialog()) { media_router::MediaRemotingDialogView::GetPermission( contents, std::move(result_callback)); return media_router::MediaRemotingDialogView::IsShowing() @@ -154,10 +153,6 @@ &media_router::MediaRemotingDialogView:: HideDialog) : CancelPermissionRequestCallback(); - } else { - std::move(result_callback).Run(true); - return CancelPermissionRequestCallback(); - } }, contents) #else
diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browser/media/router/media_router_feature.cc index f4d5abf..13f8c014 100644 --- a/chrome/browser/media/router/media_router_feature.cc +++ b/chrome/browser/media/router/media_router_feature.cc
@@ -124,10 +124,6 @@ return base::FeatureList::IsEnabled(kCastMediaRouteProvider); } -bool ShouldUseViewsDialog() { - return base::FeatureList::IsEnabled(features::kViewsCastDialog); -} - bool ShouldUseMirroringService() { // The native Cast MRP requires the mirroring service to do mirroring, so try // to enable the service if the native Cast MRP is being used.
diff --git a/chrome/browser/media/router/mojo/media_router_desktop.cc b/chrome/browser/media/router/mojo/media_router_desktop.cc index f265cf1..a1788b8a 100644 --- a/chrome/browser/media/router/mojo/media_router_desktop.cc +++ b/chrome/browser/media/router/mojo/media_router_desktop.cc
@@ -118,7 +118,6 @@ config->enable_cast_discovery = !CastDiscoveryEnabled(); config->enable_dial_sink_query = !DialMediaRouteProviderEnabled(); config->enable_cast_sink_query = !CastMediaRouteProviderEnabled(); - config->use_views_dialog = ShouldUseViewsDialog(); config->use_mirroring_service = ShouldUseMirroringService(); std::move(callback).Run(instance_id(), std::move(config));
diff --git a/chrome/browser/metrics/OWNERS b/chrome/browser/metrics/OWNERS index 9e130df8..2c7147b 100644 --- a/chrome/browser/metrics/OWNERS +++ b/chrome/browser/metrics/OWNERS
@@ -1,3 +1,4 @@ file://base/metrics/OWNERS per-file first_web_contents_profiler*=file://components/startup_metric_utils/OWNERS +per-file process_memory_metrics_emitter*=file://chrome/browser/performance_manager/OWNERS
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc index aa906a2..a7af66b 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -27,6 +27,7 @@ #include "base/rand_util.h" #include "base/stl_util.h" #include "base/strings/string16.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/task/post_task.h" #include "base/task/task_traits.h" @@ -75,6 +76,7 @@ #include "components/metrics/metrics_service.h" #include "components/metrics/metrics_service_client.h" #include "components/metrics/metrics_state_manager.h" +#include "components/metrics/metrics_switches.h" #include "components/metrics/net/cellular_logic_helper.h" #include "components/metrics/net/net_metrics_log_uploader.h" #include "components/metrics/net/network_metrics_provider.h" @@ -179,6 +181,9 @@ // data. const int kMaxHistogramGatheringWaitDuration = 60000; // 60 seconds. +// The minimum time in seconds between consecutive metrics report uploads. +const int kMetricsUploadIntervalSecMinimum = 20; + // Needs to be kept in sync with the writer in // third_party/crashpad/crashpad/handler/handler_main.cc. const char kCrashpadHistogramAllocatorName[] = "CrashpadMetrics"; @@ -523,6 +528,21 @@ } base::TimeDelta ChromeMetricsServiceClient::GetStandardUploadInterval() { + const base::CommandLine* command_line(base::CommandLine::ForCurrentProcess()); + // If an upload interval is set from the command line, use that value but + // subject it to a minimum threshold to mitigate the risk of DDoS attack. + if (command_line->HasSwitch(metrics::switches::kMetricsUploadIntervalSec)) { + const std::string switchValue = command_line->GetSwitchValueASCII( + metrics::switches::kMetricsUploadIntervalSec); + int custom_upload_interval; + if (base::StringToInt(switchValue, &custom_upload_interval)) { + return base::TimeDelta::FromSeconds( + std::max(custom_upload_interval, kMetricsUploadIntervalSecMinimum)); + } else { + LOG(DFATAL) << "Malformed value for --metrics-upload-interval. " + << "Expected int, got: " << switchValue; + } + } return metrics::GetUploadInterval(); }
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.cc b/chrome/browser/metrics/process_memory_metrics_emitter.cc index 729c4a25..f483df1 100644 --- a/chrome/browser/metrics/process_memory_metrics_emitter.cc +++ b/chrome/browser/metrics/process_memory_metrics_emitter.cc
@@ -835,7 +835,7 @@ // main-frame of the given |page|. bool HostsMainFrame(performance_manager::ProcessNodeImpl* process, performance_manager::PageNodeImpl* page) { - performance_manager::FrameNodeImpl* main_frame = page->GetMainFrameNode(); + performance_manager::FrameNodeImpl* main_frame = page->GetMainFrameNodeImpl(); if (main_frame == nullptr) { // |process| can't host a frame that doesn't exist. return false; @@ -851,7 +851,7 @@ performance_manager::GraphImpl* graph) { std::vector<ProcessInfo> process_infos; std::vector<performance_manager::ProcessNodeImpl*> process_nodes = - graph->GetAllProcessNodes(); + graph->GetAllProcessNodeImpls(); for (auto* process_node : process_nodes) { if (process_node->process_id() == base::kNullProcessId) continue;
diff --git a/chrome/browser/metrics/ukm_browsertest.cc b/chrome/browser/metrics/ukm_browsertest.cc index 225eaeda..c34aa58 100644 --- a/chrome/browser/metrics/ukm_browsertest.cc +++ b/chrome/browser/metrics/ukm_browsertest.cc
@@ -31,6 +31,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/metrics_services_manager/metrics_services_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/driver/sync_service.h" @@ -50,7 +51,6 @@ #include "content/public/test/navigation_handle_observer.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_utils.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/metrics/public/cpp/ukm_recorder.h" #include "services/metrics/public/cpp/ukm_source.h" #include "services/network/test/test_network_quality_tracker.h"
diff --git a/chrome/browser/mouse_events_interactive_uitest.cc b/chrome/browser/mouse_events_interactive_uitest.cc index 242c912f..8aad3a8d 100644 --- a/chrome/browser/mouse_events_interactive_uitest.cc +++ b/chrome/browser/mouse_events_interactive_uitest.cc
@@ -108,9 +108,9 @@ WaitForTitle("ondblclick"); } -#if defined(OS_MACOSX) || defined(OS_LINUX) +#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) // OS_MACOSX: Missing automation provider support: http://crbug.com/45892. -// OS_LINUX: http://crbug.com/133361. +// OS_LINUX, OS_WIN: http://crbug.com/133361. #define MAYBE_TestOnMouseOut DISABLED_TestOnMouseOut #else #define MAYBE_TestOnMouseOut TestOnMouseOut
diff --git a/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc b/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc index 758a3c32..e4125d7 100644 --- a/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc +++ b/chrome/browser/offline_pages/offline_page_request_handler_unittest.cc
@@ -66,11 +66,11 @@ const GURL kUrl("http://test.org/page"); const GURL kUrl2("http://test.org/another"); const base::FilePath kFilename1(FILE_PATH_LITERAL("hello.mhtml")); -const base::FilePath kFilename2(FILE_PATH_LITERAL("test.mhtml")); +const base::FilePath kFilename2(FILE_PATH_LITERAL("welcome.mhtml")); const base::FilePath kNonexistentFilename( FILE_PATH_LITERAL("nonexistent.mhtml")); const int kFileSize1 = 471; // Real size of hello.mhtml. -const int kFileSize2 = 444; // Real size of test.mhtml. +const int kFileSize2 = 461; // Real size of welcome.mhtml. const int kMismatchedFileSize = 99999; const std::string kDigest1( "\x43\x60\x62\x02\x06\x15\x0f\x3e\x77\x99\x3d\xed\xdc\xd4\xe2\x0d\xbe\xbd" @@ -79,7 +79,7 @@ const std::string kDigest2( "\xBD\xD3\x37\x79\xDA\x7F\x4E\x6A\x16\x66\xED\x49\x67\x18\x54\x48\xC6\x8E" "\xA1\x47\x16\xA5\x44\x45\x43\xD0\x0E\x04\x9F\x4C\x45\xDC", - 32); // SHA256 Hash of test.mhtml. + 32); // SHA256 Hash of welcome.mhtml. const std::string kMismatchedDigest( "\xff\x64\xF9\x7C\x94\xE5\x9E\x91\x83\x3D\x41\xB0\x36\x90\x0A\xDF\xB3\xB1" "\x5C\x13\xBE\xB8\x35\x8C\xF6\x5B\xC4\xB5\x5A\xFC\x3A\xCC", @@ -960,6 +960,9 @@ } ReadCompletedOnIO( ResponseInfo(client_->completion_status().error_code, mime_type_, body_)); + // Clear intermediate data in preparation for next potential page loading. + mime_type_.clear(); + body_.clear(); } void OfflinePageURLLoaderBuilder::InterceptRequestOnIO( @@ -1316,9 +1319,7 @@ AGGREGATED_REQUEST_RESULT_MAX); } -// TODO(https://crbug.com/830282): Flaky on "Marshmallow Phone Tester (rel)". -TEST_F(OfflinePageRequestHandlerTest, - DISABLED_LoadMostRecentlyCreatedOfflinePage) { +TEST_F(OfflinePageRequestHandlerTest, LoadMostRecentlyCreatedOfflinePage) { this->SimulateHasNetworkConnectivity(false); // Save 2 offline pages associated with same online URL, but pointing to @@ -1382,9 +1383,7 @@ PAGE_NOT_FOUND_ON_CONNECTED_NETWORK); } -// TODO(https://crbug.com/830282): Flaky on "Marshmallow Phone Tester (rel)". -TEST_F(OfflinePageRequestHandlerTest, - DISABLED_LoadOfflinePageForUrlWithFragment) { +TEST_F(OfflinePageRequestHandlerTest, LoadOfflinePageForUrlWithFragment) { this->SimulateHasNetworkConnectivity(false); // Save an offline page associated with online URL without fragment.
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc index 431fd47..e065484 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -59,6 +59,7 @@ #include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/prefs/pref_service.h" #include "components/sessions/content/content_record_password_state.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" #include "components/translate/core/browser/translate_manager.h" @@ -80,7 +81,6 @@ #include "google_apis/gaia/gaia_urls.h" #include "net/base/url_util.h" #include "net/cert/cert_status_flags.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/metrics/public/cpp/ukm_recorder.h" #include "third_party/re2/src/re2/re2.h" #include "url/url_constants.h"
diff --git a/chrome/browser/password_manager/password_manager_test_base.cc b/chrome/browser/password_manager/password_manager_test_base.cc index b2382817..b38583e 100644 --- a/chrome/browser/password_manager/password_manager_test_base.cc +++ b/chrome/browser/password_manager/password_manager_test_base.cc
@@ -409,6 +409,12 @@ controller->WaitForState(password_manager::ui::PENDING_PASSWORD_STATE); } +void BubbleObserver::WaitForAutomaticUpdatePrompt() const { + CustomManagePasswordsUIController* controller = + static_cast<CustomManagePasswordsUIController*>(passwords_ui_controller_); + controller->WaitForState(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); +} + bool BubbleObserver::WaitForFallbackForSaving( const base::TimeDelta timeout) const { CustomManagePasswordsUIController* controller =
diff --git a/chrome/browser/password_manager/password_manager_test_base.h b/chrome/browser/password_manager/password_manager_test_base.h index bd93984..062ea68 100644 --- a/chrome/browser/password_manager/password_manager_test_base.h +++ b/chrome/browser/password_manager/password_manager_test_base.h
@@ -137,6 +137,11 @@ // PasswordManagerBrowserTestBase. void WaitForAutomaticSavePrompt() const; + // Returns once the update prompt pops up or it's already shown. + // |web_contents| must be the custom one returned by + // PasswordManagerBrowserTestBase. + void WaitForAutomaticUpdatePrompt() const; + // Returns true if the browser shows the fallback for saving password within // the allotted timeout. // |web_contents| must be the custom one returned by
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc index e509b888..00e8d40a 100644 --- a/chrome/browser/password_manager/password_store_factory.cc +++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -34,11 +34,11 @@ #include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if defined(OS_WIN)
diff --git a/chrome/browser/password_manager/password_store_signin_notifier_impl.cc b/chrome/browser/password_manager/password_store_signin_notifier_impl.cc index 64dab721..0c39326 100644 --- a/chrome/browser/password_manager/password_store_signin_notifier_impl.cc +++ b/chrome/browser/password_manager/password_store_signin_notifier_impl.cc
@@ -6,7 +6,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace password_manager {
diff --git a/chrome/browser/password_manager/password_store_signin_notifier_impl.h b/chrome/browser/password_manager/password_store_signin_notifier_impl.h index 866755ef..1dcb7e7d 100644 --- a/chrome/browser/password_manager/password_store_signin_notifier_impl.h +++ b/chrome/browser/password_manager/password_store_signin_notifier_impl.h
@@ -8,7 +8,7 @@ #include "base/macros.h" #include "components/password_manager/core/browser/password_store_signin_notifier.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class Profile;
diff --git a/chrome/browser/password_manager/password_store_signin_notifier_impl_unittest.cc b/chrome/browser/password_manager/password_store_signin_notifier_impl_unittest.cc index 42ff4552..61feeee 100644 --- a/chrome/browser/password_manager/password_store_signin_notifier_impl_unittest.cc +++ b/chrome/browser/password_manager/password_store_signin_notifier_impl_unittest.cc
@@ -8,9 +8,9 @@ #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/test/base/testing_profile.h" #include "components/password_manager/core/browser/mock_password_store.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "testing/gtest/include/gtest/gtest.h" using testing::_;
diff --git a/chrome/browser/payments/chrome_payment_request_delegate.cc b/chrome/browser/payments/chrome_payment_request_delegate.cc index 3b3f246..220214e 100644 --- a/chrome/browser/payments/chrome_payment_request_delegate.cc +++ b/chrome/browser/payments/chrome_payment_request_delegate.cc
@@ -31,8 +31,8 @@ #include "components/payments/content/payment_request.h" #include "components/payments/content/payment_request_dialog.h" #include "components/payments/core/payment_prefs.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_contents.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/metrics/public/cpp/ukm_recorder.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "third_party/libaddressinput/chromium/chrome_metadata_source.h"
diff --git a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.cc b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.cc index c3cdc66c3..84948f1 100644 --- a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.cc +++ b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.cc
@@ -6,8 +6,11 @@ #include <algorithm> +#include "chrome/browser/performance_manager/graph/frame_node_impl.h" #include "chrome/browser/performance_manager/graph/graph_impl.h" #include "chrome/browser/performance_manager/graph/node_attached_data_impl.h" +#include "chrome/browser/performance_manager/graph/page_node_impl.h" +#include "chrome/browser/performance_manager/graph/process_node_impl.h" #include "chrome/browser/performance_manager/performance_manager_clock.h" namespace performance_manager { @@ -62,47 +65,53 @@ PageAlmostIdleDecorator::~PageAlmostIdleDecorator() = default; -void PageAlmostIdleDecorator::OnRegistered() { - // This observer presumes that it's been added before any nodes exist in the - // graph. - DCHECK(graph()->nodes().empty()); -} - -bool PageAlmostIdleDecorator::ShouldObserve(const NodeBase* node) { - switch (node->type()) { - case FrameNodeImpl::Type(): - case PageNodeImpl::Type(): - case ProcessNodeImpl::Type(): - return true; - - default: - return false; - } - NOTREACHED(); -} - void PageAlmostIdleDecorator::OnNetworkAlmostIdleChanged( - FrameNodeImpl* frame_node) { - UpdateLoadIdleStateFrame(frame_node); + const FrameNode* frame_node) { + UpdateLoadIdleStateFrame(FrameNodeImpl::FromNode(frame_node)); } -void PageAlmostIdleDecorator::OnIsLoadingChanged(PageNodeImpl* page_node) { - UpdateLoadIdleStatePage(page_node); +void PageAlmostIdleDecorator::OnPassedToGraph(Graph* graph) { + RegisterObservers(graph); +} + +void PageAlmostIdleDecorator::OnTakenFromGraph(Graph* graph) { + UnregisterObservers(graph); +} + +void PageAlmostIdleDecorator::OnIsLoadingChanged(const PageNode* page_node) { + UpdateLoadIdleStatePage(PageNodeImpl::FromNode(page_node)); } void PageAlmostIdleDecorator::OnMainFrameNavigationCommitted( - PageNodeImpl* page_node) { + const PageNode* page_node) { // Reset the load-idle state associated with this page as a new navigation has // started. - auto* data = DataImpl::GetOrCreate(page_node); + auto* page_impl = PageNodeImpl::FromNode(page_node); + auto* data = DataImpl::GetOrCreate(page_impl); data->load_idle_state_ = LoadIdleState::kLoadingNotStarted; - PageAlmostIdleAccess::SetPageAlmostIdle(page_node, false); - UpdateLoadIdleStatePage(page_node); + PageAlmostIdleAccess::SetPageAlmostIdle(page_impl, false); + UpdateLoadIdleStatePage(page_impl); } void PageAlmostIdleDecorator::OnMainThreadTaskLoadIsLow( - ProcessNodeImpl* process_node) { - UpdateLoadIdleStateProcess(process_node); + const ProcessNode* process_node) { + UpdateLoadIdleStateProcess(ProcessNodeImpl::FromNode(process_node)); +} + +void PageAlmostIdleDecorator::RegisterObservers(Graph* graph) { + // This observer presumes that it's been added before any nodes exist in the + // graph. + // TODO(chrisha): Add graph introspection functions to Graph. + DCHECK(GraphImpl::FromGraph(graph)->nodes().empty()); + graph->AddFrameNodeObserver(this); + graph->AddPageNodeObserver(this); + graph->AddProcessNodeObserver(this); +} + +void PageAlmostIdleDecorator::UnregisterObservers(Graph* graph) { + graph->RemoveFrameNodeObserver(this); + graph->RemovePageNodeObserver(this); + graph->RemoveProcessNodeObserver(this); } void PageAlmostIdleDecorator::UpdateLoadIdleStateFrame( @@ -230,7 +239,7 @@ // static bool PageAlmostIdleDecorator::IsIdling(const PageNodeImpl* page_node) { // Get the frame node for the main frame associated with this page. - const FrameNodeImpl* main_frame_node = page_node->GetMainFrameNode(); + const FrameNodeImpl* main_frame_node = page_node->GetMainFrameNodeImpl(); if (!main_frame_node) return false;
diff --git a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.h b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.h index f9a9672..fd6a2c2 100644 --- a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.h +++ b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator.h
@@ -7,32 +7,44 @@ #include "base/time/time.h" #include "base/timer/timer.h" -#include "chrome/browser/performance_manager/graph/frame_node_impl.h" -#include "chrome/browser/performance_manager/graph/node_base.h" -#include "chrome/browser/performance_manager/graph/page_node_impl.h" -#include "chrome/browser/performance_manager/graph/process_node_impl.h" -#include "chrome/browser/performance_manager/observers/graph_observer.h" +#include "chrome/browser/performance_manager/public/graph/frame_node.h" +#include "chrome/browser/performance_manager/public/graph/graph.h" +#include "chrome/browser/performance_manager/public/graph/page_node.h" +#include "chrome/browser/performance_manager/public/graph/process_node.h" namespace performance_manager { +class FrameNodeImpl; +class PageNodeImpl; +class ProcessNodeImpl; + // The PageAlmostIdle decorator is responsible for determining when a page has // reached an "almost idle" state after initial load, based on CPU and network // quiescence, as well as an absolute timeout. This state is then updated on // PageNodes in a graph. -class PageAlmostIdleDecorator : public GraphImplObserverDefaultImpl { +class PageAlmostIdleDecorator : public FrameNode::ObserverDefaultImpl, + public GraphOwnedDefaultImpl, + public PageNode::ObserverDefaultImpl, + public ProcessNode::ObserverDefaultImpl { public: class Data; PageAlmostIdleDecorator(); ~PageAlmostIdleDecorator() override; - // GraphObserver implementation: - void OnRegistered() override; - bool ShouldObserve(const NodeBase* node) override; - void OnNetworkAlmostIdleChanged(FrameNodeImpl* frame_node) override; - void OnIsLoadingChanged(PageNodeImpl* page_node) override; - void OnMainFrameNavigationCommitted(PageNodeImpl* page_node) override; - void OnMainThreadTaskLoadIsLow(ProcessNodeImpl* process_node) override; + // FrameNodeObserver implementation: + void OnNetworkAlmostIdleChanged(const FrameNode* frame_node) override; + + // GraphOwned implementation: + void OnPassedToGraph(Graph* graph) override; + void OnTakenFromGraph(Graph* graph) override; + + // PageNodeObserver implementation: + void OnIsLoadingChanged(const PageNode* page_node) override; + void OnMainFrameNavigationCommitted(const PageNode* page_node) override; + + // ProcessNodeObserver implementation: + void OnMainThreadTaskLoadIsLow(const ProcessNode* process_node) override; protected: friend class PageAlmostIdleDecoratorTest; @@ -56,6 +68,12 @@ static constexpr base::TimeDelta kWaitingForIdleTimeout = base::TimeDelta::FromMinutes(1); + // (Un)registers the various node observer flavors of this object with the + // graph. These are invoked by OnPassedToGraph and OnTakenFromGraph, but + // hoisted to their own functions for testing. + void RegisterObservers(Graph* graph); + void UnregisterObservers(Graph* graph); + // These are called when properties/events affecting the load-idle state are // observed. Frame and Process variants will eventually all redirect to the // appropriate Page variant, where the real work is done.
diff --git a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc index 7f6bdf3..16db29b 100644 --- a/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc +++ b/chrome/browser/performance_manager/decorators/page_almost_idle_decorator_unittest.cc
@@ -28,12 +28,12 @@ ~PageAlmostIdleDecoratorTest() override = default; void SetUp() override { - paid_ = std::make_unique<PageAlmostIdleDecorator>(); - graph()->RegisterObserver(paid_.get()); + paid_ = new PageAlmostIdleDecorator(); + graph()->PassToGraph(base::WrapUnique(paid_)); } + void TearDown() override { PerformanceManagerClock::ResetClockForTesting(); - graph()->UnregisterObserver(paid_.get()); } void TestPageAlmostIdleTransitions(bool timeout); @@ -42,7 +42,7 @@ return PageAlmostIdleDecorator::IsIdling(page_node); } - std::unique_ptr<PageAlmostIdleDecorator> paid_; + PageAlmostIdleDecorator* paid_ = nullptr; private: DISALLOW_COPY_AND_ASSIGN(PageAlmostIdleDecoratorTest);
diff --git a/chrome/browser/performance_manager/graph/graph_impl.cc b/chrome/browser/performance_manager/graph/graph_impl.cc index 858951e4..20aa307 100644 --- a/chrome/browser/performance_manager/graph/graph_impl.cc +++ b/chrome/browser/performance_manager/graph/graph_impl.cc
@@ -165,6 +165,22 @@ return object; } +const SystemNode* GraphImpl::FindOrCreateSystemNode() { + return FindOrCreateSystemNodeImpl(); +} + +std::vector<const ProcessNode*> GraphImpl::GetAllProcessNodes() const { + return GetAllNodesOfType<ProcessNodeImpl, const ProcessNode*>(); +} + +std::vector<const FrameNode*> GraphImpl::GetAllFrameNodes() const { + return GetAllNodesOfType<FrameNodeImpl, const FrameNode*>(); +} + +std::vector<const PageNode*> GraphImpl::GetAllPageNodes() const { + return GetAllNodesOfType<PageNodeImpl, const PageNode*>(); +} + void GraphImpl::RegisterObserver(GraphImplObserver* observer) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); observer->SetGraph(this); @@ -292,7 +308,7 @@ return ++current_node_serialization_id_; } -SystemNodeImpl* GraphImpl::FindOrCreateSystemNode() { +SystemNodeImpl* GraphImpl::FindOrCreateSystemNodeImpl() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!system_node_) { // Create the singleton system node instance. Ownership is taken by the @@ -319,16 +335,16 @@ return ProcessNodeImpl::FromNodeBase(it->second); } -std::vector<ProcessNodeImpl*> GraphImpl::GetAllProcessNodes() { - return GetAllNodesOfType<ProcessNodeImpl>(); +std::vector<ProcessNodeImpl*> GraphImpl::GetAllProcessNodeImpls() const { + return GetAllNodesOfType<ProcessNodeImpl, ProcessNodeImpl*>(); } -std::vector<FrameNodeImpl*> GraphImpl::GetAllFrameNodes() { - return GetAllNodesOfType<FrameNodeImpl>(); +std::vector<FrameNodeImpl*> GraphImpl::GetAllFrameNodeImpls() const { + return GetAllNodesOfType<FrameNodeImpl, FrameNodeImpl*>(); } -std::vector<PageNodeImpl*> GraphImpl::GetAllPageNodes() { - return GetAllNodesOfType<PageNodeImpl>(); +std::vector<PageNodeImpl*> GraphImpl::GetAllPageNodeImpls() const { + return GetAllNodesOfType<PageNodeImpl, PageNodeImpl*>(); } size_t GraphImpl::GetNodeAttachedDataCountForTesting(const Node* node, @@ -393,11 +409,11 @@ processes_by_pid_[new_pid] = process; } -template <typename NodeType> -std::vector<NodeType*> GraphImpl::GetAllNodesOfType() { +template <typename NodeType, typename ReturnNodeType> +std::vector<ReturnNodeType> GraphImpl::GetAllNodesOfType() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); const auto type = NodeType::Type(); - std::vector<NodeType*> ret; + std::vector<ReturnNodeType> ret; for (auto* node : nodes_) { if (node->type() == type) ret.push_back(NodeType::FromNodeBase(node));
diff --git a/chrome/browser/performance_manager/graph/graph_impl.h b/chrome/browser/performance_manager/graph/graph_impl.h index b7bf449..b62d704 100644 --- a/chrome/browser/performance_manager/graph/graph_impl.h +++ b/chrome/browser/performance_manager/graph/graph_impl.h
@@ -60,6 +60,10 @@ void RemoveSystemNodeObserver(SystemNodeObserver* observer) override; void PassToGraph(std::unique_ptr<GraphOwned> graph_owned) override; std::unique_ptr<GraphOwned> TakeFromGraph(GraphOwned* graph_owned) override; + const SystemNode* FindOrCreateSystemNode() override; + std::vector<const FrameNode*> GetAllFrameNodes() const override; + std::vector<const PageNode*> GetAllPageNodes() const override; + std::vector<const ProcessNode*> GetAllProcessNodes() const override; uintptr_t GetImplType() const override; const void* GetImpl() const override; @@ -79,10 +83,10 @@ // unregister |observer| from any nodes it's subscribed to. void UnregisterObserver(GraphImplObserver* observer); - SystemNodeImpl* FindOrCreateSystemNode(); - std::vector<ProcessNodeImpl*> GetAllProcessNodes(); - std::vector<FrameNodeImpl*> GetAllFrameNodes(); - std::vector<PageNodeImpl*> GetAllPageNodes(); + SystemNodeImpl* FindOrCreateSystemNodeImpl(); + std::vector<ProcessNodeImpl*> GetAllProcessNodeImpls() const; + std::vector<FrameNodeImpl*> GetAllFrameNodeImpls() const; + std::vector<PageNodeImpl*> GetAllPageNodeImpls() const; const NodeSet& nodes() { return nodes_; } // Retrieves the process node with PID |pid|, if any. @@ -135,8 +139,8 @@ void BeforeProcessPidChange(ProcessNodeImpl* process, base::ProcessId new_pid); - template <typename NodeType> - std::vector<NodeType*> GetAllNodesOfType(); + template <typename NodeType, typename ReturnNodeType> + std::vector<ReturnNodeType> GetAllNodesOfType() const; void ReleaseSystemNode();
diff --git a/chrome/browser/performance_manager/graph/graph_impl_unittest.cc b/chrome/browser/performance_manager/graph/graph_impl_unittest.cc index 3e7d222..fcdb20c 100644 --- a/chrome/browser/performance_manager/graph/graph_impl_unittest.cc +++ b/chrome/browser/performance_manager/graph/graph_impl_unittest.cc
@@ -26,10 +26,10 @@ TEST(GraphImplTest, FindOrCreateSystemNode) { GraphImpl graph; - SystemNodeImpl* system_node = graph.FindOrCreateSystemNode(); + SystemNodeImpl* system_node = graph.FindOrCreateSystemNodeImpl(); // A second request should return the same instance. - EXPECT_EQ(system_node, graph.FindOrCreateSystemNode()); + EXPECT_EQ(system_node, graph.FindOrCreateSystemNodeImpl()); } TEST(GraphImplTest, GetProcessNodeByPid) { @@ -93,16 +93,16 @@ GraphImpl graph; MockMultiplePagesInSingleProcessGraph mock_graph(&graph); - std::vector<ProcessNodeImpl*> processes = graph.GetAllProcessNodes(); + std::vector<ProcessNodeImpl*> processes = graph.GetAllProcessNodeImpls(); ASSERT_EQ(1u, processes.size()); EXPECT_NE(nullptr, processes[0]); - std::vector<FrameNodeImpl*> frames = graph.GetAllFrameNodes(); + std::vector<FrameNodeImpl*> frames = graph.GetAllFrameNodeImpls(); ASSERT_EQ(2u, frames.size()); EXPECT_NE(nullptr, frames[0]); EXPECT_NE(nullptr, frames[1]); - std::vector<PageNodeImpl*> pages = graph.GetAllPageNodes(); + std::vector<PageNodeImpl*> pages = graph.GetAllPageNodeImpls(); ASSERT_EQ(2u, pages.size()); EXPECT_NE(nullptr, pages[0]); EXPECT_NE(nullptr, pages[1]); @@ -122,7 +122,7 @@ EXPECT_NE(0u, id); EXPECT_EQ(id, NodeBase::GetSerializationId(process.get())); - SystemNodeImpl* system = graph.FindOrCreateSystemNode(); + SystemNodeImpl* system = graph.FindOrCreateSystemNodeImpl(); // Different nodes should be assigned different IDs. EXPECT_NE(id, NodeBase::GetSerializationId(system));
diff --git a/chrome/browser/performance_manager/graph/graph_test_harness.h b/chrome/browser/performance_manager/graph/graph_test_harness.h index 4f82c31..b9ca4da 100644 --- a/chrome/browser/performance_manager/graph/graph_test_harness.h +++ b/chrome/browser/performance_manager/graph/graph_test_harness.h
@@ -116,7 +116,7 @@ class TestNodeWrapper<SystemNodeImpl> { public: static TestNodeWrapper<SystemNodeImpl> Create(GraphImpl* graph) { - return TestNodeWrapper<SystemNodeImpl>(graph->FindOrCreateSystemNode()); + return TestNodeWrapper<SystemNodeImpl>(graph->FindOrCreateSystemNodeImpl()); } explicit TestNodeWrapper(SystemNodeImpl* impl) : impl_(impl) {} @@ -150,7 +150,8 @@ } TestNodeWrapper<SystemNodeImpl> GetSystemNode() { - return TestNodeWrapper<SystemNodeImpl>(graph()->FindOrCreateSystemNode()); + return TestNodeWrapper<SystemNodeImpl>( + graph()->FindOrCreateSystemNodeImpl()); } // testing::Test:
diff --git a/chrome/browser/performance_manager/graph/page_node_impl.cc b/chrome/browser/performance_manager/graph/page_node_impl.cc index 0bf7eba..5bea6cf 100644 --- a/chrome/browser/performance_manager/graph/page_node_impl.cc +++ b/chrome/browser/performance_manager/graph/page_node_impl.cc
@@ -153,7 +153,7 @@ return PerformanceManagerClock::NowTicks() - visibility_change_time_; } -FrameNodeImpl* PageNodeImpl::GetMainFrameNode() const { +FrameNodeImpl* PageNodeImpl::GetMainFrameNodeImpl() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (main_frame_nodes_.empty()) return nullptr; @@ -341,6 +341,10 @@ return navigation_id(); } +const FrameNode* PageNodeImpl::GetMainFrameNode() const { + return GetMainFrameNodeImpl(); +} + const GURL& PageNodeImpl::GetMainFrameUrl() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return main_frame_url();
diff --git a/chrome/browser/performance_manager/graph/page_node_impl.h b/chrome/browser/performance_manager/graph/page_node_impl.h index 3c5ce1d..8ffdfeb 100644 --- a/chrome/browser/performance_manager/graph/page_node_impl.h +++ b/chrome/browser/performance_manager/graph/page_node_impl.h
@@ -68,7 +68,7 @@ // Returns the current main frame node (if there is one), otherwise returns // any of the potentially multiple main frames that currently exist. If there // are no main frames at the moment, returns nullptr. - FrameNodeImpl* GetMainFrameNode() const; + FrameNodeImpl* GetMainFrameNodeImpl() const; // Accessors. bool is_visible() const; @@ -138,6 +138,7 @@ ukm::SourceId GetUkmSourceID() const override; LifecycleState GetLifecycleState() const override; int64_t GetNavigationID() const override; + const FrameNode* GetMainFrameNode() const override; const GURL& GetMainFrameUrl() const override; void AddFrame(FrameNodeImpl* frame_node);
diff --git a/chrome/browser/performance_manager/graph/system_node_impl.cc b/chrome/browser/performance_manager/graph/system_node_impl.cc index 5b31562b..b73f763 100644 --- a/chrome/browser/performance_manager/graph/system_node_impl.cc +++ b/chrome/browser/performance_manager/graph/system_node_impl.cc
@@ -115,7 +115,7 @@ } // Grab all the processes to see if there were any we didn't get data for. - std::vector<ProcessNodeImpl*> processes = graph_->GetAllProcessNodes(); + std::vector<ProcessNodeImpl*> processes = graph_->GetAllProcessNodeImpls(); if (found_processes.size() != processes.size()) { // We didn't find them all, compute the difference and clear the data for
diff --git a/chrome/browser/performance_manager/observers/isolation_context_metrics.cc b/chrome/browser/performance_manager/observers/isolation_context_metrics.cc index b02b3934..60ea8ba4 100644 --- a/chrome/browser/performance_manager/observers/isolation_context_metrics.cc +++ b/chrome/browser/performance_manager/observers/isolation_context_metrics.cc
@@ -9,12 +9,8 @@ #include "base/bind.h" #include "base/metrics/histogram_macros.h" -#include "chrome/browser/performance_manager/graph/frame_node_impl.h" -#include "chrome/browser/performance_manager/graph/graph_impl.h" -#include "chrome/browser/performance_manager/graph/node_attached_data_impl.h" -#include "chrome/browser/performance_manager/graph/page_node_impl.h" -#include "chrome/browser/performance_manager/graph/process_node_impl.h" #include "chrome/browser/performance_manager/performance_manager_clock.h" +#include "chrome/browser/performance_manager/public/graph/node_attached_data.h" namespace performance_manager { @@ -61,19 +57,14 @@ // Wrapper around ProcessData providing storage. Keeps the impl details out of // the header. struct IsolationContextMetricsProcessDataImpl - : public NodeAttachedDataImpl<IsolationContextMetricsProcessDataImpl> { - struct Traits : public NodeAttachedDataInMap<ProcessNodeImpl> {}; - + : public ExternalNodeAttachedDataImpl< + IsolationContextMetricsProcessDataImpl> { + explicit IsolationContextMetricsProcessDataImpl( + const ProcessNode* process_node) {} ~IsolationContextMetricsProcessDataImpl() override = default; IsolationContextMetrics::ProcessData process_data; - private: - friend class NodeAttachedDataImpl<IsolationContextMetricsProcessDataImpl>; - - explicit IsolationContextMetricsProcessDataImpl( - const ProcessNodeImpl* process_node) {} - DISALLOW_COPY_AND_ASSIGN(IsolationContextMetricsProcessDataImpl); }; @@ -119,100 +110,70 @@ base::Unretained(this))); } -void IsolationContextMetrics::OnRegistered() { - StartTimer(); -} - -void IsolationContextMetrics::OnUnregistered() { - reporting_timer_.Stop(); - - // Drain all metrics on shutdown to avoid losing the tail. - OnReportingTimerFired(); -} - -bool IsolationContextMetrics::ShouldObserve(const NodeBase* node) { - // Track all pages, frames and processes. - if (node->type() == NodeTypeEnum::kFrame || - node->type() == NodeTypeEnum::kPage || - node->type() == NodeTypeEnum::kProcess) { - return true; - } - return false; -} - -void IsolationContextMetrics::OnNodeAdded(NodeBase* node) { +void IsolationContextMetrics::OnFrameNodeAdded(const FrameNode* frame_node) { // Track frame node births and use that to keep ProcessData up to date. - if (node->type() == NodeTypeEnum::kFrame) { - const auto* frame_node = FrameNodeImpl::FromNodeBase(node); - ChangeFrameCount(frame_node, 1); + ChangeFrameCount(frame_node, 1); - // This should be impossible, as frame nodes are created not current, and - // are added to the graph before |is_current| is set. - DCHECK(!frame_node->is_current()); - } + // This should be impossible, as frame nodes are created not current, and + // are added to the graph before |IsCurrent| is set. + DCHECK(!frame_node->IsCurrent()); } -void IsolationContextMetrics::OnBeforeNodeRemoved(NodeBase* node) { +void IsolationContextMetrics::OnBeforeFrameNodeRemoved( + const FrameNode* frame_node) { // Track frame node deaths and use that to keep ProcessData up to date. - if (node->type() == NodeTypeEnum::kFrame) { - const auto* frame_node = FrameNodeImpl::FromNodeBase(node); - ChangeFrameCount(frame_node, -1); + ChangeFrameCount(frame_node, -1); - // If the frame is the current main frame of a page, then remove the page - // from the browsing instance as well. - if (frame_node->IsMainFrame() && frame_node->is_current()) { - ChangePageCount(frame_node->page_node(), - frame_node->browsing_instance_id(), -1); - } - } else if (node->type() == NodeTypeEnum::kProcess) { - // Track process death and use that to report whether or not the process - // ever hosted frames from the same site instance. The ProcessData will only - // exist for renderer processes that ever actually hosted frames. - const auto* process_node = ProcessNodeImpl::FromNodeBase(node); - if (auto* process_data = ProcessData::Get(process_node)) { - auto state = ProcessDataState::kOnlyOneFrameExists; - if (process_data->has_hosted_multiple_frames) { - state = process_data->has_hosted_multiple_frames_with_same_site_instance - ? ProcessDataState::kSomeFramesHaveSameSiteInstance - : ProcessDataState::kAllFramesHaveDistinctSiteInstances; - } - UMA_HISTOGRAM_ENUMERATION(kProcessDataByProcessHistogramName, state); - } + // If the frame is the current main frame of a page, then remove the page + // from the browsing instance as well. + if (frame_node->IsMainFrame() && frame_node->IsCurrent()) { + ChangePageCount(frame_node->GetPageNode(), + frame_node->GetBrowsingInstanceId(), -1); } } -void IsolationContextMetrics::OnIsCurrentChanged(FrameNodeImpl* frame_node) { +void IsolationContextMetrics::OnIsCurrentChanged(const FrameNode* frame_node) { if (!frame_node->IsMainFrame()) return; - const auto* page_node = frame_node->page_node(); + const auto* page_node = frame_node->GetPageNode(); DCHECK(page_node); - const int32_t browsing_instance_id = frame_node->browsing_instance_id(); + const int32_t browsing_instance_id = frame_node->GetBrowsingInstanceId(); - const int delta = frame_node->is_current() ? 1 : -1; + const int delta = frame_node->IsCurrent() ? 1 : -1; ChangePageCount(page_node, browsing_instance_id, delta); } -void IsolationContextMetrics::OnIsVisibleChanged(PageNodeImpl* page_node) { +void IsolationContextMetrics::OnPassedToGraph(Graph* graph) { + graph_ = graph; + RegisterObservers(graph); +} + +void IsolationContextMetrics::OnTakenFromGraph(Graph* graph) { + UnregisterObservers(graph); + graph_ = nullptr; +} + +void IsolationContextMetrics::OnIsVisibleChanged(const PageNode* page_node) { // If there is no current main frame node associated with the page, we will // capture the visibility event when a node is added and made current via // "OnIsCurrentChanged". const auto* frame_node = page_node->GetMainFrameNode(); - if (!frame_node || !frame_node->is_current()) + if (!frame_node || !frame_node->IsCurrent()) return; // Get the data related to this browsing instance. Since there is a current // main frame it must already have existed. DCHECK(base::Contains(browsing_instance_data_, - frame_node->browsing_instance_id())); - auto* data = &browsing_instance_data_[frame_node->browsing_instance_id()]; + frame_node->GetBrowsingInstanceId())); + auto* data = &browsing_instance_data_[frame_node->GetBrowsingInstanceId()]; const BrowsingInstanceDataState old_state = GetBrowsingInstanceDataState(data); const int old_page_count = data->page_count; DCHECK_NE(BrowsingInstanceDataState::kUndefined, old_state); DCHECK_LT(0, data->page_count); - if (page_node->is_visible()) { + if (page_node->IsVisible()) { ++data->visible_page_count; DCHECK_LE(data->visible_page_count, data->page_count); } else { @@ -233,6 +194,39 @@ } } +void IsolationContextMetrics::OnBeforeProcessNodeRemoved( + const ProcessNode* process_node) { + // Track process death and use that to report whether or not the process + // ever hosted frames from the same site instance. The ProcessData will only + // exist for renderer processes that ever actually hosted frames. + if (auto* process_data = ProcessData::Get(process_node)) { + auto state = ProcessDataState::kOnlyOneFrameExists; + if (process_data->has_hosted_multiple_frames) { + state = process_data->has_hosted_multiple_frames_with_same_site_instance + ? ProcessDataState::kSomeFramesHaveSameSiteInstance + : ProcessDataState::kAllFramesHaveDistinctSiteInstances; + } + UMA_HISTOGRAM_ENUMERATION(kProcessDataByProcessHistogramName, state); + } +} + +void IsolationContextMetrics::RegisterObservers(Graph* graph) { + graph->AddFrameNodeObserver(this); + graph->AddPageNodeObserver(this); + graph->AddProcessNodeObserver(this); + StartTimer(); +} + +void IsolationContextMetrics::UnregisterObservers(Graph* graph) { + graph->RemoveFrameNodeObserver(this); + graph->RemovePageNodeObserver(this); + graph->RemoveProcessNodeObserver(this); + + // Drain all metrics on shutdown to avoid losing the tail. + reporting_timer_.Stop(); + OnReportingTimerFired(); +} + // static IsolationContextMetrics::ProcessDataState IsolationContextMetrics::GetProcessDataState(const ProcessData* process_data) { @@ -276,17 +270,17 @@ } void IsolationContextMetrics::ReportAllProcessData(base::TimeTicks now) { - for (const auto* process_node : graph()->GetAllProcessNodes()) { + for (const auto* process_node : graph_->GetAllProcessNodes()) { auto* process_data = ProcessData::Get(process_node); if (process_data) ReportProcessData(process_data, GetProcessDataState(process_data), now); } } -void IsolationContextMetrics::ChangeFrameCount(const FrameNodeImpl* frame_node, +void IsolationContextMetrics::ChangeFrameCount(const FrameNode* frame_node, int delta) { DCHECK(delta == -1 || delta == 1); - const auto* process_node = frame_node->process_node(); + const auto* process_node = frame_node->GetProcessNode(); auto* data = ProcessData::GetOrCreate(process_node); const auto old_state = GetProcessDataState(data); @@ -298,7 +292,7 @@ } auto iter = data->site_instance_frame_count - .insert(std::make_pair(frame_node->site_instance_id(), 0)) + .insert(std::make_pair(frame_node->GetSiteInstanceId(), 0)) .first; DCHECK_LE(0, iter->second); @@ -371,7 +365,7 @@ } } -void IsolationContextMetrics::ChangePageCount(const PageNodeImpl* page_node, +void IsolationContextMetrics::ChangePageCount(const PageNode* page_node, int32_t browsing_instance_id, int delta) { DCHECK(delta == -1 || delta == 1); @@ -390,7 +384,7 @@ DCHECK_LE(0, data->visible_page_count); DCHECK_LE(data->visible_page_count, data->page_count); data->page_count += delta; - if (page_node->is_visible()) + if (page_node->IsVisible()) data->visible_page_count += delta; DCHECK_LE(0, data->page_count); DCHECK_LE(0, data->visible_page_count); @@ -429,7 +423,7 @@ // static IsolationContextMetrics::ProcessData* IsolationContextMetrics::ProcessData::Get( - const ProcessNodeImpl* process_node) { + const ProcessNode* process_node) { auto* impl = IsolationContextMetricsProcessDataImpl::Get(process_node); if (!impl) return nullptr; @@ -439,7 +433,7 @@ // static IsolationContextMetrics::ProcessData* IsolationContextMetrics::ProcessData::GetOrCreate( - const ProcessNodeImpl* process_node) { + const ProcessNode* process_node) { return &IsolationContextMetricsProcessDataImpl::GetOrCreate(process_node) ->process_data; }
diff --git a/chrome/browser/performance_manager/observers/isolation_context_metrics.h b/chrome/browser/performance_manager/observers/isolation_context_metrics.h index 21e05c2..930f0ec8 100644 --- a/chrome/browser/performance_manager/observers/isolation_context_metrics.h +++ b/chrome/browser/performance_manager/observers/isolation_context_metrics.h
@@ -10,7 +10,10 @@ #include "base/containers/small_map.h" #include "base/macros.h" #include "base/timer/timer.h" -#include "chrome/browser/performance_manager/observers/graph_observer.h" +#include "chrome/browser/performance_manager/public/graph/frame_node.h" +#include "chrome/browser/performance_manager/public/graph/graph.h" +#include "chrome/browser/performance_manager/public/graph/page_node.h" +#include "chrome/browser/performance_manager/public/graph/process_node.h" namespace performance_manager { @@ -24,7 +27,10 @@ // (2) How common it is for pages to be in browsing instances with other pages, // as opposed to in browsing instances on their own. This is for estimating // the impact of extending freezing logic to entire browsing instances. -class IsolationContextMetrics : public GraphImplObserverDefaultImpl { +class IsolationContextMetrics : public FrameNode::ObserverDefaultImpl, + public GraphOwned, + public PageNode::ObserverDefaultImpl, + public ProcessNode::ObserverDefaultImpl { public: IsolationContextMetrics(); ~IsolationContextMetrics() override; @@ -73,8 +79,8 @@ ~ProcessData(); // Factories/accessors for node attached data. - static ProcessData* Get(const ProcessNodeImpl* process_node); - static ProcessData* GetOrCreate(const ProcessNodeImpl* process_node); + static ProcessData* Get(const ProcessNode* process_node); + static ProcessData* GetOrCreate(const ProcessNode* process_node); // A map between site instance ID and the number of frames with that site // instance in the process. This is typically small for most processes, but @@ -135,14 +141,26 @@ kMaxValue = kMultiPageBackground // Must be maintained as the max value. }; - // GraphObserver implementation: - void OnRegistered() override; - void OnUnregistered() override; - bool ShouldObserve(const NodeBase* node) override; - void OnNodeAdded(NodeBase* node) override; - void OnBeforeNodeRemoved(NodeBase* node) override; - void OnIsCurrentChanged(FrameNodeImpl* frame_node) override; - void OnIsVisibleChanged(PageNodeImpl* page_node) override; + // FrameNodeObserver implementation: + void OnFrameNodeAdded(const FrameNode* frame_node) override; + void OnBeforeFrameNodeRemoved(const FrameNode* frame_node) override; + void OnIsCurrentChanged(const FrameNode* frame_node) override; + + // GraphOwned implementation: + void OnPassedToGraph(Graph* graph) override; + void OnTakenFromGraph(Graph* graph) override; + + // PageNodeObserver implementation: + void OnIsVisibleChanged(const PageNode* page_node) override; + + // ProcessNodeObserver implementation: + void OnBeforeProcessNodeRemoved(const ProcessNode* process_node) override; + + // (Un)registers the various node observer flavors of this object with the + // graph. These are invoked by OnPassedIntoGraph and OnTakenFromGraph, but + // hoisted to their own functions for testing. + void RegisterObservers(Graph* graph); + void UnregisterObservers(Graph* graph); // Returns the state associated with a ProcessData. static ProcessDataState GetProcessDataState(const ProcessData* process_data); @@ -157,7 +175,7 @@ // Adds or removes a frame from the relevant process data. The |delta| should // be +/- 1. - void ChangeFrameCount(const FrameNodeImpl* frame_node, int delta); + void ChangeFrameCount(const FrameNode* frame_node, int delta); // Returns the state associated with a BrowsingInstanceData. static BrowsingInstanceDataState GetBrowsingInstanceDataState( @@ -175,17 +193,20 @@ // Updates |browsing_instance_data_| as pages are added and removed from // a browsing instance. The |delta| must be +/- 1. - void ChangePageCount(const PageNodeImpl* page_node, + void ChangePageCount(const PageNode* page_node, int32_t browsing_instance_id, int delta); - void OnPageAddedToBrowsingInstance(const PageNodeImpl* page_node, + void OnPageAddedToBrowsingInstance(const PageNode* page_node, int32_t browsing_instance_id); - void OnPageRemovedFromBrowsingInstance(const PageNodeImpl* page_node, + void OnPageRemovedFromBrowsingInstance(const PageNode* page_node, int32_t browsing_instance_id); // This is virtual in order to provide a testing seam. virtual void OnReportingTimerFired(); + // The graph to which this object belongs. + Graph* graph_ = nullptr; + // Timer that is used to periodically flush metrics. This ensures that they // are mostly up to date in the event of a catastrophic browser crash. We // could do this on the same schedule as UMA itself by being a MetricsProvider
diff --git a/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc b/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc index 888552e..caff2da0 100644 --- a/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc +++ b/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc
@@ -77,16 +77,15 @@ static constexpr int32_t kSID3 = 3; void SetUp() override { - metrics_ = std::make_unique<TestIsolationContextMetrics>(); + metrics_ = new TestIsolationContextMetrics(); PerformanceManagerClock::SetClockForTesting(task_env().GetMockTickClock()); // Sets a valid starting time. task_env().FastForwardBy(base::TimeDelta::FromSeconds(1)); - graph()->RegisterObserver(metrics_.get()); + graph()->PassToGraph(base::WrapUnique(metrics_)); } void TearDown() override { - graph()->UnregisterObserver(metrics_.get()); PerformanceManagerClock::ResetClockForTesting(); } @@ -128,7 +127,7 @@ } base::HistogramTester histogram_tester_; - std::unique_ptr<TestIsolationContextMetrics> metrics_; + TestIsolationContextMetrics* metrics_; }; // static
diff --git a/chrome/browser/performance_manager/performance_manager.cc b/chrome/browser/performance_manager/performance_manager.cc index f7a54a0..3faf462 100644 --- a/chrome/browser/performance_manager/performance_manager.cc +++ b/chrome/browser/performance_manager/performance_manager.cc
@@ -17,7 +17,9 @@ #include "build/build_config.h" #include "chrome/browser/performance_manager/decorators/frozen_frame_aggregator.h" #include "chrome/browser/performance_manager/decorators/page_almost_idle_decorator.h" +#include "chrome/browser/performance_manager/graph/frame_node_impl.h" #include "chrome/browser/performance_manager/graph/page_node_impl.h" +#include "chrome/browser/performance_manager/graph/process_node_impl.h" #include "chrome/browser/performance_manager/graph/system_node_impl.h" #include "chrome/browser/performance_manager/observers/isolation_context_metrics.h" #include "chrome/browser/performance_manager/observers/metrics_collector.h" @@ -263,11 +265,11 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); graph_.PassToGraph(std::make_unique<FrozenFrameAggregator>()); + graph_.PassToGraph(std::make_unique<PageAlmostIdleDecorator>()); + graph_.PassToGraph(std::make_unique<IsolationContextMetrics>()); // Register new |GraphImplObserver| implementations here. RegisterObserver(std::make_unique<MetricsCollector>()); - RegisterObserver(std::make_unique<PageAlmostIdleDecorator>()); - RegisterObserver(std::make_unique<IsolationContextMetrics>()); #if defined(OS_WIN) if (base::FeatureList::IsEnabled(features::kEmptyWorkingSet))
diff --git a/chrome/browser/performance_manager/performance_manager_tab_helper_unittest.cc b/chrome/browser/performance_manager/performance_manager_tab_helper_unittest.cc index 4a7637e6..4eb43438 100644 --- a/chrome/browser/performance_manager/performance_manager_tab_helper_unittest.cc +++ b/chrome/browser/performance_manager/performance_manager_tab_helper_unittest.cc
@@ -76,21 +76,21 @@ FROM_HERE, base::BindLambdaForTesting([quit_closure, &process_nodes, num_hosts, grandchild_url](GraphImpl* graph) { - EXPECT_GE(num_hosts, graph->GetAllProcessNodes().size()); - EXPECT_EQ(4u, graph->GetAllFrameNodes().size()); + EXPECT_GE(num_hosts, graph->GetAllProcessNodeImpls().size()); + EXPECT_EQ(4u, graph->GetAllFrameNodeImpls().size()); // Expect all frame nodes to be current. This fails if our // implementation of RenderFrameHostChanged is borked. - for (auto* frame : graph->GetAllFrameNodes()) + for (auto* frame : graph->GetAllFrameNodeImpls()) EXPECT_TRUE(frame->is_current()); - ASSERT_EQ(1u, graph->GetAllPageNodes().size()); - auto* page = graph->GetAllPageNodes()[0]; + ASSERT_EQ(1u, graph->GetAllPageNodeImpls().size()); + auto* page = graph->GetAllPageNodeImpls()[0]; // Extra RPHs can and most definitely do exist. auto associated_process_nodes = GraphImplOperations::GetAssociatedProcessNodes(page); - EXPECT_GE(graph->GetAllProcessNodes().size(), + EXPECT_GE(graph->GetAllProcessNodeImpls().size(), associated_process_nodes.size()); EXPECT_GE(num_hosts, associated_process_nodes.size()); @@ -100,7 +100,7 @@ EXPECT_EQ(4u, GraphImplOperations::GetFrameNodes(page).size()); ASSERT_EQ(1u, page->main_frame_nodes().size()); - auto* main_frame = page->GetMainFrameNode(); + auto* main_frame = page->GetMainFrameNodeImpl(); EXPECT_EQ(kParentUrl, main_frame->url().spec()); EXPECT_EQ(2u, main_frame->child_frame_nodes().size()); @@ -179,9 +179,9 @@ PerformanceManager::GetInstance()->CallOnGraph( FROM_HERE, base::BindLambdaForTesting([num_hosts](GraphImpl* graph) { - EXPECT_GE(num_hosts, graph->GetAllProcessNodes().size()); - EXPECT_EQ(0u, graph->GetAllFrameNodes().size()); - ASSERT_EQ(0u, graph->GetAllPageNodes().size()); + EXPECT_GE(num_hosts, graph->GetAllProcessNodeImpls().size()); + EXPECT_EQ(0u, graph->GetAllFrameNodeImpls().size()); + ASSERT_EQ(0u, graph->GetAllPageNodeImpls().size()); })); thread_bundle()->RunUntilIdle();
diff --git a/chrome/browser/performance_manager/public/graph/graph.h b/chrome/browser/performance_manager/public/graph/graph.h index 0cc76500..efdb217 100644 --- a/chrome/browser/performance_manager/public/graph/graph.h +++ b/chrome/browser/performance_manager/public/graph/graph.h
@@ -15,9 +15,13 @@ class GraphObserver; class GraphOwned; +class FrameNode; class FrameNodeObserver; +class PageNode; class PageNodeObserver; +class ProcessNode; class ProcessNodeObserver; +class SystemNode; class SystemNodeObserver; // Represents a graph of the nodes representing a single browser. Maintains a @@ -60,6 +64,12 @@ static_cast<DerivedType*>(TakeFromGraph(graph_owned).release())); } + // Returns a collection of all known nodes of the given type. + virtual const SystemNode* FindOrCreateSystemNode() = 0; + virtual std::vector<const FrameNode*> GetAllFrameNodes() const = 0; + virtual std::vector<const PageNode*> GetAllPageNodes() const = 0; + virtual std::vector<const ProcessNode*> GetAllProcessNodes() const = 0; + // The following functions are implementation detail and should not need to be // used by external clients. They provide the ability to safely downcast to // the underlying implementation.
diff --git a/chrome/browser/performance_manager/public/graph/page_node.h b/chrome/browser/performance_manager/public/graph/page_node.h index 1b2e951..fa917912 100644 --- a/chrome/browser/performance_manager/public/graph/page_node.h +++ b/chrome/browser/performance_manager/public/graph/page_node.h
@@ -14,6 +14,7 @@ namespace performance_manager { +class FrameNode; class PageNodeObserver; // A PageNode represents the root of a FrameTree, or equivalently a WebContents. @@ -55,6 +56,11 @@ // See PageNodeObserver::OnMainFrameNavigationCommitted. virtual int64_t GetNavigationID() const = 0; + // Returns the current main frame node (if there is one), otherwise returns + // any of the potentially multiple main frames that currently exist. If there + // are no main frames at the moment, returns nullptr. + virtual const FrameNode* GetMainFrameNode() const = 0; + // Returns the URL the main frame last committed a navigation to. // See PageNodeObserver::OnMainFrameNavigationCommitted. virtual const GURL& GetMainFrameUrl() const = 0;
diff --git a/chrome/browser/performance_manager/webui_graph_dump_impl.cc b/chrome/browser/performance_manager/webui_graph_dump_impl.cc index 0f57d07..01c7775 100644 --- a/chrome/browser/performance_manager/webui_graph_dump_impl.cc +++ b/chrome/browser/performance_manager/webui_graph_dump_impl.cc
@@ -147,11 +147,11 @@ change_subscriber_ = std::move(change_subscriber); // Send creation notifications for all existing nodes and subscribe to them. - for (ProcessNodeImpl* process_node : graph_->GetAllProcessNodes()) { + for (ProcessNodeImpl* process_node : graph_->GetAllProcessNodeImpls()) { SendProcessNotification(process_node, true); process_node->AddObserver(this); } - for (PageNodeImpl* page_node : graph_->GetAllPageNodes()) { + for (PageNodeImpl* page_node : graph_->GetAllPageNodeImpls()) { SendPageNotification(page_node, true); StartPageFaviconRequest(page_node); page_node->AddObserver(this);
diff --git a/chrome/browser/performance_manager/webui_graph_dump_impl_unittest.cc b/chrome/browser/performance_manager/webui_graph_dump_impl_unittest.cc index e258a509..d0eff2b 100644 --- a/chrome/browser/performance_manager/webui_graph_dump_impl_unittest.cc +++ b/chrome/browser/performance_manager/webui_graph_dump_impl_unittest.cc
@@ -124,7 +124,7 @@ mock_graph.page->OnMainFrameNavigationCommitted(now, 1, kExampleUrl); mock_graph.other_page->OnMainFrameNavigationCommitted(now, 2, kExampleUrl); - auto* main_frame = mock_graph.page->GetMainFrameNode(); + auto* main_frame = mock_graph.page->GetMainFrameNodeImpl(); main_frame->OnNavigationCommitted(kExampleUrl, /* same_document */ false); WebUIGraphDumpImpl impl(&graph);
diff --git a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc index 73b7e5c..8febbdf 100644 --- a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc +++ b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
@@ -69,8 +69,8 @@ #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #endif using testing::AnyNumber;
diff --git a/chrome/browser/policy/cloud/cloud_policy_manager_browsertest.cc b/chrome/browser/policy/cloud/cloud_policy_manager_browsertest.cc index b16109b..22955a53 100644 --- a/chrome/browser/policy/cloud/cloud_policy_manager_browsertest.cc +++ b/chrome/browser/policy/cloud/cloud_policy_manager_browsertest.cc
@@ -35,8 +35,8 @@ #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #endif using content::BrowserThread;
diff --git a/chrome/browser/policy/cloud/component_cloud_policy_browsertest.cc b/chrome/browser/policy/cloud/component_cloud_policy_browsertest.cc index e858c62..901211d 100644 --- a/chrome/browser/policy/cloud/component_cloud_policy_browsertest.cc +++ b/chrome/browser/policy/cloud/component_cloud_policy_browsertest.cc
@@ -44,9 +44,9 @@ #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #endif using testing::InvokeWithoutArgs;
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.h b/chrome/browser/policy/cloud/user_policy_signin_service.h index 34e1333..bd0383b 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service.h +++ b/chrome/browser/policy/cloud/user_policy_signin_service.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_base.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class AccountId; class Profile;
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_base.h b/chrome/browser/policy/cloud/user_policy_signin_service_base.h index bfd825b..fcea9b30 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_base.h +++ b/chrome/browser/policy/cloud/user_policy_signin_service_base.h
@@ -16,9 +16,9 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/policy/core/common/cloud/cloud_policy_client.h" #include "components/policy/core/common/cloud/cloud_policy_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" -#include "services/identity/public/cpp/identity_manager.h" class AccountId; class PrefService;
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc b/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc index e250c90a..87da8c17 100644 --- a/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc +++ b/chrome/browser/policy/cloud/user_policy_signin_service_mobile.cc
@@ -20,9 +20,9 @@ #include "components/policy/core/common/policy_switches.h" #include "components/policy/proto/device_management_backend.pb.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "net/base/network_change_notifier.h" #include "net/url_request/url_request_context_getter.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace em = enterprise_management;
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 861dc88..718e84d 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -125,6 +125,7 @@ #include "components/safe_browsing/common/safe_browsing_prefs.h" #include "components/search_engines/template_url_prepopulate_data.h" #include "components/sessions/core/session_id_generator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/startup_metric_utils/browser/startup_metric_utils.h" #include "components/subresource_filter/content/browser/ruleset_service.h" #include "components/sync/base/sync_prefs.h" @@ -139,7 +140,6 @@ #include "ppapi/buildflags/buildflags.h" #include "printing/buildflags/buildflags.h" #include "rlz/buildflags/buildflags.h" -#include "services/identity/public/cpp/identity_manager.h" #if BUILDFLAG(ENABLE_APP_LIST) #include "chrome/browser/ui/app_list/app_list_syncable_service.h"
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc index 3a53cb3..b841302 100644 --- a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc +++ b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc
@@ -18,13 +18,13 @@ #include "chrome/browser/printing/cloud_print/gcd_constants.h" #include "chrome/common/cloud_print/cloud_print_constants.h" #include "components/cloud_devices/common/cloud_devices_urls.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/load_flags.h" #include "net/base/url_util.h" #include "net/http/http_status_code.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h index 34bddeb..689aaae2 100644 --- a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h +++ b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h
@@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/printing/cloud_print/gcd_api_flow.h" -#include "services/identity/public/cpp/access_token_info.h" +#include "components/signin/public/identity_manager/access_token_info.h" namespace identity { class PrimaryAccountAccessTokenFetcher;
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc b/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc index 655aa19..32a4651 100644 --- a/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc +++ b/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc
@@ -15,12 +15,12 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/values.h" #include "chrome/browser/printing/cloud_print/gcd_api_flow_impl.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_browser_thread_bundle.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/host_port_pair.h" #include "net/base/net_errors.h" #include "net/http/http_request_headers.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/browser/printing/cloud_print/privet_notifications.cc b/chrome/browser/printing/cloud_print/privet_notifications.cc index 07a78128..c5b912e 100644 --- a/chrome/browser/printing/cloud_print/privet_notifications.cc +++ b/chrome/browser/printing/cloud_print/privet_notifications.cc
@@ -34,12 +34,12 @@ #include "chrome/grit/generated_resources.h" #include "chrome/grit/theme_resources.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "net/net_buildflags.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/page_transition_types.h" #include "ui/base/resource/resource_bundle.h"
diff --git a/chrome/browser/profiles/gaia_info_update_service.h b/chrome/browser/profiles/gaia_info_update_service.h index c7f6e6b..4ea91688 100644 --- a/chrome/browser/profiles/gaia_info_update_service.h +++ b/chrome/browser/profiles/gaia_info_update_service.h
@@ -14,7 +14,7 @@ #include "chrome/browser/profiles/profile_downloader.h" #include "chrome/browser/profiles/profile_downloader_delegate.h" #include "components/keyed_service/core/keyed_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class Profile; class ProfileDownloader;
diff --git a/chrome/browser/profiles/profile_downloader.cc b/chrome/browser/profiles/profile_downloader.cc index 2d70220a..25059f1 100644 --- a/chrome/browser/profiles/profile_downloader.cc +++ b/chrome/browser/profiles/profile_downloader.cc
@@ -24,13 +24,13 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/avatar_icon_util.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "google_apis/gaia/gaia_constants.h" #include "net/base/load_flags.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/access_token_fetcher.h" #include "skia/ext/image_operations.h" #include "url/gurl.h"
diff --git a/chrome/browser/profiles/profile_downloader.h b/chrome/browser/profiles/profile_downloader.h index 1f8d0774..c59f14c 100644 --- a/chrome/browser/profiles/profile_downloader.h +++ b/chrome/browser/profiles/profile_downloader.h
@@ -14,7 +14,7 @@ #include "base/strings/string16.h" #include "chrome/browser/image_decoder.h" #include "components/signin/core/browser/account_info.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #include "third_party/skia/include/core/SkBitmap.h"
diff --git a/chrome/browser/profiles/profile_downloader_unittest.cc b/chrome/browser/profiles/profile_downloader_unittest.cc index 32f6f28..218b4e4 100644 --- a/chrome/browser/profiles/profile_downloader_unittest.cc +++ b/chrome/browser/profiles/profile_downloader_unittest.cc
@@ -13,9 +13,9 @@ #include "chrome/test/base/testing_profile.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/test/test_browser_thread_bundle.h" #include "net/url_request/test_url_fetcher_factory.h" -#include "services/identity/public/cpp/identity_manager.h" #include "testing/gtest/include/gtest/gtest.h" namespace {
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index 5e0ecea3..ec0022a 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -126,6 +126,7 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/url_formatter/url_fixer.h" #include "components/user_prefs/user_prefs.h" @@ -147,7 +148,6 @@ #include "ppapi/buildflags/buildflags.h" #include "printing/buildflags/buildflags.h" #include "services/identity/identity_service.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/mojom/constants.mojom.h" #include "services/image_annotation/image_annotation_service.h" #include "services/image_annotation/public/mojom/constants.mojom.h"
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index 3b33b3a..7c99b53 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -79,6 +79,8 @@ #include "components/prefs/scoped_user_pref_update.h" #include "components/search_engines/default_search_manager.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/base/stop_source.h" #include "components/sync/driver/sync_service.h" #include "content/public/browser/browser_task_traits.h" @@ -90,8 +92,6 @@ #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_job.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "ui/base/l10n/l10n_util.h" #if BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc index d6b2cf3..570e259 100644 --- a/chrome/browser/profiles/profile_window.cc +++ b/chrome/browser/profiles/profile_window.cc
@@ -42,10 +42,10 @@ #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_thread.h" #include "extensions/buildflags/buildflags.h" #include "net/base/escape.h" -#include "services/identity/public/cpp/identity_manager.h" #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/extension_service.h"
diff --git a/chrome/browser/profiles/profiles_state.cc b/chrome/browser/profiles/profiles_state.cc index 3fae064..3540193 100644 --- a/chrome/browser/profiles/profiles_state.cc +++ b/chrome/browser/profiles/profiles_state.cc
@@ -22,9 +22,9 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browsing_data_remover.h" #include "content/public/browser/resource_dispatcher_host.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #if !defined(OS_ANDROID)
diff --git a/chrome/browser/profiles/renderer_updater.h b/chrome/browser/profiles/renderer_updater.h index bb856ac..2ead3d0 100644 --- a/chrome/browser/profiles/renderer_updater.h +++ b/chrome/browser/profiles/renderer_updater.h
@@ -14,8 +14,8 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_member.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/variations/variations_http_header_provider.h" -#include "services/identity/public/cpp/identity_manager.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h"
diff --git a/chrome/browser/resources/chromeos/camera/src/js/models/filesystem.js b/chrome/browser/resources/chromeos/camera/src/js/models/filesystem.js index 6540ed4f..d6d8b4b 100644 --- a/chrome/browser/resources/chromeos/camera/src/js/models/filesystem.js +++ b/chrome/browser/resources/chromeos/camera/src/js/models/filesystem.js
@@ -273,18 +273,47 @@ }; /** - * Saves the picture into the external or internal file system. - * @param {Blob} blob Data of the picture to be saved. - * @param {string} filename Filename of the Picture to be saved. + * Saves photo blob into predefined default location. + * @param {Blob} blob Data of the photo to be saved. + * @param {string} filename Filename of the photo to be saved. * @return {!Promise<FileEntry>} Promise for the result. */ -cca.models.FileSystem.savePicture = function(blob, filename) { +cca.models.FileSystem.savePhoto = function(blob, filename) { var dir = cca.models.FileSystem.externalDir || cca.models.FileSystem.internalDir; return cca.models.FileSystem.saveToFile_(dir, filename, blob); }; /** + * Creates a file for saving temporary video recording result. + * @return {FileEntry} Newly created temporary file. + * @async + */ +cca.models.FileSystem.createTempVideoFile = async function() { + const dir = + cca.models.FileSystem.externalDir || cca.models.FileSystem.internalDir; + const filename = new cca.models.Filenamer().newVideoName(); + return await cca.models.FileSystem.getFile(dir, filename, true); +}; + +/** + * Saves temporary video file to predefined default location. + * @param {FileEntry} tempfile Temporary video file to be saved. + * @param {string} filename Filename to be saved. + * @return {FileEntry} Saved video file. + * @async + */ +cca.models.FileSystem.saveVideo = async function(tempfile, filename) { + var dir = + cca.models.FileSystem.externalDir || cca.models.FileSystem.internalDir; + // Assuming content of tempfile contains all recorded chunks appended together + // and is a well-formed video. The work needed here is just to move the file + // to the correct directory and rename as the specified filename. + return await new Promise( + (resolve, reject) => tempfile.moveTo(dir, filename, resolve, reject)); +}; + +/** * Creates a thumbnail from the picture. * @param {boolean} isVideo Picture is a video. * @param {string} url Picture as an URL.
diff --git a/chrome/browser/resources/chromeos/camera/src/js/models/gallery.js b/chrome/browser/resources/chromeos/camera/src/js/models/gallery.js index 365a0bd2..7e0efc86 100644 --- a/chrome/browser/resources/chromeos/camera/src/js/models/gallery.js +++ b/chrome/browser/resources/chromeos/camera/src/js/models/gallery.js
@@ -285,42 +285,56 @@ }; /** - * Saves a picture that will also be added to the pictures' model. - * @param {Blob} blob Data of the picture to be added. - * @param {boolean} isMotionPicture Picture to be added is a video. - * @param {string} filename Filename of picture to be added. + * Saves photo capture result into persistent storage and adds it into gallery. + * @param {Blob} blob Data of the photo to be added. + * @param {string} filename Filename of photo to be added. * @return {!Promise} Promise for the operation. */ -cca.models.Gallery.prototype.savePicture = function( - blob, isMotionPicture, filename) { +cca.models.Gallery.prototype.savePhoto = function(blob, filename) { // TODO(yuli): models.Gallery listens to models.FileSystem's file-added event // and then add a new picture into the model. var saved = new Promise((resolve) => { - if (isMotionPicture) { - resolve(blob); - } else { - // Ignore errors since it is better to save something than - // nothing. - // TODO(yuli): Support showing images by EXIF orientation - // instead. - cca.util.orientPhoto(blob, resolve, () => resolve(blob)); - } + // Ignore errors since it is better to save something than + // nothing. + // TODO(yuli): Support showing images by EXIF orientation + // instead. + cca.util.orientPhoto(blob, resolve, () => resolve(blob)); }) .then((blob) => { - return cca.models.FileSystem.savePicture(blob, filename); + return cca.models.FileSystem.savePhoto(blob, filename); }) .then((pictureEntry) => { return this.wrapPicture_(pictureEntry); }); - return Promise.all([this.loaded_, saved]).then(([pictures, picture]) => { - // Insert the picture into the sorted pictures' model. - for (var index = pictures.length - 1; index >= 0; index--) { - if (picture.timestamp >= pictures[index].timestamp) { - break; - } + return saved.then((picture) => this.addPicture_(picture)); +}; + +/** + * Saves video capture result into persistent storage and adds it into gallery. + * @param {FileEntry} tempfile File saving temporary video recording result. + * @param {string} filename Filename of picture to be added. + */ +cca.models.Gallery.prototype.saveVideo = async function(tempfile, filename) { + const savedFile = await cca.models.FileSystem.saveVideo(tempfile, filename); + const picture = await this.wrapPicture_(savedFile); + await this.addPicture_(picture); +}; + +/** + * Adds a picture into gallery. + * @param {cca.models.Gallery.Picture} picture Picture to be added. + * @async + * @private + */ +cca.models.Gallery.prototype.addPicture_ = async function(picture) { + const pictures = await this.loaded_; + // Insert the picture into the sorted pictures' model. + for (var index = pictures.length - 1; index >= 0; index--) { + if (picture.timestamp >= pictures[index].timestamp) { + break; } - pictures.splice(index + 1, 0, picture); - this.notifyObservers_('onPictureAdded', picture); - }); + } + pictures.splice(index + 1, 0, picture); + this.notifyObservers_('onPictureAdded', picture); };
diff --git a/chrome/browser/resources/chromeos/camera/src/js/views/camera.js b/chrome/browser/resources/chromeos/camera/src/js/views/camera.js index 921699fdb..ed5f6be 100644 --- a/chrome/browser/resources/chromeos/camera/src/js/views/camera.js +++ b/chrome/browser/resources/chromeos/camera/src/js/views/camera.js
@@ -83,18 +83,28 @@ */ this.modes_ = new cca.views.camera.Modes( this.photoResolPreferrer_, this.videoPreferrer_, this.stop_.bind(this), - async (blob, isMotionPicture, filename) => { - if (blob) { + async (result, filename) => { + if (result.blob) { cca.metrics.log( - cca.metrics.Type.CAPTURE, this.facingMode_, blob.mins, - blob.resolution); + cca.metrics.Type.CAPTURE, this.facingMode_, 0, result.resolution); try { - await this.model_.savePicture(blob, isMotionPicture, filename); + await this.model_.savePhoto(result.blob, filename); } catch (e) { cca.toast.show('error_msg_save_file_failed'); throw e; } } + }, + async (result, filename) => { + cca.metrics.log( + cca.metrics.Type.CAPTURE, this.facingMode_, result.duration, + result.resolution); + try { + await this.model_.saveVideo(result.chunkfile, filename); + } catch (e) { + cca.toast.show('error_msg_save_file_failed'); + throw e; + } }); /**
diff --git a/chrome/browser/resources/chromeos/camera/src/js/views/camera/modes.js b/chrome/browser/resources/chromeos/camera/src/js/views/camera/modes.js index 5d922ef9..26a0581 100644 --- a/chrome/browser/resources/chromeos/camera/src/js/views/camera/modes.js +++ b/chrome/browser/resources/chromeos/camera/src/js/views/camera/modes.js
@@ -20,16 +20,81 @@ cca.views.camera = cca.views.camera || {}; /** + * Callback for saving photo capture result. It's called with parameter of photo + * capture result and filename to be saved to. + * @typedef {function(cca.views.camera.PhotoResult, string): Promise} + * DoSavePhoto + */ + +/** + * Callback for saving video capture result. It's called with parameter of video + * capture result and filename to be saved to. + * @typedef {function(cca.views.camera.VideoResult, string): Promise} + * DoSaveVideo + */ + +/** + * Object contains video recording result. + * @param {number} width Resolution width of the video. + * @param {number} height Resolution height of the video. + * @param {number} duration Recorded time in minutes. + * @param {FileEntry} chunkfile File saving recorded chunks. + * @constructor + */ +cca.views.camera.VideoResult = function(width, height, duration, chunkfile) { + /** + * @type {[number, number]} Resolution of the video. + */ + this.resolution = [width, height]; + + /** + * @type {number} + */ + this.duration = duration; + + /** + * @type {FileEntry} + */ + this.chunkfile = chunkfile; + + // End of properties, seal the object. + Object.seal(this); +}; + +/** + * Object contains photo taking result. + * @param {number} width Resolution width of the photo. + * @param {number} height Resolution height of the photo. + * @param {?Blob} blob Blob saving photo result. + * @constructor + */ +cca.views.camera.PhotoResult = function(width, height, blob) { + /** + * @type {[number, number]} Resolution of the photo. + */ + this.resolution = [width, height]; + + /** + * @type {?Blob} + */ + this.blob = blob; + + // End of properties, seal the object. + Object.seal(this); +}; + +/** * Mode controller managing capture sequence of different camera mode. * @param {cca.views.camera.PhotoResolPreferrer} photoResolPreferrer * @param {cca.views.camera.VideoConstraintsPreferrer} videoPreferrer * @param {function()} doSwitchMode Callback to trigger mode switching. - * @param {function(?Blob, boolean, string): Promise} doSavePicture Callback for - * saving picture. + * @param {DoSavePhoto} doSavePhoto + * @param {DoSaveVideo} doSaveVideo * @constructor */ cca.views.camera.Modes = function( - photoResolPreferrer, videoPreferrer, doSwitchMode, doSavePicture) { + photoResolPreferrer, videoPreferrer, doSwitchMode, doSavePhoto, + doSaveVideo) { /** * @type {function()} * @private @@ -37,13 +102,6 @@ this.doSwitchMode_ = doSwitchMode; /** - * Callback for saving picture. - * @type {function(?Blob, boolean, string): Promise} - * @private - */ - this.doSavePicture_ = doSavePicture; - - /** * Capture controller of current camera mode. * @type {cca.views.camera.Mode} */ @@ -76,7 +134,7 @@ this.allModes_ = { 'video-mode': { captureFactory: () => - new cca.views.camera.Video(this.stream_, this.doSavePicture_), + new cca.views.camera.Video(this.stream_, doSaveVideo), isSupported: async () => true, resolutionConfig: videoPreferrer, v1Config: cca.views.camera.Modes.getV1Constraints.bind(this, true), @@ -84,7 +142,7 @@ }, 'photo-mode': { captureFactory: () => new cca.views.camera.Photo( - this.stream_, this.doSavePicture_, this.captureResolution_), + this.stream_, doSavePhoto, this.captureResolution_), isSupported: async () => true, resolutionConfig: photoResolPreferrer, v1Config: cca.views.camera.Modes.getV1Constraints.bind(this, false), @@ -92,7 +150,7 @@ }, 'square-mode': { captureFactory: () => new cca.views.camera.Square( - this.stream_, this.doSavePicture_, this.captureResolution_), + this.stream_, doSavePhoto, this.captureResolution_), isSupported: async () => true, resolutionConfig: photoResolPreferrer, v1Config: cca.views.camera.Modes.getV1Constraints.bind(this, false), @@ -100,7 +158,7 @@ }, 'portrait-mode': { captureFactory: () => new cca.views.camera.Portrait( - this.stream_, this.doSavePicture_, this.captureResolution_), + this.stream_, doSavePhoto, this.captureResolution_), isSupported: async (stream) => { try { const imageCapture = @@ -306,12 +364,11 @@ /** * Base class for controlling capture sequence in different camera modes. * @param {MediaStream} stream - * @param {function(?Blob, boolean, string): Promise} doSavePicture * @param {?[number, number]} captureResolution Capturing resolution width and * height. * @constructor */ -cca.views.camera.Mode = function(stream, doSavePicture, captureResolution) { +cca.views.camera.Mode = function(stream, captureResolution) { /** * Stream of current mode. * @type {?Promise} @@ -320,13 +377,6 @@ this.stream_ = stream; /** - * Callback for saving picture. - * @type {function(?Blob, boolean, string): Promise} - * @protected - */ - this.doSavePicture_ = doSavePicture; - - /** * Width, height of capture resolution. May be null on device not supporting * setting resolution. * @type {?[number, number]} @@ -364,7 +414,7 @@ }; /** - * Initiates video/photo capturing operation under this mode. + * Initiates video/photo capture operation under this mode. * @async * @protected */ @@ -379,11 +429,18 @@ /** * Video mode capture controller. * @param {MediaStream} stream - * @param {function(?Blob, boolean, string): Promise} doSavePicture + * @param {DoSaveVideo} doSaveVideo * @constructor */ -cca.views.camera.Video = function(stream, doSavePicture) { - cca.views.camera.Mode.call(this, stream, doSavePicture, null); +cca.views.camera.Video = function(stream, doSaveVideo) { + cca.views.camera.Mode.call(this, stream, null); + + /** + * Callback for saving video. + * @type {DoSaveVideo} doSaveVideo + * @protected + */ + this.doSaveVideo_ = doSaveVideo; /** * Promise for play start sound delay. @@ -439,18 +496,21 @@ } } - let blob; - // Take of recording will be ended by another shutter click. + this.recordTime_.start(); try { - blob = await this.createVideoBlob_(); + var chunkfile = await this.createChunkfile_(); } catch (e) { cca.toast.show('error_msg_empty_recording'); throw e; + } finally { + var duration = this.recordTime_.stop(); } cca.sound.play('#sound-rec-end'); - await this.doSavePicture_( - blob, true, (new cca.models.Filenamer()).newVideoName()); + const {width, height} = this.stream_.getVideoTracks()[0].getSettings(); + await this.doSaveVideo_( + new cca.views.camera.VideoResult(width, height, duration, chunkfile), + (new cca.models.Filenamer()).newVideoName()); }; /** @@ -474,62 +534,72 @@ cca.views.camera.Video.VIDEO_MIMETYPE = 'video/x-matroska;codecs=avc1'; /** - * Starts a recording to create a blob of it after the recorder is stopped. - * @return {!Promise<!Blob>} Promise for the result. + * Starts recording and waits for stop recording event triggered by stop + * shutter. + * @return {FileEntry} File saving recorded chunks. + * @async * @private */ -cca.views.camera.Video.prototype.createVideoBlob_ = function() { - return new Promise((resolve, reject) => { - var recordedChunks = []; +cca.views.camera.Video.prototype.createChunkfile_ = async function() { + const chunkfile = await cca.models.FileSystem.createTempVideoFile(); + const writer = await new Promise( + (resolve, reject) => chunkfile.createWriter(resolve, reject)); + + return await new Promise((resolve, reject) => { + let noChunk = true; + let prevWrite = Promise.resolve(); + var ondataavailable = (event) => { - // TODO(yuli): Handle insufficient storage. if (event.data && event.data.size > 0) { - recordedChunks.push(event.data); + noChunk = false; + prevWrite = (async () => { + await prevWrite; + await new Promise((resolve) => { + writer.onwriteend = resolve; + writer.write(event.data); + }); + })(); } }; var onstop = (event) => { this.mediaRecorder_.removeEventListener('dataavailable', ondataavailable); this.mediaRecorder_.removeEventListener('stop', onstop); - var recordedBlob = new Blob( - recordedChunks, {type: cca.views.camera.Video.VIDEO_MIMETYPE}); - recordedBlob.mins = this.recordTime_.stop(); - const {width, height} = this.stream_.getVideoTracks()[0].getSettings(); - recordedBlob.resolution = [width, height]; - recordedChunks = []; - if (recordedBlob.size) { - resolve(recordedBlob); - } else { - reject(new Error('Video blob error.')); - } + prevWrite.then(() => { + if (noChunk) { + reject(new Error('Video blob error.')); + } else { + resolve(chunkfile); + } + }); + + prevWrite.catch( + (e) => { + // TODO(yuli): Handle insufficient storage. + }); }; this.mediaRecorder_.addEventListener('dataavailable', ondataavailable); this.mediaRecorder_.addEventListener('stop', onstop); - - // Start recording and update the UI for the ongoing recording. - // TODO(yuli): Don't re-enable audio after crbug.com/878255 fixed in M73. - var track = this.stream_.getAudioTracks()[0]; - var enableAudio = (enabled) => { - if (track) { - track.enabled = enabled; - } - }; - enableAudio(true); - this.mediaRecorder_.start(); - enableAudio(cca.state.get('mic')); - this.recordTime_.start(); + this.mediaRecorder_.start(3000); }); }; /** * Photo mode capture controller. * @param {MediaStream} stream - * @param {function(?Blob, boolean, string): Promise} doSavePicture + * @param {DoSavePhoto} doSavePhoto * @param {?[number, number]} captureResolution * @constructor */ -cca.views.camera.Photo = function(stream, doSavePicture, captureResolution) { - cca.views.camera.Mode.call(this, stream, doSavePicture, captureResolution); +cca.views.camera.Photo = function(stream, doSavePhoto, captureResolution) { + cca.views.camera.Mode.call(this, stream, captureResolution); + + /** + * Callback for saving picture. + * @type {DoSavePhoto} + * @protected + */ + this.doSavePhoto_ = doSavePhoto; /** * ImageCapture object to capture still photos. @@ -556,25 +626,23 @@ } } - let blob; try { - blob = await this.createPhotoBlob_(); + var result = await this.createPhotoResult_(); } catch (e) { cca.toast.show('error_msg_take_photo_failed'); throw e; } cca.sound.play('#sound-shutter'); - await this.doSavePicture_( - blob, false, (new cca.models.Filenamer()).newImageName()); + await this.doSavePhoto_(result, (new cca.models.Filenamer()).newImageName()); }; /** - * Takes a photo to create a blob of it. + * Takes a photo and returns capture result. * @async - * @return {!Promise<!Blob>} Result blob. + * @return {cca.views.camera.PhotoResult} Image capture result. * @private */ -cca.views.camera.Photo.prototype.createPhotoBlob_ = async function() { +cca.views.camera.Photo.prototype.createPhotoResult_ = async function() { if (this.captureResolution_) { var photoSettings = { imageWidth: this.captureResolution_[0], @@ -589,35 +657,34 @@ } const blob = await this.imageCapture_.takePhoto(photoSettings); const image = await cca.util.blobToImage(blob); - blob.resolution = [image.width, image.height]; - return blob; + return new cca.views.camera.PhotoResult(image.width, image.height, blob); }; /** * Square mode capture controller. * @param {MediaStream} stream - * @param {function(?Blob, boolean, string): Promise} doSavePicture + * @param {DoSavePhoto} doSavePhoto * @param {?[number, number]} captureResolution * @constructor */ -cca.views.camera.Square = function(stream, doSavePicture, captureResolution) { - cca.views.camera.Photo.call(this, stream, doSavePicture, captureResolution); +cca.views.camera.Square = function(stream, doSavePhoto, captureResolution) { + cca.views.camera.Photo.call(this, stream, doSavePhoto, captureResolution); /** - * Picture saving callback from parent. - * @type {function(?Blob, boolean, string): Promise} + * Photo saving callback from parent. + * @type {DoSavePhoto} * @private */ - this.doAscentSave_ = this.doSavePicture_; + this.doAscentSave_ = this.doSavePhoto_; // End of properties, seal the object. Object.seal(this); - this.doSavePicture_ = async (blob, ...args) => { - if (blob) { - blob = await this.cropSquare(blob); + this.doSavePhoto_ = async (result, ...args) => { + if (result.blob) { + result.blob = await this.cropSquare(result.blob); } - await this.doAscentSave_(blob, ...args); + await this.doAscentSave_(result, ...args); }; }; @@ -651,12 +718,12 @@ /** * Portrait mode capture controller. * @param {MediaStream} stream - * @param {function(?Blob, boolean): Promise} doSavePicture + * @param {DoSavePhoto} doSavePhoto * @param {?[number, number]} captureResolution * @constructor */ -cca.views.camera.Portrait = function(stream, doSavePicture, captureResolution) { - cca.views.camera.Mode.call(this, stream, doSavePicture, captureResolution); +cca.views.camera.Portrait = function(stream, doSavePhoto, captureResolution) { + cca.views.camera.Photo.call(this, stream, doSavePhoto, captureResolution); /** * ImageCapture object to capture still photos. @@ -670,7 +737,7 @@ }; cca.views.camera.Portrait.prototype = { - __proto__: cca.views.camera.Mode.prototype, + __proto__: cca.views.camera.Photo.prototype, }; /** @@ -717,13 +784,14 @@ 'error_msg_take_photo_failed'); throw e; } - const image = await cca.util.blobToImage(blob); - blob.resolution = [image.width, image.height]; if (!playSound) { playSound = true; cca.sound.play('#sound-shutter'); } - await this.doSavePicture_(blob, true, filenamer.newBurstName(!isPortrait)); + const image = await cca.util.blobToImage(blob); + await this.doSavePhoto_( + new cca.views.camera.PhotoResult(image.width, image.height, blob), + filenamer.newBurstName(!isPortrait)); }); try { await portraitSave;
diff --git a/chrome/browser/resources/chromeos/login/enterprise_enrollment.html b/chrome/browser/resources/chromeos/login/enterprise_enrollment.html index c03d5bb..e36297e0 100644 --- a/chrome/browser/resources/chromeos/login/enterprise_enrollment.html +++ b/chrome/browser/resources/chromeos/login/enterprise_enrollment.html
@@ -52,7 +52,9 @@ </div> <div slot="bottom-buttons" class="flex layout horizontal center self-start"> - <oobe-back-button id="oobe-signin-back-button"></oobe-back-button> + <oobe-back-button id="oobe-signin-back-button" + disabled="[[authenticatorDialogDisplayed_]]" + on-click="onBackButtonClicked_"></oobe-back-button> </div> </oobe-dialog> </div> @@ -118,7 +120,8 @@ i18n-values="alt:enrollmentSuccessIllustrationTitle"> </div> <div slot="bottom-buttons" class="layout horizontal end-justified"> - <oobe-text-button inverse id="enroll-success-done-button" + <oobe-text-button inverse id="success-done-button" + on-tap="onEnrollmentFinished_" class="focus-on-show"> <div i18n-content="oauthEnrollDone"></div> </oobe-text-button> @@ -154,12 +157,12 @@ </gaia-input> </div> <div slot="bottom-buttons" class="layout horizontal end-justified"> - <oobe-text-button id="enroll-attributes-skip-button"> + <oobe-text-button id="attributes-skip" on-tap="skipAttributes_"> <div i18n-content="oauthEnrollSkip"></div> </oobe-text-button> <div class="flex"></div> - <oobe-next-button - id="enroll-attributes-submit-button"></oobe-next-button> + <oobe-next-button id="attributes-submit" + on-tap="submitAttributes_"></oobe-next-button> </div> </oobe-dialog> </div> @@ -167,6 +170,8 @@ <div id="oauth-saml-notice-container"> <span id="oauth-saml-notice-message"></span> </div> - <navigation-bar id="oauth-enroll-navigation"></navigation-bar> + <navigation-bar id="oauth-enroll-navigation" + disabled="[[authenticatorDialogDisplayed_]]" + on-close="cancel" on-refresh="cancel"></navigation-bar> </template> </dom-module>
diff --git a/chrome/browser/resources/chromeos/login/enterprise_enrollment.js b/chrome/browser/resources/chromeos/login/enterprise_enrollment.js index 7f550abf..477449d 100644 --- a/chrome/browser/resources/chromeos/login/enterprise_enrollment.js +++ b/chrome/browser/resources/chromeos/login/enterprise_enrollment.js
@@ -60,6 +60,14 @@ }, /** + * Indicates if authenticator have shown internal dialog. + */ + authenticatorDialogDisplayed_: { + type: Boolean, + value: false, + }, + + /** * Domain the device was enrolled to. */ enrolledDomain_: { @@ -223,15 +231,13 @@ this.authenticator_.addEventListener( 'dialogShown', (function(e) { - this.navigation_.disabled = true; - this.$['oobe-signin-back-button'].disabled = true; + this.authenticatorDialogDisplayed_ = true; // TODO(alemate): update the visual style. }).bind(this)); this.authenticator_.addEventListener( 'dialogHidden', (function(e) { - this.navigation_.disabled = false; - this.$['oobe-signin-back-button'].disabled = false; + this.authenticatorDialogDisplayed_ = false; // TODO(alemate): update the visual style. }).bind(this)); @@ -248,21 +254,6 @@ loadTimeData.getString('fatalEnrollmentError'), false); }).bind(this); - this.$['enroll-success-done-button'] - .addEventListener('tap', this.onEnrollmentFinished_.bind(this)); - - this.$['enroll-attributes-skip-button'] - .addEventListener('tap', this.onSkipButtonClicked.bind(this)); - this.$['enroll-attributes-submit-button'] - .addEventListener('tap', this.onAttributesSubmitted.bind(this)); - - this.navigation_.addEventListener('close', this.cancel.bind(this)); - this.navigation_.addEventListener('refresh', this.cancel.bind(this)); - - this.$['oobe-signin-back-button'].addEventListener( - 'click', this.onBackButtonClicked_.bind(this)); - - this.$['oauth-enroll-learn-more-link'] .addEventListener('click', function(event) { chrome.send('oauthEnrollOnLearnMore'); @@ -317,7 +308,7 @@ 'mode-' + modes[i], data.enrollment_mode == modes[i]); } this.isManualEnrollment_ = data.enrollment_mode === 'manual'; - this.navigation_.disabled = false; + this.authenticatorDialogDisplayed_ = false; this.offlineAdUi_.onBeforeShow(); if (!this.currentStep_) { @@ -449,6 +440,7 @@ doReload: function() { this.lastBackMessageValue_ = false; + this.authenticatorDialogDisplayed_ = false; this.authenticator_.reload(); this.updateControlsState(); }, @@ -493,11 +485,20 @@ * Skips the device attribute update, * shows the successful enrollment step. */ - onSkipButtonClicked: function() { + skipAttributes_: function() { this.showStep(ENROLLMENT_STEP.SUCCESS); }, /** + * Uploads the device attributes to server. This goes to C++ side through + * |chrome| and launches the device attribute update negotiation. + */ + submitAttributes_: function() { + this.screen.onAttributesEntered_(this.$['oauth-enroll-asset-id'].value, + this.$['oauth-enroll-location'].value); + }, + + /** * Skips the device attribute update, * shows the successful enrollment step. */ @@ -512,16 +513,6 @@ } }, - - /** - * Uploads the device attributes to server. This goes to C++ side through - * |chrome| and launches the device attribute update negotiation. - */ - onAttributesSubmitted: function() { - this.screen.onAttributesEntered_(this.$['oauth-enroll-asset-id'].value, - this.$['oauth-enroll-location'].value); - }, - /** * Returns true if we are at the begging of enrollment flow (i.e. the email * page).
diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn index c11f85d..f2b1e4bc 100644 --- a/chrome/browser/safe_browsing/BUILD.gn +++ b/chrome/browser/safe_browsing/BUILD.gn
@@ -36,10 +36,10 @@ "//components/safe_browsing/web_ui", "//components/search_engines", "//components/sessions", + "//components/signin/public/identity_manager", "//components/url_formatter", "//mojo/public/cpp/platform", "//mojo/public/cpp/system", - "//services/identity/public/cpp", "//services/preferences/public/cpp", ] @@ -259,8 +259,8 @@ "//components/safe_browsing/common", "//components/safe_browsing/common:safe_browsing_prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//content/public/browser", - "//services/identity/public/cpp", ] }
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc index e6aca9e..313d64e6 100644 --- a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc +++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
@@ -13,12 +13,12 @@ #include "components/prefs/pref_service.h" #include "components/safe_browsing/common/safe_browsing_prefs.h" #include "components/safe_browsing/features.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/oauth2_id_token_decoder.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" using content::BrowserThread;
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.h b/chrome/browser/safe_browsing/advanced_protection_status_manager.h index fd6db9b..fda7e092 100644 --- a/chrome/browser/safe_browsing/advanced_protection_status_manager.h +++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.h
@@ -8,8 +8,8 @@ #include "base/timer/timer.h" #include "components/keyed_service/core/keyed_service.h" #include "components/signin/core/browser/account_info.h" -#include "services/identity/public/cpp/access_token_info.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace identity { class PrimaryAccountAccessTokenFetcher;
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc index c13b2bd..31a75d5 100644 --- a/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc +++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
@@ -13,8 +13,8 @@ #include "chrome/test/base/testing_profile.h" #include "components/prefs/pref_service.h" #include "components/safe_browsing/common/safe_browsing_prefs.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/accounts_mutator.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index e16eae3..deef656 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -51,6 +51,7 @@ #include "components/safe_browsing/verdict_cache_manager.h" #include "components/safe_browsing/web_ui/safe_browsing_ui.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "components/sync/protocol/user_event_specifics.pb.h" @@ -63,7 +64,6 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/geometry/size.h" #include "url/gurl.h"
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service_browsertest.cc b/chrome/browser/safe_browsing/chrome_password_protection_service_browsertest.cc index e087691..9cd98cd 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service_browsertest.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service_browsertest.cc
@@ -27,11 +27,11 @@ #include "components/safe_browsing/password_protection/password_protection_request.h" #include "components/security_state/core/security_state.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/user_manager/user_names.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gmock/include/gmock/gmock.h" namespace {
diff --git a/chrome/browser/safe_xml_parser_browsertest.cc b/chrome/browser/safe_xml_parser_browsertest.cc index 1ad4bfb78..c5cdc3b 100644 --- a/chrome/browser/safe_xml_parser_browsertest.cc +++ b/chrome/browser/safe_xml_parser_browsertest.cc
@@ -100,7 +100,13 @@ } // Tests that a new service is created for each SafeXmlParser::Parse() call. -IN_PROC_BROWSER_TEST_F(SafeXmlParserTest, Isolation) { +// Flaky on ChromeOS. See https://crbug.com/979606 +#if defined(OS_CHROMEOS) +#define MAYBE_Isolation DISABLED_Isolation +#else +#define MAYBE_Isolation Isolation +#endif +IN_PROC_BROWSER_TEST_F(SafeXmlParserTest, MAYBE_Isolation) { constexpr size_t kParseCount = 5; for (size_t i = 0; i < kParseCount; i++) TestParse(kTestXml, kTestJson);
diff --git a/chrome/browser/search/background/ntp_background_service.h b/chrome/browser/search/background/ntp_background_service.h index 64a7163..c8a8c31f 100644 --- a/chrome/browser/search/background/ntp_background_service.h +++ b/chrome/browser/search/background/ntp_background_service.h
@@ -15,8 +15,8 @@ #include "chrome/browser/search/background/ntp_background_data.h" #include "chrome/browser/search/background/ntp_background_service_observer.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "net/base/url_util.h" -#include "services/identity/public/cpp/access_token_info.h" #include "url/gurl.h" namespace network {
diff --git a/chrome/browser/search/one_google_bar/one_google_bar_service.cc b/chrome/browser/search/one_google_bar/one_google_bar_service.cc index 43cba45e..a25911e0 100644 --- a/chrome/browser/search/one_google_bar/one_google_bar_service.cc +++ b/chrome/browser/search/one_google_bar/one_google_bar_service.cc
@@ -9,7 +9,7 @@ #include "base/bind.h" #include "base/callback.h" #include "chrome/browser/search/one_google_bar/one_google_bar_loader.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class OneGoogleBarService::SigninObserver : public identity::IdentityManager::Observer {
diff --git a/chrome/browser/search/one_google_bar/one_google_bar_service_unittest.cc b/chrome/browser/search/one_google_bar/one_google_bar_service_unittest.cc index 4c2fc24d..ed5d793 100644 --- a/chrome/browser/search/one_google_bar/one_google_bar_service_unittest.cc +++ b/chrome/browser/search/one_google_bar/one_google_bar_service_unittest.cc
@@ -13,7 +13,7 @@ #include "base/test/scoped_task_environment.h" #include "chrome/browser/search/one_google_bar/one_google_bar_data.h" #include "chrome/browser/search/one_google_bar/one_google_bar_loader.h" -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/search/promos/promo_service_unittest.cc b/chrome/browser/search/promos/promo_service_unittest.cc index 4f2cb64d..c09487c73 100644 --- a/chrome/browser/search/promos/promo_service_unittest.cc +++ b/chrome/browser/search/promos/promo_service_unittest.cc
@@ -12,10 +12,10 @@ #include "base/test/scoped_task_environment.h" #include "chrome/browser/search/promos/promo_data.h" #include "components/google/core/browser/google_url_tracker.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_service_manager_context.h" #include "services/data_decoder/public/cpp/testing_json_parser.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_network_connection_tracker.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/search/search_suggest/search_suggest_service.cc b/chrome/browser/search/search_suggest/search_suggest_service.cc index 1ef624a..f24cc58 100644 --- a/chrome/browser/search/search_suggest/search_suggest_service.cc +++ b/chrome/browser/search/search_suggest/search_suggest_service.cc
@@ -15,7 +15,7 @@ #include "chrome/browser/search/search_suggest/search_suggest_loader.h" #include "chrome/common/pref_names.h" #include "components/prefs/scoped_user_pref_update.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "third_party/re2/src/re2/re2.h" namespace {
diff --git a/chrome/browser/search/search_suggest/search_suggest_service_unittest.cc b/chrome/browser/search/search_suggest/search_suggest_service_unittest.cc index efa130c1..99df26e 100644 --- a/chrome/browser/search/search_suggest/search_suggest_service_unittest.cc +++ b/chrome/browser/search/search_suggest/search_suggest_service_unittest.cc
@@ -19,9 +19,9 @@ #include "chrome/test/base/search_test_utils.h" #include "components/search_engines/template_url_service.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/search/suggestions/suggestions_service_factory.cc b/chrome/browser/search/suggestions/suggestions_service_factory.cc index 85aae2c3..f61a8b8c4 100644 --- a/chrome/browser/search/suggestions/suggestions_service_factory.cc +++ b/chrome/browser/search/suggestions/suggestions_service_factory.cc
@@ -16,6 +16,7 @@ #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/suggestions/blacklist_store.h" #include "components/suggestions/proto/suggestions.pb.h" #include "components/suggestions/suggestions_service_impl.h" @@ -23,7 +24,6 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" -#include "services/identity/public/cpp/identity_manager.h" using content::BrowserThread;
diff --git a/chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.cc b/chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.cc new file mode 100644 index 0000000..75b7015 --- /dev/null +++ b/chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.cc
@@ -0,0 +1,20 @@ +// Copyright 2019 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/sharing/click_to_call/click_to_call_message_handler_android.h" + +#include "base/android/jni_string.h" +#include "base/logging.h" +#include "chrome/android/chrome_jni_headers/ClickToCallMessageHandler_jni.h" +#include "chrome/browser/sharing/proto/click_to_call_message.pb.h" + +void ClickToCallMessageHandler::OnMessage( + const chrome_browser_sharing::SharingMessage& message) { + DCHECK(message.has_click_to_call_message()); + std::string phone_number = message.click_to_call_message().phone_number(); + JNIEnv* env = base::android::AttachCurrentThread(); + + Java_ClickToCallMessageHandler_showNotification( + env, base::android::ConvertUTF8ToJavaString(env, phone_number)); +}
diff --git a/chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.h b/chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.h new file mode 100644 index 0000000..813d3f7 --- /dev/null +++ b/chrome/browser/sharing/click_to_call/click_to_call_message_handler_android.h
@@ -0,0 +1,25 @@ +// Copyright 2019 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_SHARING_CLICK_TO_CALL_CLICK_TO_CALL_MESSAGE_HANDLER_ANDROID_H_ +#define CHROME_BROWSER_SHARING_CLICK_TO_CALL_CLICK_TO_CALL_MESSAGE_HANDLER_ANDROID_H_ + +#include "base/macros.h" +#include "chrome/browser/sharing/proto/sharing_message.pb.h" +#include "chrome/browser/sharing/sharing_message_handler.h" + +// Handles incoming messages for the click to call feature. +class ClickToCallMessageHandler : public SharingMessageHandler { + public: + ~ClickToCallMessageHandler() override = default; + + // SharingMessageHandler + void OnMessage( + const chrome_browser_sharing::SharingMessage& message) override; + + private: + DISALLOW_COPY_AND_ASSIGN(ClickToCallMessageHandler); +}; + +#endif // CHROME_BROWSER_SHARING_CLICK_TO_CALL_CLICK_TO_CALL_MESSAGE_HANDLER_ANDROID_H_
diff --git a/chrome/browser/sharing/sharing_device_info.h b/chrome/browser/sharing/sharing_device_info.h index 4f40303..963e387 100644 --- a/chrome/browser/sharing/sharing_device_info.h +++ b/chrome/browser/sharing/sharing_device_info.h
@@ -10,8 +10,12 @@ #include "base/macros.h" #include "base/time/time.h" -// Capabilities of which a device can perform. -enum class SharingDeviceCapability { kNone = 0 }; +// Capabilities which a device can perform. These are stored in sync preferences +// when the device is registered, and the values should never be changed. When +// adding a new capability, the value should be '1 << (NEXT_FREE_BIT_ID)' and +// NEXT_FREE_BIT_ID should be incremented by one. +// NEXT_FREE_BIT_ID: 1 +enum class SharingDeviceCapability { kNone = 0, kTelephony = 1 << 0 }; // A class that holds information regarding the properties of a device. class SharingDeviceInfo {
diff --git a/chrome/browser/sharing/sharing_device_registration.cc b/chrome/browser/sharing/sharing_device_registration.cc index 3084725..a4390aa 100644 --- a/chrome/browser/sharing/sharing_device_registration.cc +++ b/chrome/browser/sharing/sharing_device_registration.cc
@@ -21,6 +21,10 @@ #include "components/sync_device_info/local_device_info_provider.h" #include "crypto/ec_private_key.h" +#if defined(ANDROID_OS) +#include "chrome/android/chrome_jni_headers/SharingJNIBridge_jni.h" +#endif + SharingDeviceRegistration::SharingDeviceRegistration( SharingSyncPreference* sharing_sync_preference, instance_id::InstanceIDDriver* instance_id_driver, @@ -98,5 +102,18 @@ int SharingDeviceRegistration::GetDeviceCapabilities() const { int device_capabilities = static_cast<int>(SharingDeviceCapability::kNone); + if (IsTelephonySupported()) { + device_capabilities |= + static_cast<int>(SharingDeviceCapability::kTelephony); + } return device_capabilities; } + +bool SharingDeviceRegistration::IsTelephonySupported() const { +#if defined(ANDROID_OS) + JNIEnv* env = base::android::AttachCurrentThread(); + return Java_SharingJNIBridge_isTelephonySupported(env); +#endif + + return false; +}
diff --git a/chrome/browser/sharing/sharing_device_registration.h b/chrome/browser/sharing/sharing_device_registration.h index 22b6ad5..c152d74f 100644 --- a/chrome/browser/sharing/sharing_device_registration.h +++ b/chrome/browser/sharing/sharing_device_registration.h
@@ -73,6 +73,9 @@ // Computes and returns a bitmask of all capabilities supported by the device. int GetDeviceCapabilities() const; + // Returns if device supports telephony capability. + bool IsTelephonySupported() const; + SharingSyncPreference* sharing_sync_preference_; instance_id::InstanceIDDriver* instance_id_driver_;
diff --git a/chrome/browser/signin/account_investigator_factory.cc b/chrome/browser/signin/account_investigator_factory.cc index 457f666..731c8b4 100644 --- a/chrome/browser/signin/account_investigator_factory.cc +++ b/chrome/browser/signin/account_investigator_factory.cc
@@ -11,7 +11,7 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service_factory.h" #include "components/signin/core/browser/account_investigator.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" // static AccountInvestigatorFactory* AccountInvestigatorFactory::GetInstance() {
diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc index 934b784..6f8c54b4 100644 --- a/chrome/browser/signin/chrome_signin_client.cc +++ b/chrome/browser/signin/chrome_signin_client.cc
@@ -38,13 +38,13 @@ #include "components/signin/core/browser/signin_buildflags.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_urls.h" -#include "services/identity/public/cpp/access_token_info.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/cpp/scope_set.h" #include "url/gurl.h"
diff --git a/chrome/browser/signin/chrome_signin_client.h b/chrome/browser/signin/chrome_signin_client.h index 93d4ede..c033e153 100644 --- a/chrome/browser/signin/chrome_signin_client.h +++ b/chrome/browser/signin/chrome_signin_client.h
@@ -15,8 +15,8 @@ #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "components/signin/core/browser/signin_client.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "google_apis/gaia/gaia_oauth_client.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/network_change_manager.mojom.h"
diff --git a/chrome/browser/signin/chrome_signin_status_metrics_provider_delegate.cc b/chrome/browser/signin/chrome_signin_status_metrics_provider_delegate.cc index 8fac7bd..cbd80b4 100644 --- a/chrome/browser/signin/chrome_signin_status_metrics_provider_delegate.cc +++ b/chrome/browser/signin/chrome_signin_status_metrics_provider_delegate.cc
@@ -13,7 +13,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/signin/core/browser/signin_status_metrics_provider.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #if !defined(OS_ANDROID) #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/signin/dice_browsertest.cc b/chrome/browser/signin/dice_browsertest.cc index f15dfda..7e140b7 100644 --- a/chrome/browser/signin/dice_browsertest.cc +++ b/chrome/browser/signin/dice_browsertest.cc
@@ -55,6 +55,9 @@ #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/base/sync_prefs.h" #include "components/sync_user_events/user_event_service.h" #include "components/variations/variations_switches.h" @@ -69,9 +72,6 @@ #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" #include "net/test/embedded_test_server/request_handler_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/chrome/browser/signin/dice_response_handler.cc b/chrome/browser/signin/dice_response_handler.cc index e127523..634bf1f9 100644 --- a/chrome/browser/signin/dice_response_handler.cc +++ b/chrome/browser/signin/dice_response_handler.cc
@@ -27,11 +27,11 @@ #include "components/signin/core/browser/signin_client.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_auth_fetcher.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" const int kDiceTokenFetchTimeoutSeconds = 10;
diff --git a/chrome/browser/signin/dice_response_handler_unittest.cc b/chrome/browser/signin/dice_response_handler_unittest.cc index 47876e3..fea8852 100644 --- a/chrome/browser/signin/dice_response_handler_unittest.cc +++ b/chrome/browser/signin/dice_response_handler_unittest.cc
@@ -24,10 +24,10 @@ #include "components/signin/core/browser/signin_error_controller.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/signin/force_signin_verifier.cc b/chrome/browser/signin/force_signin_verifier.cc index 971e5aa..48402bd 100644 --- a/chrome/browser/signin/force_signin_verifier.cc +++ b/chrome/browser/signin/force_signin_verifier.cc
@@ -10,11 +10,11 @@ #include "base/metrics/histogram_macros.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "content/public/browser/network_service_instance.h" #include "google_apis/gaia/gaia_constants.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" -#include "services/identity/public/cpp/primary_account_mutator.h" namespace { const net::BackoffEntry::Policy kForceSigninVerifierBackoffPolicy = {
diff --git a/chrome/browser/signin/force_signin_verifier_unittest.cc b/chrome/browser/signin/force_signin_verifier_unittest.cc index 26c249e9..36933f19 100644 --- a/chrome/browser/signin/force_signin_verifier_unittest.cc +++ b/chrome/browser/signin/force_signin_verifier_unittest.cc
@@ -9,9 +9,9 @@ #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/test/base/testing_profile.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/browser/network_service_instance.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_network_connection_tracker.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/signin/identity_manager_factory.cc b/chrome/browser/signin/identity_manager_factory.cc index c74c68e..7e598be8 100644 --- a/chrome/browser/signin/identity_manager_factory.cc +++ b/chrome/browser/signin/identity_manager_factory.cc
@@ -18,24 +18,25 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/signin/core/browser/account_fetcher_service.h" +#include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/identity_manager_wrapper.h" #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/primary_account_policy_manager_impl.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/signin/core/browser/signin_client.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider_impl.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" -#include "services/identity/public/cpp/primary_account_mutator_impl.h" +#include "components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" +#include "components/signin/internal/identity_manager/primary_account_mutator_impl.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #if !defined(OS_ANDROID) #include "chrome/browser/web_data_service_factory.h" #include "components/signin/core/browser/mutable_profile_oauth2_token_service_delegate.h" -#include "services/identity/public/cpp/accounts_mutator_impl.h" +#include "components/signin/internal/identity_manager/accounts_mutator_impl.h" #endif namespace {
diff --git a/chrome/browser/signin/identity_services_provider_android.cc b/chrome/browser/signin/identity_services_provider_android.cc index b28a5af..e8fa0e01 100644 --- a/chrome/browser/signin/identity_services_provider_android.cc +++ b/chrome/browser/signin/identity_services_provider_android.cc
@@ -6,7 +6,8 @@ #include "chrome/android/chrome_jni_headers/IdentityServicesProvider_jni.h" #include "chrome/browser/profiles/profile_android.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "chrome/browser/signin/signin_manager_android_wrapper_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" using base::android::JavaParamRef; using base::android::ScopedJavaLocalRef; @@ -30,3 +31,11 @@ IdentityManagerFactory::GetForProfile(profile); return identity_manager->LegacyGetOAuth2TokenServiceJavaObject(); } + +static ScopedJavaLocalRef<jobject> +JNI_IdentityServicesProvider_GetSigninManager( + JNIEnv* env, + const JavaParamRef<jobject>& j_profile_android) { + Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile_android); + return SigninManagerAndroidWrapperFactory::GetJavaObjectForProfile(profile); +}
diff --git a/chrome/browser/signin/identity_test_environment_profile_adaptor.h b/chrome/browser/signin/identity_test_environment_profile_adaptor.h index 1e71f4c..8149f163 100644 --- a/chrome/browser/signin/identity_test_environment_profile_adaptor.h +++ b/chrome/browser/signin/identity_test_environment_profile_adaptor.h
@@ -8,8 +8,8 @@ #include <string> #include "chrome/test/base/testing_profile.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "services/identity/public/cpp/identity_test_environment.h" // Adaptor that supports identity::IdentityTestEnvironment's usage in testing // contexts where the relevant fake objects must be injected via the
diff --git a/chrome/browser/signin/process_dice_header_delegate_impl.cc b/chrome/browser/signin/process_dice_header_delegate_impl.cc index 366273d81..da7b1f5 100644 --- a/chrome/browser/signin/process_dice_header_delegate_impl.cc +++ b/chrome/browser/signin/process_dice_header_delegate_impl.cc
@@ -9,9 +9,9 @@ #include "base/callback.h" #include "base/logging.h" #include "chrome/common/url_constants.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/web_contents.h" -#include "services/identity/public/cpp/identity_manager.h" #include "url/gurl.h" namespace {
diff --git a/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc b/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc index 84a85ec..1430d87 100644 --- a/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc +++ b/chrome/browser/signin/process_dice_header_delegate_impl_unittest.cc
@@ -13,9 +13,9 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "components/signin/core/browser/account_consistency_method.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/browser/web_contents.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace {
diff --git a/chrome/browser/signin/signin_error_notifier_ash.cc b/chrome/browser/signin/signin_error_notifier_ash.cc index ec1589aa..bdde43d 100644 --- a/chrome/browser/signin/signin_error_notifier_ash.cc +++ b/chrome/browser/signin/signin_error_notifier_ash.cc
@@ -37,8 +37,8 @@ #include "chrome/grit/theme_resources.h" #include "chromeos/components/account_manager/account_manager_factory.h" #include "components/account_id/account_id.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user_manager.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/message_center/public/cpp/notification.h"
diff --git a/chrome/browser/signin/signin_error_notifier_ash_unittest.cc b/chrome/browser/signin/signin_error_notifier_ash_unittest.cc index 452411c..c5cc159 100644 --- a/chrome/browser/signin/signin_error_notifier_ash_unittest.cc +++ b/chrome/browser/signin/signin_error_notifier_ash_unittest.cc
@@ -21,9 +21,9 @@ #include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/testing_profile.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/user_manager/scoped_user_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/message_center/public/cpp/notification.h"
diff --git a/chrome/browser/signin/signin_global_error.cc b/chrome/browser/signin/signin_global_error.cc index d51f78a..e849ee89 100644 --- a/chrome/browser/signin/signin_global_error.cc +++ b/chrome/browser/signin/signin_global_error.cc
@@ -24,8 +24,8 @@ #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "net/base/url_util.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #if !defined(OS_ANDROID)
diff --git a/chrome/browser/signin/signin_global_error_unittest.cc b/chrome/browser/signin/signin_global_error_unittest.cc index aabf797..435a794 100644 --- a/chrome/browser/signin/signin_global_error_unittest.cc +++ b/chrome/browser/signin/signin_global_error_unittest.cc
@@ -28,10 +28,10 @@ #include "chrome/test/base/testing_profile_manager.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_error_controller.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync_preferences/pref_service_syncable.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" static const char kTestEmail[] = "testuser@test.com";
diff --git a/chrome/browser/signin/signin_manager_android_wrapper.cc b/chrome/browser/signin/signin_manager_android_wrapper.cc new file mode 100644 index 0000000..8270d61 --- /dev/null +++ b/chrome/browser/signin/signin_manager_android_wrapper.cc
@@ -0,0 +1,21 @@ +// Copyright 2019 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/signin/signin_manager_android_wrapper.h" + +SigninManagerAndroidWrapper::SigninManagerAndroidWrapper( + Profile* profile, + identity::IdentityManager* identity_manager) + : signin_manager_android_(profile, identity_manager) {} + +SigninManagerAndroidWrapper::~SigninManagerAndroidWrapper() {} + +void SigninManagerAndroidWrapper::Shutdown() { + signin_manager_android_.Shutdown(); +} + +base::android::ScopedJavaLocalRef<jobject> +SigninManagerAndroidWrapper::GetJavaObject() { + return signin_manager_android_.GetJavaObject(); +}
diff --git a/chrome/browser/signin/signin_manager_android_wrapper.h b/chrome/browser/signin/signin_manager_android_wrapper.h new file mode 100644 index 0000000..b5372cff --- /dev/null +++ b/chrome/browser/signin/signin_manager_android_wrapper.h
@@ -0,0 +1,33 @@ +// Copyright 2019 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_SIGNIN_SIGNIN_MANAGER_ANDROID_WRAPPER_H_ +#define CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_ANDROID_WRAPPER_H_ + +#include "base/android/scoped_java_ref.h" +#include "chrome/browser/android/signin/signin_manager_android.h" +#include "components/keyed_service/core/keyed_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" + +class Profile; + +class SigninManagerAndroidWrapper : public KeyedService { + public: + // initializes the member signin_manager_android_ and keeps ownership. + SigninManagerAndroidWrapper(Profile* profile, + identity::IdentityManager* identity_manager); + + ~SigninManagerAndroidWrapper() override; + + void Shutdown() override; + + // Returns the reference on SigninManager.java owned by + // signin_manager_android_ + base::android::ScopedJavaLocalRef<jobject> GetJavaObject(); + + private: + SigninManagerAndroid signin_manager_android_; +}; + +#endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_ANDROID_WRAPPER_H_
diff --git a/chrome/browser/signin/signin_manager_android_wrapper_factory.cc b/chrome/browser/signin/signin_manager_android_wrapper_factory.cc new file mode 100644 index 0000000..40e55f0 --- /dev/null +++ b/chrome/browser/signin/signin_manager_android_wrapper_factory.cc
@@ -0,0 +1,40 @@ +// Copyright 2019 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/signin/signin_manager_android_wrapper_factory.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/signin/identity_manager_factory.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" + +SigninManagerAndroidWrapperFactory::SigninManagerAndroidWrapperFactory() + : BrowserContextKeyedServiceFactory( + "SigninManagerAndroidWrapper", + BrowserContextDependencyManager::GetInstance()) { + DependsOn(IdentityManagerFactory::GetInstance()); +} + +SigninManagerAndroidWrapperFactory::~SigninManagerAndroidWrapperFactory() {} + +// static +base::android::ScopedJavaLocalRef<jobject> +SigninManagerAndroidWrapperFactory::GetJavaObjectForProfile(Profile* profile) { + return static_cast<SigninManagerAndroidWrapper*>( + GetInstance()->GetServiceForBrowserContext(profile, true)) + ->GetJavaObject(); +} + +// static +SigninManagerAndroidWrapperFactory* +SigninManagerAndroidWrapperFactory::GetInstance() { + static base::NoDestructor<SigninManagerAndroidWrapperFactory> instance; + return instance.get(); +} + +KeyedService* SigninManagerAndroidWrapperFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + Profile* profile = Profile::FromBrowserContext(context); + return new SigninManagerAndroidWrapper( + profile, IdentityManagerFactory::GetForProfile(profile)); +}
diff --git a/chrome/browser/signin/signin_manager_android_wrapper_factory.h b/chrome/browser/signin/signin_manager_android_wrapper_factory.h new file mode 100644 index 0000000..1c488775b --- /dev/null +++ b/chrome/browser/signin/signin_manager_android_wrapper_factory.h
@@ -0,0 +1,33 @@ +// Copyright 2019 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_SIGNIN_SIGNIN_MANAGER_ANDROID_WRAPPER_FACTORY_H_ +#define CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_ANDROID_WRAPPER_FACTORY_H_ + +#include "base/no_destructor.h" +#include "chrome/browser/signin/signin_manager_android_wrapper.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +class Profile; + +class SigninManagerAndroidWrapperFactory + : public BrowserContextKeyedServiceFactory { + public: + static base::android::ScopedJavaLocalRef<jobject> GetJavaObjectForProfile( + Profile* profile); + + // Returns an instance of the SigninManagerAndroidWrapperFactory singleton. + static SigninManagerAndroidWrapperFactory* GetInstance(); + + private: + friend class base::NoDestructor<SigninManagerAndroidWrapperFactory>; + SigninManagerAndroidWrapperFactory(); + + ~SigninManagerAndroidWrapperFactory() override; + + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const override; +}; + +#endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_ANDROID_WRAPPER_FACTORY_H_
diff --git a/chrome/browser/signin/signin_profile_attributes_updater.h b/chrome/browser/signin/signin_profile_attributes_updater.h index 108d48bd8..a95fb55 100644 --- a/chrome/browser/signin/signin_profile_attributes_updater.h +++ b/chrome/browser/signin/signin_profile_attributes_updater.h
@@ -10,7 +10,7 @@ #include "base/scoped_observer.h" #include "components/keyed_service/core/keyed_service.h" #include "components/signin/core/browser/signin_error_controller.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class ProfileAttributesStorage;
diff --git a/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc b/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc index dc2d3fd..0e7c2a88 100644 --- a/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc +++ b/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc
@@ -14,11 +14,11 @@ #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" #include "components/signin/core/browser/signin_error_controller.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync_preferences/pref_service_syncable.h" #include "content/public/test/test_browser_thread_bundle.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace {
diff --git a/chrome/browser/signin/signin_promo_util.cc b/chrome/browser/signin/signin_promo_util.cc index 745aae4..bea38114 100644 --- a/chrome/browser/signin/signin_promo_util.cc +++ b/chrome/browser/signin/signin_promo_util.cc
@@ -8,9 +8,9 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "net/base/network_change_notifier.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" namespace signin {
diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc index 667a659c..c560c90 100644 --- a/chrome/browser/signin/signin_ui_util.cc +++ b/chrome/browser/signin/signin_ui_util.cc
@@ -23,8 +23,8 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/identity_utils.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user_manager.h" -#include "services/identity/public/cpp/identity_manager.h" #include "third_party/re2/src/re2/re2.h" #include "ui/gfx/font_list.h" #include "ui/gfx/text_elider.h"
diff --git a/chrome/browser/signin/signin_ui_util_unittest.cc b/chrome/browser/signin/signin_ui_util_unittest.cc index d9e261f8..0dc62da 100644 --- a/chrome/browser/signin/signin_ui_util_unittest.cc +++ b/chrome/browser/signin/signin_ui_util_unittest.cc
@@ -18,9 +18,9 @@ #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/signin_buildflags.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace signin_ui_util {
diff --git a/chrome/browser/signin/signin_util.cc b/chrome/browser/signin/signin_util.cc index cd0efe39..cecadd9 100644 --- a/chrome/browser/signin/signin_util.cc +++ b/chrome/browser/signin/signin_util.cc
@@ -28,9 +28,9 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/identity_utils.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "ui/base/l10n/l10n_util.h" #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
diff --git a/chrome/browser/signin/signin_util_win.cc b/chrome/browser/signin/signin_util_win.cc index 2dfb67b..7bc241e 100644 --- a/chrome/browser/signin/signin_util_win.cc +++ b/chrome/browser/signin/signin_util_win.cc
@@ -30,8 +30,8 @@ #include "components/signin/core/browser/about_signin_internals.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace signin_util {
diff --git a/chrome/browser/signin/signin_util_win_browsertest.cc b/chrome/browser/signin/signin_util_win_browsertest.cc index ba512ee..8737cba 100644 --- a/chrome/browser/signin/signin_util_win_browsertest.cc +++ b/chrome/browser/signin/signin_util_win_browsertest.cc
@@ -27,9 +27,9 @@ #include "components/os_crypt/os_crypt.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_pref_names.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" namespace {
diff --git a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc index bea9c25..53557460 100644 --- a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc +++ b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
@@ -626,7 +626,8 @@ // This test is not run on ChromeOS because it registers a custom handler (see // ProtocolHandlerRegistry::InstallDefaultsForChromeOS), and handles mailto: // navigations before getting to external protocol code. -#if defined(OS_CHROMEOS) +// Flaky on Windows. See https://crbug.com/980446 +#if defined(OS_CHROMEOS) || defined(OS_WIN) #define MAYBE_LaunchExternalProtocolFromSubframe \ DISABLED_LaunchExternalProtocolFromSubframe #else
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service.h b/chrome/browser/supervised_user/child_accounts/child_account_service.h index 4d60cdd..1a0ce035 100644 --- a/chrome/browser/supervised_user/child_accounts/child_account_service.h +++ b/chrome/browser/supervised_user/child_accounts/child_account_service.h
@@ -19,8 +19,8 @@ #include "chrome/browser/supervised_user/child_accounts/family_info_fetcher.h" #include "chrome/browser/supervised_user/supervised_user_service.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "net/base/backoff_entry.h" -#include "services/identity/public/cpp/identity_manager.h" namespace user_prefs { class PrefRegistrySyncable;
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc b/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc index 681fa5a..16291a4b 100644 --- a/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc +++ b/chrome/browser/supervised_user/child_accounts/child_account_service_unittest.cc
@@ -11,11 +11,11 @@ #include "chrome/test/base/testing_profile.h" #include "components/signin/core/browser/list_accounts_test_utils.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_utils.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace {
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc index db20169..a2e07a0 100644 --- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc +++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
@@ -13,11 +13,11 @@ #include "base/values.h" #include "chrome/browser/supervised_user/child_accounts/kids_management_api.h" #include "chrome/browser/supervised_user/supervised_user_constants.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "net/base/load_flags.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h index b1229b0..3f29467 100644 --- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h +++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h
@@ -12,7 +12,7 @@ #include "base/callback.h" #include "base/macros.h" #include "base/memory/scoped_refptr.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace base { class DictionaryValue;
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc index e7f0d7e2..7155878d 100644 --- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc +++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc
@@ -16,10 +16,10 @@ #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "base/values.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/base/net_errors.h" #include "net/http/http_status_code.h" #include "net/url_request/url_request_test_util.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc index a82bca7f..a7db9db 100644 --- a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc +++ b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
@@ -18,6 +18,9 @@ #include "chrome/browser/supervised_user/child_accounts/kids_management_api.h" #include "chrome/browser/supervised_user/supervised_user_constants.h" #include "chrome/common/chrome_switches.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "google_apis/gaia/google_service_auth_error.h" @@ -25,9 +28,6 @@ #include "net/base/net_errors.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/access_token_info.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc index 0bb284bd..b566109 100644 --- a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc +++ b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary_unittest.cc
@@ -12,9 +12,9 @@ #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "base/values.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/base/net_errors.h" #include "net/http/http_util.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/supervised_user/kids_management_url_checker_client.cc b/chrome/browser/supervised_user/kids_management_url_checker_client.cc index 3a8f1ac..58187c8 100644 --- a/chrome/browser/supervised_user/kids_management_url_checker_client.cc +++ b/chrome/browser/supervised_user/kids_management_url_checker_client.cc
@@ -20,12 +20,12 @@ #include "base/values.h" #include "chrome/browser/supervised_user/supervised_user_constants.h" #include "components/google/core/common/google_util.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "google_apis/google_api_keys.h" #include "net/base/escape.h" #include "net/base/load_flags.h" #include "net/http/http_status_code.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/identity/public/cpp/scope_set.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/chrome/browser/supervised_user/kids_management_url_checker_client_unittest.cc b/chrome/browser/supervised_user/kids_management_url_checker_client_unittest.cc index 17ca4bb..632ff0e8 100644 --- a/chrome/browser/supervised_user/kids_management_url_checker_client_unittest.cc +++ b/chrome/browser/supervised_user/kids_management_url_checker_client_unittest.cc
@@ -13,8 +13,8 @@ #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "base/values.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/http/http_status_code.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/supervised_user/legacy/custodian_profile_downloader_service.cc b/chrome/browser/supervised_user/legacy/custodian_profile_downloader_service.cc index ab76f350..2340cf4 100644 --- a/chrome/browser/supervised_user/legacy/custodian_profile_downloader_service.cc +++ b/chrome/browser/supervised_user/legacy/custodian_profile_downloader_service.cc
@@ -8,8 +8,8 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_manager.h" CustodianProfileDownloaderService::CustodianProfileDownloaderService( Profile* custodian_profile)
diff --git a/chrome/browser/supervised_user/supervised_user_constants.cc b/chrome/browser/supervised_user/supervised_user_constants.cc index 04befe66..f267df3 100644 --- a/chrome/browser/supervised_user/supervised_user_constants.cc +++ b/chrome/browser/supervised_user/supervised_user_constants.cc
@@ -27,7 +27,8 @@ // NOTE: Do not change this value without changing the value of the // corresponding constant in -// //services/identity/public/cpp/identity_manager.cc to correspond. +// //components/signin/public/identity_manager/identity_manager.cc to +// correspond. const char kSupervisedUserPseudoEmail[] = "managed_user@localhost"; const char kChildAccountSUID[] = "ChildAccountSUID";
diff --git a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc index a03e9bf..0a14290 100644 --- a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc +++ b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc
@@ -13,9 +13,9 @@ #include "chrome/browser/supervised_user/child_accounts/child_account_service.h" #include "chrome/browser/supervised_user/child_accounts/child_account_service_factory.h" #include "components/google/core/common/google_util.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" -#include "services/identity/public/cpp/identity_manager.h" #if defined(OS_ANDROID) #include "chrome/browser/supervised_user/child_accounts/child_account_service_android.h"
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc index 31ea88f..392480f1 100644 --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -39,12 +39,12 @@ #include "components/policy/core/browser/url_util.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "extensions/buildflags/buildflags.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/supervised_user/supervised_user_service_unittest.cc b/chrome/browser/supervised_user/supervised_user_service_unittest.cc index 4bbd14f..929b8e9f 100644 --- a/chrome/browser/supervised_user/supervised_user_service_unittest.cc +++ b/chrome/browser/supervised_user/supervised_user_service_unittest.cc
@@ -34,11 +34,11 @@ #include "chrome/test/base/testing_profile.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/version_info/version_info.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_utils.h" #include "extensions/buildflags/buildflags.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" #if BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc index 6ccb762..9ae42742 100644 --- a/chrome/browser/sync/sync_ui_util.cc +++ b/chrome/browser/sync/sync_ui_util.cc
@@ -10,12 +10,12 @@ #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" #include "components/unified_consent/feature.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" namespace sync_ui_util {
diff --git a/chrome/browser/sync/sync_ui_util_unittest.cc b/chrome/browser/sync/sync_ui_util_unittest.cc index 08e8ca4..495627f 100644 --- a/chrome/browser/sync/sync_ui_util_unittest.cc +++ b/chrome/browser/sync/sync_ui_util_unittest.cc
@@ -16,13 +16,13 @@ #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/sync/sync_ui_util.h" #include "chrome/test/base/testing_profile.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/driver/test_sync_service.h" #include "components/sync/engine/sync_engine.h" #include "components/unified_consent/feature.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/sync/test/integration/encryption_helper.cc b/chrome/browser/sync/test/integration/encryption_helper.cc index 92e2f002..7d6f650 100644 --- a/chrome/browser/sync/test/integration/encryption_helper.cc +++ b/chrome/browser/sync/test/integration/encryption_helper.cc
@@ -153,7 +153,7 @@ fake_server_->GetPermanentSyncEntitiesByModelType(syncer::NIGORI); EXPECT_LE(nigori_entities.size(), 1U); return !nigori_entities.empty() && - syncer::ProtoPassphraseTypeToEnum( + syncer::ProtoPassphraseInt32ToEnum( nigori_entities[0].specifics().nigori().passphrase_type()) == expected_passphrase_type_; }
diff --git a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc index 889bc96..893a03d 100644 --- a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc +++ b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc
@@ -22,10 +22,10 @@ #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" #include "chrome/browser/ui/webui/signin/login_ui_test_utils.h" #include "chrome/common/channel_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/driver/about_sync_util.h" #include "components/sync/engine/sync_string_conversions.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" using syncer::ProfileSyncService; using syncer::SyncCycleSnapshot;
diff --git a/chrome/browser/sync/test/integration/secondary_account_helper.cc b/chrome/browser/sync/test/integration/secondary_account_helper.cc index 99ab8e4..9493669e 100644 --- a/chrome/browser/sync/test/integration/secondary_account_helper.cc +++ b/chrome/browser/sync/test/integration/secondary_account_helper.cc
@@ -10,9 +10,9 @@ #include "chrome/browser/signin/chrome_signin_client_test_util.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
diff --git a/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc b/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc index 8587f48..0806e72b 100644 --- a/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc
@@ -32,7 +32,7 @@ using syncer::ModelType; using syncer::ModelTypeSet; using syncer::PassphraseType; -using syncer::ProtoPassphraseTypeToEnum; +using syncer::ProtoPassphraseInt32ToEnum; using syncer::SyncService; using syncer::SystemEncryptor; @@ -142,7 +142,7 @@ const std::string& passphrase) { NigoriSpecifics nigori; EXPECT_TRUE(GetServerNigori(GetFakeServer(), &nigori)); - EXPECT_EQ(ProtoPassphraseTypeToEnum(nigori.passphrase_type()), + EXPECT_EQ(ProtoPassphraseInt32ToEnum(nigori.passphrase_type()), PassphraseType::CUSTOM_PASSPHRASE); auto cryptographer = std::make_unique<Cryptographer>(&system_encryptor_); InitCustomPassphraseCryptographerFromNigori(nigori, cryptographer.get(),
diff --git a/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc b/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc index 6058aef..213968a 100644 --- a/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_sessions_sync_test.cc
@@ -25,6 +25,7 @@ #include "components/history/core/browser/history_types.h" #include "components/sessions/core/session_types.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/base/time.h" #include "components/sync/protocol/proto_value_conversions.h" #include "components/sync/protocol/session_specifics.pb.h" @@ -34,7 +35,6 @@ #include "components/sync_sessions/session_sync_test_helper.h" #include "components/sync_sessions/synced_session_tracker.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/mojom/window_open_disposition.mojom.h"
diff --git a/chrome/browser/sync/test/integration/sync_auth_test.cc b/chrome/browser/sync/test/integration/sync_auth_test.cc index 0bd2ee8..8317559 100644 --- a/chrome/browser/sync/test/integration/sync_auth_test.cc +++ b/chrome/browser/sync/test/integration/sync_auth_test.cc
@@ -15,14 +15,14 @@ #include "chrome/common/pref_names.h" #include "components/bookmarks/browser/bookmark_node.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/driver/sync_token_status.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/http/http_status_code.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" namespace {
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc index 50bceb85..bf01ad35 100644 --- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc +++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
@@ -45,6 +45,7 @@ #include "components/drive/drive_uploader.h" #include "components/drive/service/drive_api_service.h" #include "components/drive/service/drive_service_interface.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" @@ -58,7 +59,6 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/device/public/mojom/constants.mojom.h" #include "services/device/public/mojom/wake_lock_provider.mojom.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/service_manager/public/cpp/connector.h" #include "storage/browser/blob/scoped_file.h" #include "storage/common/fileapi/file_system_util.h"
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.h b/chrome/browser/sync_file_system/drive_backend/sync_engine.h index 2cb3d67..7063971 100644 --- a/chrome/browser/sync_file_system/drive_backend/sync_engine.h +++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.h
@@ -21,7 +21,7 @@ #include "components/drive/drive_notification_observer.h" #include "components/drive/service/drive_service_interface.h" #include "components/signin/core/browser/account_info.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "services/network/public/cpp/network_connection_tracker.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 6d1c8776b..afb209c 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -497,6 +497,7 @@ "//components/sessions", "//components/signin/core/browser", "//components/signin/core/browser:signin_buildflags", + "//components/signin/public/identity_manager", "//components/spellcheck/browser", "//components/ssl_errors", "//components/startup_metric_utils/browser:lib", @@ -539,7 +540,6 @@ "//printing/buildflags", "//rlz/buildflags", "//services/device/public/cpp:device_features", - "//services/identity/public/cpp", "//services/metrics/public/cpp:ukm_builders", "//services/network/public/mojom", "//skia", @@ -1371,7 +1371,6 @@ "//device/bluetooth", "//device/fido", "//services/device/public/mojom", - "//services/identity/public/cpp", "//services/metrics/public/cpp:metrics_cpp", "//third_party/libaddressinput", "//third_party/libaddressinput:strings", @@ -3774,6 +3773,8 @@ "webui/print_preview/local_printer_handler_chromeos.cc", "webui/print_preview/local_printer_handler_chromeos.h", ] + + deps += [ "//services/identity/public/cpp:cpp_types" ] } else { sources += [ "webui/print_preview/local_printer_handler_default.cc",
diff --git a/chrome/browser/ui/app_list/search/search_controller.cc b/chrome/browser/ui/app_list/search/search_controller.cc index faf3c0e..bc19b2c3 100644 --- a/chrome/browser/ui/app_list/search/search_controller.cc +++ b/chrome/browser/ui/app_list/search/search_controller.cc
@@ -11,6 +11,7 @@ #include "ash/public/cpp/app_list/app_list_config.h" #include "ash/public/cpp/app_list/app_list_features.h" +#include "ash/public/cpp/app_list/app_list_metrics.h" #include "base/bind.h" #include "base/metrics/histogram_macros.h" #include "base/strings/string_util.h" @@ -82,6 +83,7 @@ void SearchController::Start(const base::string16& query) { dispatching_query_ = true; + RecordLauncherIssuedSearchQueryLength(query.length()); for (const auto& provider : providers_) provider->Start(query);
diff --git a/chrome/browser/ui/ash/assistant/assistant_client.h b/chrome/browser/ui/ash/assistant/assistant_client.h index d243039..6694805 100644 --- a/chrome/browser/ui/ash/assistant/assistant_client.h +++ b/chrome/browser/ui/ash/assistant/assistant_client.h
@@ -11,8 +11,8 @@ #include "chrome/browser/ui/ash/assistant/device_actions.h" #include "chromeos/services/assistant/public/mojom/assistant.mojom.h" #include "components/session_manager/core/session_manager_observer.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "mojo/public/cpp/bindings/binding.h" -#include "services/identity/public/cpp/identity_manager.h" class Profile; class AssistantImageDownloader;
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_util_chromeos_unittest.cc b/chrome/browser/ui/ash/multi_user/multi_user_util_chromeos_unittest.cc index 7346997..f15a707 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_util_chromeos_unittest.cc +++ b/chrome/browser/ui/ash/multi_user/multi_user_util_chromeos_unittest.cc
@@ -13,10 +13,10 @@ #include "chrome/test/base/testing_profile.h" #include "components/account_id/account_id.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" namespace ash {
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index 72ea3662..d0237c8a 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -53,6 +53,7 @@ #include "components/signin/core/browser/signin_buildflags.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "components/translate/core/browser/translate_manager.h" #include "components/ukm/content/source_url_recorder.h" @@ -60,7 +61,6 @@ #include "content/public/browser/navigation_entry.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/ssl_status.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/gfx/geometry/rect.h" #if defined(OS_ANDROID)
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc index d8888dd7..e1c38b1 100644 --- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc
@@ -38,11 +38,11 @@ #include "components/autofill/core/common/autofill_prefs.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_buildflags.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "components/user_prefs/user_prefs.h" #include "content/public/browser/navigation_handle.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" namespace autofill {
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc index bd06e3f..17af855ba 100644 --- a/chrome/browser/ui/chrome_pages.cc +++ b/chrome/browser/ui/chrome_pages.cc
@@ -56,7 +56,7 @@ #if !defined(OS_ANDROID) #include "chrome/browser/signin/identity_manager_factory.h" #include "components/signin/core/browser/signin_pref_names.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #endif using base::UserMetricsAction;
diff --git a/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc b/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc index eb28d91..2448b82 100644 --- a/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc +++ b/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc
@@ -16,9 +16,9 @@ #include "chrome/common/chrome_features.h" #include "components/bubble/bubble_controller.h" #include "components/bubble/bubble_ui.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "extensions/common/extension_builder.h" #include "extensions/common/manifest_constants.h" -#include "services/identity/public/cpp/identity_test_utils.h" using extensions::Manifest; using ActionType = extensions::ExtensionBuilder::ActionType;
diff --git a/chrome/browser/ui/passwords/google_password_manager_navigation_throttle_browsertest.cc b/chrome/browser/ui/passwords/google_password_manager_navigation_throttle_browsertest.cc index 8b0e206..fdd03b6 100644 --- a/chrome/browser/ui/passwords/google_password_manager_navigation_throttle_browsertest.cc +++ b/chrome/browser/ui/passwords/google_password_manager_navigation_throttle_browsertest.cc
@@ -25,7 +25,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/signin/identity_manager_factory.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #endif namespace {
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc index d0c64b7b..70317af6 100644 --- a/chrome/browser/ui/search/search_tab_helper.cc +++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -34,6 +34,7 @@ #include "components/omnibox/browser/omnibox_popup_model.h" #include "components/omnibox/browser/omnibox_view.h" #include "components/search/search.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/sync/base/user_selectable_type.h" #include "components/sync/driver/sync_service.h" @@ -45,7 +46,6 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h"
diff --git a/chrome/browser/ui/signin_view_controller.cc b/chrome/browser/ui/signin_view_controller.cc index 59f0685..3855dfd 100644 --- a/chrome/browser/ui/signin_view_controller.cc +++ b/chrome/browser/ui/signin_view_controller.cc
@@ -22,11 +22,11 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/webui_url_constants.h" #include "components/signin/core/browser/account_consistency_method.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_contents.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/google_api_keys.h" -#include "services/identity/public/cpp/identity_manager.h" #include "url/url_constants.h" namespace {
diff --git a/chrome/browser/ui/startup/startup_tab_provider.cc b/chrome/browser/ui/startup/startup_tab_provider.cc index 364603ff..af53321 100644 --- a/chrome/browser/ui/startup/startup_tab_provider.cc +++ b/chrome/browser/ui/startup/startup_tab_provider.cc
@@ -18,9 +18,9 @@ #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "net/base/url_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #if defined(OS_WIN) #include "base/win/windows_version.h"
diff --git a/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.cc b/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.cc index a0998d9c..1457ec3 100644 --- a/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.cc +++ b/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.cc
@@ -18,21 +18,31 @@ InfoBarService* infobar_service, const base::string16& shared_tab_name, const base::string16& app_name, + bool is_sharing_allowed, TabSharingUI* ui) { DCHECK(infobar_service); return infobar_service->AddInfoBar( - infobar_service->CreateConfirmInfoBar(base::WrapUnique( - new TabSharingInfoBarDelegate(shared_tab_name, app_name, ui)))); + infobar_service->CreateConfirmInfoBar( + base::WrapUnique(new TabSharingInfoBarDelegate( + shared_tab_name, app_name, is_sharing_allowed, ui))), + true /*replace_existing*/); } TabSharingInfoBarDelegate::TabSharingInfoBarDelegate( base::string16 shared_tab_name, base::string16 app_name, + bool is_sharing_allowed, TabSharingUI* ui) : shared_tab_name_(std::move(shared_tab_name)), app_name_(std::move(app_name)), + is_sharing_allowed_(is_sharing_allowed), ui_(ui) {} +bool TabSharingInfoBarDelegate::EqualsDelegate( + InfoBarDelegate* delegate) const { + return delegate && delegate->GetIdentifier() == GetIdentifier(); +} + bool TabSharingInfoBarDelegate::ShouldExpire( const NavigationDetails& details) const { return false; @@ -61,7 +71,9 @@ } int TabSharingInfoBarDelegate::GetButtons() const { - return shared_tab_name_.empty() ? BUTTON_OK : BUTTON_OK | BUTTON_CANCEL; + return shared_tab_name_.empty() || !is_sharing_allowed_ + ? BUTTON_OK + : BUTTON_OK | BUTTON_CANCEL; } bool TabSharingInfoBarDelegate::Accept() {
diff --git a/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.h b/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.h index 984f7b3..dd1811b 100644 --- a/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.h +++ b/chrome/browser/ui/tab_sharing/tab_sharing_infobar_delegate.h
@@ -23,19 +23,23 @@ class TabSharingInfoBarDelegate : public ConfirmInfoBarDelegate { public: // Creates a tab sharing infobar. If |shared_tab_name| is empty, it creates an - // infobar with "currently shared tab" layout (see class comment). + // infobar with "currently shared tab" layout (see class comment). If + // |is_sharing_allowed| is false, [Share this tab] button is not displayed. static infobars::InfoBar* Create(InfoBarService* infobar_service, const base::string16& shared_tab_name, const base::string16& app_name, + bool is_sharing_allowed, TabSharingUI* ui); ~TabSharingInfoBarDelegate() override = default; private: TabSharingInfoBarDelegate(base::string16 shared_tab_name, base::string16 app_name, + bool is_sharing_allowed, TabSharingUI* ui); // ConfirmInfoBarDelegate: + bool EqualsDelegate(InfoBarDelegate* delegate) const override; bool ShouldExpire(const NavigationDetails& details) const override; infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; base::string16 GetMessageText() const override; @@ -48,8 +52,9 @@ const base::string16 shared_tab_name_; const base::string16 app_name_; + bool is_sharing_allowed_; - // |ui_| creates and removes delegate's infobar; outlives delegate. + // Creates and removes delegate's infobar; outlives delegate. TabSharingUI* ui_; };
diff --git a/chrome/browser/ui/tab_sharing/tab_sharing_ui.cc b/chrome/browser/ui/tab_sharing/tab_sharing_ui.cc index f028b1f..f146fe7 100644 --- a/chrome/browser/ui/tab_sharing/tab_sharing_ui.cc +++ b/chrome/browser/ui/tab_sharing/tab_sharing_ui.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/profiles/profile_manager.h" @@ -38,7 +39,7 @@ media_id.web_contents_id.render_process_id, media_id.web_contents_id.main_render_frame_id)); shared_tab_name_ = GetTabName(shared_tab_); - profile_ = Profile::FromBrowserContext(shared_tab_->GetBrowserContext()); + profile_ = ProfileManager::GetLastUsedProfileAllowedByPolicy(); } TabSharingUI::~TabSharingUI() { @@ -76,11 +77,16 @@ const TabStripSelectionChange& selection) { if (change.type() == TabStripModelChange::kInserted) { for (const auto& contents : change.GetInsert()->contents) { - infobars_[contents.contents] = TabSharingInfoBarDelegate::Create( - InfoBarService::FromWebContents(contents.contents), shared_tab_name_, - app_name_, this); + auto* info_bar = TabSharingInfoBarDelegate::Create( + InfoBarService::FromWebContents(contents.contents), + shared_tab_ == contents.contents ? base::string16() + : shared_tab_name_, + app_name_, !source_callback_.is_null() /*is_sharing_allowed*/, this); + info_bar->owner()->AddObserver(this); + infobars_[contents.contents] = info_bar; } - } else if (change.type() == TabStripModelChange::kRemoved) { + } else if (change.type() == TabStripModelChange::kRemoved && + change.GetRemove()->will_be_deleted) { bool stop_sharing = false; for (const auto& contents : change.GetRemove()->contents) { if (contents.contents == shared_tab_) @@ -93,6 +99,21 @@ } } +void TabSharingUI::OnInfoBarRemoved(infobars::InfoBar* info_bar, bool animate) { + base::EraseIf(infobars_, [info_bar, this](const auto& infobars_entry) { + if (infobars_entry.second == info_bar) { + info_bar->owner()->RemoveObserver(this); + return true; + } + return false; + }); +} + +void TabSharingUI::OnInfoBarReplaced(infobars::InfoBar* old_infobar, + infobars::InfoBar* new_infobar) { + OnInfoBarRemoved(old_infobar, false); +} + void TabSharingUI::StartSharing(infobars::InfoBar* infobar) { if (source_callback_.is_null()) return; @@ -129,10 +150,12 @@ TabStripModel* tab_strip_model = browser->tab_strip_model(); for (int i = 0; i < tab_strip_model->count(); i++) { content::WebContents* contents = tab_strip_model->GetWebContentsAt(i); - infobars_[contents] = TabSharingInfoBarDelegate::Create( + auto* info_bar = TabSharingInfoBarDelegate::Create( InfoBarService::FromWebContents(contents), shared_tab_ == contents ? base::string16() : shared_tab_name_, - app_name_, this); + app_name_, !source_callback_.is_null() /*is_sharing_allowed*/, this); + info_bar->owner()->AddObserver(this); + infobars_[contents] = info_bar; } } browser_list->AddObserver(this); @@ -142,7 +165,9 @@ BrowserList::GetInstance()->RemoveObserver(this); tab_strip_models_observer_.RemoveAll(); - for (const auto& infobars_entry : infobars_) + for (const auto& infobars_entry : infobars_) { + infobars_entry.second->owner()->RemoveObserver(this); infobars_entry.second->RemoveSelf(); + } infobars_.clear(); }
diff --git a/chrome/browser/ui/tab_sharing/tab_sharing_ui.h b/chrome/browser/ui/tab_sharing/tab_sharing_ui.h index fb39966..65d0f8b 100644 --- a/chrome/browser/ui/tab_sharing/tab_sharing_ui.h +++ b/chrome/browser/ui/tab_sharing/tab_sharing_ui.h
@@ -15,6 +15,7 @@ #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" #include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" +#include "components/infobars/core/infobar_manager.h" #include "content/public/browser/desktop_media_id.h" namespace content { @@ -28,7 +29,8 @@ class TabSharingUI : public MediaStreamUI, public TabStripModelObserver, - public BrowserListObserver { + public BrowserListObserver, + public infobars::InfoBarManager::Observer { public: TabSharingUI(const content::DesktopMediaID& media_id, base::string16 app_name); @@ -50,6 +52,11 @@ void OnBrowserAdded(Browser* browser) override; void OnBrowserRemoved(Browser* browser) override; + // infobars::InfoBarManager::Observer: + void OnInfoBarRemoved(infobars::InfoBar* info_bar, bool animate) override; + void OnInfoBarReplaced(infobars::InfoBar* old_infobar, + infobars::InfoBar* new_infobar) override; + // Runs |source_callback_| to start sharing the tab containing |infobar|. // Removes infobars on all tabs; OnStarted() will recreate the infobars with // updated title and buttons.
diff --git a/chrome/browser/ui/toolbar/media_router_contextual_menu.cc b/chrome/browser/ui/toolbar/media_router_contextual_menu.cc index 89bc9fda..3ba07198 100644 --- a/chrome/browser/ui/toolbar/media_router_contextual_menu.cc +++ b/chrome/browser/ui/toolbar/media_router_contextual_menu.cc
@@ -27,10 +27,10 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/vector_icons/vector_icons.h" #include "extensions/common/constants.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/models/menu_model_delegate.h" #include "ui/gfx/color_palette.h" #include "ui/gfx/paint_vector_icon.h"
diff --git a/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc b/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc index 6d309c1652..6eaf1623 100644 --- a/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc +++ b/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc
@@ -22,7 +22,7 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "chrome/test/base/browser_with_test_window_test.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc index 8f138b7..2ebe95a0 100644 --- a/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc +++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_browsertest.cc
@@ -59,6 +59,8 @@ #include "components/keyed_service/core/service_access_type.h" #include "components/network_session_configurator/common/network_switches.h" #include "components/prefs/pref_registry_simple.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/test/fake_server/fake_server.h" #include "components/sync/test/fake_server/fake_server_network_resources.h" #include "content/public/browser/web_contents_observer.h" @@ -68,8 +70,6 @@ #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/url_request/test_url_fetcher_factory.h" #include "services/device/public/cpp/test/scoped_geolocation_overrider.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc index 281c2dd..edf5fdd 100644 --- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc +++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views_browsertest.cc
@@ -50,6 +50,8 @@ #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/network_session_configurator/common/network_switches.h" #include "components/signin/core/browser/signin_buildflags.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/test/fake_server/fake_server.h" @@ -60,8 +62,6 @@ #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/url_request/test_url_fetcher_factory.h" #include "services/device/public/cpp/test/scoped_geolocation_overrider.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc index 13b25a15..5ef7d1e 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc
@@ -16,7 +16,7 @@ #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_utils.h" #include "components/bookmarks/test/bookmark_test_helpers.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "ui/views/window/dialog_client_view.h" class BookmarkBubbleViewBrowserTest : public DialogBrowserTest {
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_unittest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_unittest.cc index 9e17581..aaf93c2 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_unittest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_unittest.cc
@@ -17,7 +17,7 @@ #include "chrome/test/base/browser_with_test_window_test.h" #include "components/bookmarks/browser/bookmark_utils.h" #include "components/bookmarks/test/bookmark_test_helpers.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" using bookmarks::BookmarkModel;
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc index 9a9dda47..8694b97 100644 --- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc +++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
@@ -21,21 +21,15 @@ MediaRouterDialogControllerImplBase* MediaRouterDialogControllerImplBase::GetOrCreateForWebContents( content::WebContents* web_contents) { - if (ShouldUseViewsDialog()) { return MediaRouterDialogControllerViews::GetOrCreateForWebContents( web_contents); - } - return MediaRouterDialogControllerWebUIImpl::GetOrCreateForWebContents( - web_contents); } // static MediaRouterDialogControllerImplBase* MediaRouterDialogControllerImplBase::FromWebContents( content::WebContents* web_contents) { - if (ShouldUseViewsDialog()) return MediaRouterDialogControllerViews::FromWebContents(web_contents); - return MediaRouterDialogControllerWebUIImpl::FromWebContents(web_contents); } MediaRouterDialogControllerViews::~MediaRouterDialogControllerViews() {
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc index eec01e9..cceeec6 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button.cc
@@ -28,7 +28,7 @@ #include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/material_design/material_design_controller.h" #include "ui/base/models/menu_model.h"
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button.h b/chrome/browser/ui/views/profiles/avatar_toolbar_button.h index e1503fb..36922dff 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button.h +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button.h
@@ -14,7 +14,7 @@ #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/views/toolbar/toolbar_button.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ui/base/material_design/material_design_controller_observer.h" #include "ui/events/event.h"
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc index 566dfef..5d8f576a 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -45,11 +45,11 @@ #include "chrome/grit/theme_resources.h" #include "components/signin/core/browser/signin_error_controller.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/driver/sync_service_utils.h" #include "components/vector_icons/vector_icons.h" #include "net/base/url_util.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/image/canvas_image_source.h"
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.h b/chrome/browser/ui/views/profiles/profile_chooser_view.h index bbbd63c..63470c1 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view.h +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.h
@@ -20,7 +20,7 @@ #include "chrome/browser/ui/views/profiles/dice_accounts_menu.h" #include "chrome/browser/ui/views/profiles/profile_menu_view_base.h" #include "components/signin/core/browser/signin_header_helper.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ui/views/controls/styled_label.h" namespace views {
diff --git a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc index ccc7cf6b..46ad66e 100644 --- a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc +++ b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc
@@ -45,6 +45,7 @@ #include "components/prefs/scoped_user_pref_update.h" #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/session_storage_namespace.h" @@ -66,7 +67,6 @@ #include "net/test/embedded_test_server/http_response.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/webui/app_launcher_login_handler.cc b/chrome/browser/ui/webui/app_launcher_login_handler.cc index 575ff1b6..ae32c50 100644 --- a/chrome/browser/ui/webui/app_launcher_login_handler.cc +++ b/chrome/browser/ui/webui/app_launcher_login_handler.cc
@@ -31,10 +31,10 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "net/base/escape.h" -#include "services/identity/public/cpp/identity_manager.h" #include "skia/ext/image_operations.h" #include "third_party/skia/include/core/SkSurface.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc index baa7800..30c5a7c 100644 --- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc +++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc
@@ -19,10 +19,10 @@ #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler_utils.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" #include "chrome/services/app_service/public/cpp/app_service_proxy.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_ui.h" #include "google_apis/gaia/gaia_constants.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/identity_manager.h" namespace chromeos {
diff --git a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc index b0774bb..8f39374 100644 --- a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc +++ b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc
@@ -15,8 +15,8 @@ #include "components/arc/arc_prefs.h" #include "components/consent_auditor/consent_auditor.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user_manager.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc index cf4abce..29601c9 100644 --- a/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc
@@ -28,10 +28,10 @@ #include "components/consent_auditor/consent_auditor.h" #include "components/login/localized_values_builder.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/user_manager/user_manager.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" using ArcBackupAndRestoreConsent =
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc index ef95db9..5326b0b 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -20,16 +20,15 @@ #include "chrome/browser/chromeos/login/configuration_keys.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h" -#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h" #include "chrome/browser/chromeos/login/helper.h" #include "chrome/browser/chromeos/login/lock/screen_locker.h" +#include "chrome/browser/chromeos/login/screens/reset_screen.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" #include "chrome/browser/chromeos/system/input_device_settings.h" #include "chrome/browser/chromeos/system/timezone_resolver_manager.h" -#include "chrome/browser/chromeos/tpm_firmware_update.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/ui/ash/ash_util.h" #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.h" @@ -407,53 +406,25 @@ } void CoreOobeHandler::HandleToggleResetScreen() { - // TODO(igorcov): Move this logic in a static method in wizard_controller, - // passing as parameter a callback(bool). Here, call the newly created method - // and pass as a callback a simple function that will call LaunchResetScreen - // if the input bool parameter is true. - // Check the common case of a correctly enrolled device. - if (g_browser_process->platform_part() - ->browser_policy_connector_chromeos() - ->IsEnterpriseManaged()) { - // Admin can explicitly allow to powerwash. If the policy is not loaded yet, - // we consider by default that the device is not allowed to powerwash. - bool is_powerwash_allowed = false; - CrosSettings::Get()->GetBoolean(kDevicePowerwashAllowed, - &is_powerwash_allowed); - if (is_powerwash_allowed) { - LaunchResetScreen(); - return; - } + base::OnceCallback<void(bool, base::Optional<tpm_firmware_update::Mode>)> + callback = + base::BindOnce(&CoreOobeHandler::HandleToggleResetScreenCallback, + weak_ptr_factory_.GetWeakPtr()); + ResetScreen::CheckIfPowerwashAllowed(std::move(callback)); +} - // Check if powerwash is only allowed by the admin specifically for the - // purpose of installing a TPM firmware update. - tpm_firmware_update::GetAvailableUpdateModes( - base::BindOnce([](const std::set<tpm_firmware_update::Mode>& modes) { - using tpm_firmware_update::Mode; - for (Mode mode : {Mode::kPowerwash, Mode::kCleanup}) { - if (modes.count(mode) == 0) - continue; - - // Force the TPM firmware update option to be enabled. - g_browser_process->local_state()->SetInteger( - prefs::kFactoryResetTPMFirmwareUpdateMode, - static_cast<int>(mode)); - LaunchResetScreen(); - return; - } - }), - base::TimeDelta()); +void CoreOobeHandler::HandleToggleResetScreenCallback( + bool is_reset_allowed, + base::Optional<tpm_firmware_update::Mode> tpm_firmware_update_mode) { + if (!is_reset_allowed) return; + if (tpm_firmware_update_mode.has_value()) { + // Force the TPM firmware update option to be enabled. + g_browser_process->local_state()->SetInteger( + prefs::kFactoryResetTPMFirmwareUpdateMode, + static_cast<int>(tpm_firmware_update_mode.value())); } - - // Devices that are still in OOBE may be subject to forced re-enrollment (FRE) - // and thus pending for enterprise management. These should not be allowed to - // powerwash either. Note that taking consumer device ownership has the side - // effect of dropping the FRE requirement if it was previously in effect. - if (AutoEnrollmentController::GetFRERequirement() != - AutoEnrollmentController::FRERequirement::kExplicitlyRequired) { - LaunchResetScreen(); - } + LaunchResetScreen(); } void CoreOobeHandler::HandleEnableDebuggingScreen() {
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h index 41232f4..cb7db18 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
@@ -13,12 +13,14 @@ #include "base/callback.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/optional.h" #include "base/values.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/login/demo_mode/demo_mode_detector.h" #include "chrome/browser/chromeos/login/help_app_launcher.h" #include "chrome/browser/chromeos/login/oobe_configuration.h" #include "chrome/browser/chromeos/login/version_info_updater.h" +#include "chrome/browser/chromeos/tpm_firmware_update.h" #include "chrome/browser/ui/ash/tablet_mode_client_observer.h" #include "chrome/browser/ui/webui/chromeos/login/base_webui_handler.h" #include "ui/events/event_source.h" @@ -177,6 +179,12 @@ // |demo_config|. void HandleStartDemoModeSetupForTesting(const std::string& demo_config); + // Shows the reset screen if |is_reset_allowed| and updates the + // tpm_firmware_update in settings. + void HandleToggleResetScreenCallback( + bool is_reset_allowed, + base::Optional<tpm_firmware_update::Mode> tpm_firmware_update_mode); + // When keyboard_utils.js arrow key down event is reached, raise it // to tab/shift-tab event. void HandleRaiseTabKeyEvent(bool reverse);
diff --git a/chrome/browser/ui/webui/history_ui.cc b/chrome/browser/ui/webui/history_ui.cc index 8c4b735..2d1d34df 100644 --- a/chrome/browser/ui/webui/history_ui.cc +++ b/chrome/browser/ui/webui/history_ui.cc
@@ -30,10 +30,10 @@ #include "chrome/grit/locale_settings.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" namespace {
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc index 98817b8..7fcad9d 100644 --- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc +++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
@@ -35,9 +35,9 @@ #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" #include "chrome/test/base/web_ui_browser_test.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "google_apis/gaia/gaia_urls.h" #include "net/http/http_status_code.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h index 9309252..70a4c0e 100644 --- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h +++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
@@ -16,9 +16,9 @@ #include "chrome/browser/printing/cloud_print/privet_device_lister.h" #include "chrome/browser/printing/cloud_print/privet_http.h" #include "components/prefs/pref_member.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_ui_message_handler.h" #include "printing/buildflags/buildflags.h" -#include "services/identity/public/cpp/identity_manager.h" #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !defined(OS_CHROMEOS) #define CLOUD_PRINT_CONNECTOR_UI_AVAILABLE
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc index 6ec7418..e542e7d 100644 --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
@@ -27,10 +27,10 @@ #include "chrome/grit/generated_resources.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "content/public/browser/web_ui.h" #include "extensions/common/constants.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" namespace media_router {
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc index 30278b76..2dcf1f8 100644 --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -36,13 +36,13 @@ #include "components/bookmarks/common/bookmark_pref_names.h" #include "components/google/core/common/google_util.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/render_process_host.h" #include "extensions/common/extension.h" #include "extensions/common/extension_urls.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/template_expressions.h"
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc index 46708272..d524540 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -63,6 +63,7 @@ #include "components/printing/common/cloud_print_cdd_conversion.h" #include "components/printing/common/print_messages.h" #include "components/signin/core/browser/account_consistency_method.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/url_formatter/url_formatter.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/render_frame_host.h" @@ -75,7 +76,6 @@ #include "printing/backend/print_backend_consts.h" #include "printing/buildflags/buildflags.h" #include "printing/print_settings.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "third_party/icu/source/i18n/unicode/ulocdata.h" #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.h b/chrome/browser/ui/webui/print_preview/print_preview_handler.h index ff2893e..923414d2 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.h +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.h
@@ -18,10 +18,10 @@ #include "base/timer/timer.h" #include "chrome/common/buildflags.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_ui_message_handler.h" #include "printing/backend/print_backend.h" #include "printing/buildflags/buildflags.h" -#include "services/identity/public/cpp/identity_manager.h" namespace base { class DictionaryValue;
diff --git a/chrome/browser/ui/webui/print_preview/privet_printer_handler.cc b/chrome/browser/ui/webui/print_preview/privet_printer_handler.cc index 3f072e1..5552f767 100644 --- a/chrome/browser/ui/webui/print_preview/privet_printer_handler.cc +++ b/chrome/browser/ui/webui/print_preview/privet_printer_handler.cc
@@ -20,7 +20,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/webui/print_preview/print_preview_utils.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "ui/gfx/geometry/size.h"
diff --git a/chrome/browser/ui/webui/profile_info_watcher.cc b/chrome/browser/ui/webui/profile_info_watcher.cc index a4f62d8..c04989c1 100644 --- a/chrome/browser/ui/webui/profile_info_watcher.cc +++ b/chrome/browser/ui/webui/profile_info_watcher.cc
@@ -13,7 +13,7 @@ #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_pref_names.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" ProfileInfoWatcher::ProfileInfoWatcher( Profile* profile, const base::Closure& callback)
diff --git a/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h b/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h index df7c01b..2e9a051 100644 --- a/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h
@@ -13,7 +13,7 @@ #include "base/scoped_observer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/components/account_manager/account_manager.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace chromeos { namespace settings {
diff --git a/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h b/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h index 7520d73..4bdb8cd 100644 --- a/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h
@@ -14,7 +14,7 @@ #include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/dbus/kerberos/kerberos_service.pb.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace kerberos { class ListAccountsResponse;
diff --git a/chrome/browser/ui/webui/settings/people_handler.cc b/chrome/browser/ui/webui/settings/people_handler.cc index c9d4d1d..b867bd1 100644 --- a/chrome/browser/ui/webui/settings/people_handler.cc +++ b/chrome/browser/ui/webui/settings/people_handler.cc
@@ -40,6 +40,9 @@ #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/strings/grit/components_strings.h" #include "components/sync/base/passphrase_enums.h" #include "components/sync/base/user_selectable_type.h" @@ -52,9 +55,6 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h"
diff --git a/chrome/browser/ui/webui/settings/people_handler.h b/chrome/browser/ui/webui/settings/people_handler.h index 010e9ed3..9fc6f779 100644 --- a/chrome/browser/ui/webui/settings/people_handler.h +++ b/chrome/browser/ui/webui/settings/people_handler.h
@@ -21,9 +21,9 @@ #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "components/prefs/pref_change_registrar.h" #include "components/signin/core/browser/signin_buildflags.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service_observer.h" #include "content/public/browser/web_contents_observer.h" -#include "services/identity/public/cpp/identity_manager.h" class LoginUIService;
diff --git a/chrome/browser/ui/webui/settings/people_handler_unittest.cc b/chrome/browser/ui/webui/settings/people_handler_unittest.cc index 7e56e13..8a947cd 100644 --- a/chrome/browser/ui/webui/settings/people_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/people_handler_unittest.cc
@@ -35,6 +35,9 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/base/passphrase_enums.h" #include "components/sync/driver/mock_sync_service.h" #include "components/sync/driver/sync_user_settings_impl.h" @@ -47,9 +50,6 @@ #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_web_ui.h" #include "content/public/test/web_contents_tester.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" using ::testing::_;
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc index 71f9cdb..cd56f96a 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -31,11 +31,11 @@ #include "components/feature_engagement/buildflags.h" #include "components/prefs/pref_member.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/browsing_data_filter_builder.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/text/bytes_formatting.h" #if BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc index 8d4e51f..ff1b5a81 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc
@@ -35,14 +35,14 @@ #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" #include "components/unified_consent/feature.h" #include "components/unified_consent/unified_consent_service.h" #include "content/public/browser/storage_partition.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" namespace {
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc index b6aa3286..7bcf5ba 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
@@ -31,6 +31,8 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/mock_sync_service.h" #include "components/sync/driver/sync_user_settings_mock.h" #include "components/unified_consent/feature.h" @@ -38,8 +40,6 @@ #include "components/unified_consent/url_keyed_data_collection_consent_helper.h" #include "content/public/test/test_browser_thread_bundle.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc b/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc index 344eb15..98c10c5 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc
@@ -17,8 +17,8 @@ #include "chromeos/components/account_manager/account_manager.h" #include "chromeos/components/account_manager/account_manager_factory.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_urls.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace chromeos {
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index 440393e..24ec93f5 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -62,16 +62,16 @@ #include "components/signin/core/browser/signin_investigator.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_ui.h" #include "google_apis/gaia/gaia_auth_fetcher.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" #include "net/base/url_util.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "ui/base/l10n/l10n_util.h" #if defined(OS_WIN)
diff --git a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc index 316a213..6e79e75 100644 --- a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc +++ b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc
@@ -21,12 +21,12 @@ #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" #include "chrome/browser/ui/webui/signin/signin_utils.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_types.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" -#include "services/identity/public/cpp/identity_manager.h" using content::MessageLoopRunner;
diff --git a/chrome/browser/ui/webui/signin/signin_utils_desktop.cc b/chrome/browser/ui/webui/signin/signin_utils_desktop.cc index b907f5a..381fe32 100644 --- a/chrome/browser/ui/webui/signin/signin_utils_desktop.cc +++ b/chrome/browser/ui/webui/signin/signin_utils_desktop.cc
@@ -20,7 +20,7 @@ #include "components/guest_view/browser/guest_view_manager.h" #include "components/signin/core/browser/identity_utils.h" #include "components/signin/core/browser/signin_pref_names.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ui/base/l10n/l10n_util.h" bool CanOfferSignin(Profile* profile,
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h index b3a8eba..aae31f3 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h
@@ -12,8 +12,8 @@ #include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "components/consent_auditor/consent_auditor.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_ui_message_handler.h" -#include "services/identity/public/cpp/identity_manager.h" namespace base { class ListValue;
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc index 7d27ddd..83bb5207 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc +++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
@@ -17,11 +17,11 @@ #include "chrome/grit/browser_resources.h" #include "chrome/grit/generated_resources.h" #include "components/signin/core/browser/avatar_icon_util.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/unified_consent/feature.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h"
diff --git a/chrome/browser/ui/webui/signin_internals_ui.cc b/chrome/browser/ui/webui/signin_internals_ui.cc index d358c42..de1914f 100644 --- a/chrome/browser/ui/webui/signin_internals_ui.cc +++ b/chrome/browser/ui/webui/signin_internals_ui.cc
@@ -15,9 +15,9 @@ #include "chrome/common/url_constants.h" #include "components/grit/components_resources.h" #include "components/signin/core/browser/about_signin_internals.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "services/identity/public/cpp/identity_manager.h" namespace {
diff --git a/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc b/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc index c776a28..4cc098c 100644 --- a/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc +++ b/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc
@@ -23,12 +23,12 @@ #include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h" #include "chrome/browser/supervised_user/supervised_user_url_filter.h" #include "chrome/common/channel_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/supervised_user_error_page/supervised_user_error_page.h" #include "components/url_formatter/url_fixer.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_ui.h" -#include "services/identity/public/cpp/identity_manager.h" using content::BrowserThread;
diff --git a/chrome/browser/ui/webui/welcome/welcome_handler.cc b/chrome/browser/ui/webui/welcome/welcome_handler.cc index e0d62ec0..58b367e 100644 --- a/chrome/browser/ui/webui/welcome/welcome_handler.cc +++ b/chrome/browser/ui/webui/welcome/welcome_handler.cc
@@ -16,7 +16,7 @@ #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" #include "chrome/common/url_constants.h" #include "components/signin/core/browser/signin_metrics.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ui/base/page_transition_types.h" const char kWelcomeReturningUserUrl[] = "chrome://welcome/returning-user";
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index f8ea981..044dbe58 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -344,12 +344,6 @@ const base::Feature kHTTPAuthCommittedInterstitials{ "HTTPAuthCommittedInterstitials", base::FEATURE_DISABLED_BY_DEFAULT}; -#if !defined(OS_ANDROID) -// Replaces the WebUI Cast dialog with a Views toolkit one. -const base::Feature kViewsCastDialog{"ViewsCastDialog", - base::FEATURE_ENABLED_BY_DEFAULT}; -#endif // !defined(OS_ANDROID) - // Enables navigation suggestions UI for lookalike URLs (e.g. internationalized // domain names that are visually similar to popular domains or to domains with // engagement score, such as googlé.com).
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index b7c49424..a39caa3 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -230,10 +230,6 @@ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kHTTPAuthCommittedInterstitials; -#if !defined(OS_ANDROID) -COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kViewsCastDialog; -#endif - #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kIncompatibleApplicationsWarning;
diff --git a/chrome/common/media_router/mojo/media_router.mojom b/chrome/common/media_router/mojo/media_router.mojom index de758c6..d806f34 100644 --- a/chrome/common/media_router/mojo/media_router.mojom +++ b/chrome/common/media_router/mojo/media_router.mojom
@@ -236,9 +236,6 @@ // If the MRP should enable Cast sink query. bool enable_cast_sink_query; - // If the Views dialog is being used. - bool use_views_dialog; - // If Mirroring Service is being used. bool use_mirroring_service; };
diff --git a/chrome/renderer/resources/extensions/media_router_bindings.js b/chrome/renderer/resources/extensions/media_router_bindings.js index 624bf02..be19cad 100644 --- a/chrome/renderer/resources/extensions/media_router_bindings.js +++ b/chrome/renderer/resources/extensions/media_router_bindings.js
@@ -800,7 +800,6 @@ 'enable_cast_discovery': response.config.enableCastDiscovery, 'enable_dial_sink_query': response.config.enableDialSinkQuery, 'enable_cast_sink_query': response.config.enableCastSinkQuery, - 'use_views_dialog': response.config.useViewsDialog, 'use_mirroring_service': response.config.useMirroringService, } };
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 2775d4e..d58c512 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1351,11 +1351,11 @@ "//components/arc:arc_test_support", "//components/exo:test_support", "//components/prefs", + "//components/signin/public/identity_manager", "//components/user_manager:test_support", "//content/public/common:feature_h264_with_openh264_ffmpeg", "//mojo/core/embedder", "//services/audio/public/cpp:test_support", - "//services/identity/public/cpp", "//services/network/public/mojom", "//services/preferences/public/cpp", "//services/preferences/public/mojom", @@ -2204,7 +2204,6 @@ "base/interactive_test_utils.h", "base/interactive_test_utils_aura.cc", "base/interactive_test_utils_aura.h", - "base/interactive_test_utils_common_views.cc", "base/interactive_test_utils_views.cc", ] if (enable_cros_assistant) { @@ -5111,7 +5110,7 @@ "base/interactive_test_utils.h", "base/interactive_test_utils_aura.cc", "base/interactive_test_utils_aura.h", - "base/interactive_test_utils_common_views.cc", + "base/interactive_test_utils_views.cc", "base/interactive_ui_tests_main.cc", ] configs += [ "//build/config:precompiled_headers" ] @@ -5241,8 +5240,8 @@ "base/interactive_test_utils.h", "base/interactive_test_utils_aura.cc", "base/interactive_test_utils_aura.h", - "base/interactive_test_utils_common_views.cc", "base/interactive_test_utils_mac.mm", + "base/interactive_test_utils_views.cc", "base/interactive_test_utils_win.cc", "base/interactive_ui_tests_main.cc", "base/save_desktop_snapshot_win.cc", @@ -5402,7 +5401,6 @@ "../browser/ui/views/toolbar/toolbar_button_interactive_uitest.cc", "../browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc", "../browser/ui/views/translate/translate_bubble_test_utils_views.cc", - "base/interactive_test_utils_views.cc", ] deps += [ "//ui/views", @@ -5720,12 +5718,12 @@ "//base", "//components/invalidation/impl", "//components/invalidation/impl:test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync", "//components/sync:test_support_model", "//components/sync/test/fake_server", "//content/test:test_support", "//net", - "//services/identity/public/cpp:test_support", "//skia", ] @@ -6027,8 +6025,8 @@ "../browser/password_manager/password_manager_test_base.h", "base/interactive_test_utils.cc", "base/interactive_test_utils.h", - "base/interactive_test_utils_common_views.cc", "base/interactive_test_utils_mac.mm", + "base/interactive_test_utils_views.cc", "base/interactive_test_utils_win.cc", "base/interactive_ui_tests_main.cc", "base/window_contents_as_string_win.cc",
diff --git a/chrome/test/base/chrome_render_view_host_test_harness.cc b/chrome/test/base/chrome_render_view_host_test_harness.cc index a577f0c..7a3fd7a 100644 --- a/chrome/test/base/chrome_render_view_host_test_harness.cc +++ b/chrome/test/base/chrome_render_view_host_test_harness.cc
@@ -34,6 +34,20 @@ content::BrowserContext* ChromeRenderViewHostTestHarness::CreateBrowserContext() { + // Maintain the profile directory ourselves so that it isn't deleted along + // with TestingProfile. RenderViewHostTestHarness::TearDown() will destroy + // the profile and also destroy the thread bundle to ensure that any tasks + // posted throughout the test run to completion. By postponing the deletion + // of the profile directory until ~ChromeRenderViewHostTestHarness() we + // guarantee that no tasks will try to access the profile directory when it's + // (being) deleted. + auto temp_dir = std::make_unique<base::ScopedTempDir>(); + CHECK(temp_dir->CreateUniqueTempDir()); + TestingProfile::Builder builder; + builder.SetPath(temp_dir->GetPath()); + + temp_dirs_.push_back(std::move(temp_dir)); + return builder.Build().release(); }
diff --git a/chrome/test/base/chrome_render_view_host_test_harness.h b/chrome/test/base/chrome_render_view_host_test_harness.h index eee3ebe..ce8b35c2 100644 --- a/chrome/test/base/chrome_render_view_host_test_harness.h +++ b/chrome/test/base/chrome_render_view_host_test_harness.h
@@ -5,7 +5,11 @@ #ifndef CHROME_TEST_BASE_CHROME_RENDER_VIEW_HOST_TEST_HARNESS_H_ #define CHROME_TEST_BASE_CHROME_RENDER_VIEW_HOST_TEST_HARNESS_H_ +#include <memory> +#include <vector> + #include "base/compiler_specific.h" +#include "base/files/scoped_temp_dir.h" #include "content/public/test/test_renderer_host.h" class TestingProfile; @@ -31,6 +35,9 @@ // content::RenderViewHostTestHarness. content::BrowserContext* CreateBrowserContext() override; + + private: + std::vector<std::unique_ptr<base::ScopedTempDir>> temp_dirs_; }; #endif // CHROME_TEST_BASE_CHROME_RENDER_VIEW_HOST_TEST_HARNESS_H_
diff --git a/chrome/test/base/interactive_test_utils_common_views.cc b/chrome/test/base/interactive_test_utils_common_views.cc deleted file mode 100644 index d495ec6..0000000 --- a/chrome/test/base/interactive_test_utils_common_views.cc +++ /dev/null
@@ -1,99 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Methods compiled on all toolkit-views platforms (including Mac). - -#include "base/bind.h" -#include "base/macros.h" -#include "base/run_loop.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_window.h" -#include "chrome/test/base/interactive_test_utils.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "ui/compositor/layer.h" -#include "ui/compositor/layer_animator.h" -#include "ui/views/view.h" -#include "ui/views/view_observer.h" -#include "ui/views/widget/widget.h" - -namespace ui_test_utils { - -namespace { - -// A helper to wait until a view either gains or loses focus. -class ViewFocusWaiter : public views::ViewObserver { - public: - ViewFocusWaiter(views::View* view, bool focused) - : view_(view), target_focused_(focused) { - view->AddObserver(this); - } - - ~ViewFocusWaiter() override { view_->RemoveObserver(this); } - - // views::ViewObserver: - void OnViewFocused(views::View* observed_view) override { - if (target_focused_ && run_loop_.running()) - run_loop_.Quit(); - } - - void OnViewBlurred(views::View* observed_view) override { - if (!target_focused_ && run_loop_.running()) - run_loop_.Quit(); - } - - void Wait() { - if (view_->HasFocus() != target_focused_) - run_loop_.Run(); - } - - private: - base::RunLoop run_loop_; - views::View* view_; - const bool target_focused_; - - DISALLOW_COPY_AND_ASSIGN(ViewFocusWaiter); -}; - -} // namespace - -void MoveMouseToCenterAndPress(views::View* view, - ui_controls::MouseButton button, - int button_state, - base::OnceClosure closure, - int accelerator_state) { - DCHECK(view); - DCHECK(view->GetWidget()); - // Complete any in-progress animation before sending the events so that the - // mouse-event targetting happens reliably, and does not flake because of - // unreliable animation state. - ui::Layer* layer = view->GetWidget()->GetLayer(); - if (layer) { - ui::LayerAnimator* animator = layer->GetAnimator(); - if (animator && animator->is_animating()) - animator->StopAnimating(); - } - - gfx::Point view_center = GetCenterInScreenCoordinates(view); - ui_controls::SendMouseMoveNotifyWhenDone( - view_center.x(), view_center.y(), - base::BindOnce(&internal::ClickTask, button, button_state, - std::move(closure), accelerator_state)); -} - -gfx::Point GetCenterInScreenCoordinates(const views::View* view) { - gfx::Point center = view->GetLocalBounds().CenterPoint(); - views::View::ConvertPointToScreen(view, ¢er); - return center; -} - -void WaitForViewFocus(Browser* browser, ViewID vid, bool focused) { - views::View* view = views::Widget::GetWidgetForNativeWindow( - browser->window()->GetNativeWindow()) - ->GetContentsView() - ->GetViewByID(vid); - ASSERT_TRUE(view); - ViewFocusWaiter(view, focused).Wait(); -} - -} // namespace ui_test_utils
diff --git a/chrome/test/base/interactive_test_utils_views.cc b/chrome/test/base/interactive_test_utils_views.cc index ec566ac..3723adbe 100644 --- a/chrome/test/base/interactive_test_utils_views.cc +++ b/chrome/test/base/interactive_test_utils_views.cc
@@ -2,18 +2,64 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/test/base/interactive_test_utils.h" - +#include "base/bind.h" +#include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "build/buildflag.h" #include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/test/base/interactive_test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" #include "ui/base/buildflags.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/layer_animator.h" #include "ui/views/focus/focus_manager.h" +#include "ui/views/view.h" +#include "ui/views/view_observer.h" +#include "ui/views/widget/widget.h" namespace ui_test_utils { +namespace { + +// A helper to wait until a view either gains or loses focus. +class ViewFocusWaiter : public views::ViewObserver { + public: + ViewFocusWaiter(views::View* view, bool focused) + : view_(view), target_focused_(focused) { + view->AddObserver(this); + } + + ~ViewFocusWaiter() override { view_->RemoveObserver(this); } + + // views::ViewObserver: + void OnViewFocused(views::View* observed_view) override { + if (target_focused_ && run_loop_.running()) + run_loop_.Quit(); + } + + void OnViewBlurred(views::View* observed_view) override { + if (!target_focused_ && run_loop_.running()) + run_loop_.Quit(); + } + + void Wait() { + if (view_->HasFocus() != target_focused_) + run_loop_.Run(); + } + + private: + base::RunLoop run_loop_; + views::View* view_; + const bool target_focused_; + + DISALLOW_COPY_AND_ASSIGN(ViewFocusWaiter); +}; + +} // namespace + bool IsViewFocused(const Browser* browser, ViewID vid) { BrowserWindow* browser_window = browser->window(); DCHECK(browser_window); @@ -45,4 +91,43 @@ view->RequestFocus(); } +void MoveMouseToCenterAndPress(views::View* view, + ui_controls::MouseButton button, + int button_state, + base::OnceClosure closure, + int accelerator_state) { + DCHECK(view); + DCHECK(view->GetWidget()); + // Complete any in-progress animation before sending the events so that the + // mouse-event targeting happens reliably, and does not flake because of + // unreliable animation state. + ui::Layer* layer = view->GetWidget()->GetLayer(); + if (layer) { + ui::LayerAnimator* animator = layer->GetAnimator(); + if (animator && animator->is_animating()) + animator->StopAnimating(); + } + + gfx::Point view_center = GetCenterInScreenCoordinates(view); + ui_controls::SendMouseMoveNotifyWhenDone( + view_center.x(), view_center.y(), + base::BindOnce(&internal::ClickTask, button, button_state, + std::move(closure), accelerator_state)); +} + +gfx::Point GetCenterInScreenCoordinates(const views::View* view) { + gfx::Point center = view->GetLocalBounds().CenterPoint(); + views::View::ConvertPointToScreen(view, ¢er); + return center; +} + +void WaitForViewFocus(Browser* browser, ViewID vid, bool focused) { + views::View* view = views::Widget::GetWidgetForNativeWindow( + browser->window()->GetNativeWindow()) + ->GetContentsView() + ->GetViewByID(vid); + ASSERT_TRUE(view); + ViewFocusWaiter(view, focused).Wait(); +} + } // namespace ui_test_utils
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc index 08c65393..2f66d32 100644 --- a/chrome/test/base/testing_profile.cc +++ b/chrome/test/base/testing_profile.cc
@@ -93,6 +93,7 @@ #include "components/policy/core/common/policy_service_impl.h" #include "components/policy/core/common/schema.h" #include "components/prefs/testing_pref_store.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync/model/fake_sync_change_processor.h" #include "components/sync/model/sync_error_factory_mock.h" #include "components/sync_preferences/pref_service_mock_factory.h" @@ -118,7 +119,6 @@ #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_test_util.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "services/network/test/test_network_connection_tracker.h" #include "services/service_manager/public/cpp/service.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chrome/test/data/offline_pages/.gitattributes b/chrome/test/data/offline_pages/.gitattributes index 06cf9fa..83786bd5 100644 --- a/chrome/test/data/offline_pages/.gitattributes +++ b/chrome/test/data/offline_pages/.gitattributes
@@ -3,7 +3,3 @@ # (i.e. LF in case of the file below). We tell git to treat these files # as "binary" to preserve this weird mixture of CRLF and LF line endings. *.mhtml binary - -# Test.mhtml is quoted-printable so all the line endings can be crlf. -test.mhtml text eol=crlf -
diff --git a/chrome/test/data/offline_pages/test.mhtml b/chrome/test/data/offline_pages/welcome.mhtml similarity index 99% rename from chrome/test/data/offline_pages/test.mhtml rename to chrome/test/data/offline_pages/welcome.mhtml index a57f6ec..cf04a5d 100644 --- a/chrome/test/data/offline_pages/test.mhtml +++ b/chrome/test/data/offline_pages/welcome.mhtml
@@ -1,17 +1,17 @@ -From: <Saved by UnMHT> -Subject: Test -Date: Mon, Nov 21 2011 10:59:06 GMT-0800 -MIME-Version: 1.0 -Content-Type: multipart/related; - boundary="----=_NextPart_000_0000_0324C3DC.A3C79392"; - type="text/html" - -------=_NextPart_000_0000_0324C3DC.A3C79392 -Content-Type: text/html; charset="UTF-8" -Content-Transfer-Encoding: quoted-printable -Content-Location: http://www.example.com - -<html> -Welcome! -</html> -------=_NextPart_000_0000_0324C3DC.A3C79392-- +From: <Saved by UnMHT> +Subject: Test +Date: Mon, Nov 21 2011 10:59:06 GMT-0800 +MIME-Version: 1.0 +Content-Type: multipart/related; + boundary="----=_NextPart_000_0000_0324C3DC.A3C79392"; + type="text/html" + +------=_NextPart_000_0000_0324C3DC.A3C79392 +Content-Type: text/html; charset="UTF-8" +Content-Transfer-Encoding: quoted-printable +Content-Location: http://www.example.com + +<html> +Welcome! +</html> +------=_NextPart_000_0000_0324C3DC.A3C79392--
diff --git a/chrome/test/data/webui/ntp4_browsertest.cc b/chrome/test/data/webui/ntp4_browsertest.cc index 853f5be..cdd0484 100644 --- a/chrome/test/data/webui/ntp4_browsertest.cc +++ b/chrome/test/data/webui/ntp4_browsertest.cc
@@ -6,8 +6,8 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/browser.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" NTP4LoggedInWebUITest::NTP4LoggedInWebUITest() {}
diff --git a/chrome/test/data/webui/settings/appearance_page_test.js b/chrome/test/data/webui/settings/appearance_page_test.js index c703cb7..409087bb 100644 --- a/chrome/test/data/webui/settings/appearance_page_test.js +++ b/chrome/test/data/webui/settings/appearance_page_test.js
@@ -150,6 +150,7 @@ }); if (cr.isChromeOS) { + // TODO(crbug/950007): Remove when SplitSettings is complete. test('wallpaperManager', function() { appearanceBrowserProxy.setIsWallpaperPolicyControlled(false); // TODO(dschuyler): This should notice the policy change without needing @@ -165,6 +166,7 @@ }); }); + // TODO(crbug/950007): Remove when SplitSettings is complete. test('wallpaperSettingVisible', function() { appearancePage.set('pageVisibility.setWallpaper', false); return appearanceBrowserProxy.whenCalled('isWallpaperSettingVisible') @@ -174,6 +176,7 @@ }); }); + // TODO(crbug/950007): Remove when SplitSettings is complete. test('wallpaperPolicyControlled', function() { // Should show the wallpaper policy indicator and disable the toggle // button if the wallpaper is policy controlled.
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js index edc2f1e..52013b8c 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -148,6 +148,23 @@ mocha.run(); }); +// Tests for the Personalization section. +// eslint-disable-next-line no-var +var OSSettingsPersonalizationPageTest = class extends OSSettingsBrowserTest { + /** @override */ + get extraLibraries() { + return super.extraLibraries.concat([ + '//ui/webui/resources/js/promise_resolver.js', + BROWSER_SETTINGS_PATH + '../test_browser_proxy.js', + 'personalization_page_test.js', + ]); + } +}; + +TEST_F('OSSettingsPersonalizationPageTest', 'All', function() { + mocha.run(); +}); + // Tests for the About section. // eslint-disable-next-line no-var var OSSettingsAboutPageTest = class extends OSSettingsBrowserTest {
diff --git a/chrome/test/data/webui/settings/chromeos/personalization_page_test.js b/chrome/test/data/webui/settings/chromeos/personalization_page_test.js new file mode 100644 index 0000000..de53742 --- /dev/null +++ b/chrome/test/data/webui/settings/chromeos/personalization_page_test.js
@@ -0,0 +1,124 @@ +// Copyright 2019 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. + +/** @implements {settings.AppearanceBrowserProxy} */ +class TestPersonalizationBrowserProxy extends TestBrowserProxy { + constructor() { + super([ + 'isWallpaperSettingVisible', + 'isWallpaperPolicyControlled', + 'openWallpaperManager', + ]); + + /** @private */ + this.isWallpaperSettingVisible_ = true; + + /** @private */ + this.isWallpaperPolicyControlled_ = false; + } + + /** @override */ + isWallpaperSettingVisible() { + this.methodCalled('isWallpaperSettingVisible'); + return Promise.resolve(this.isWallpaperSettingVisible_); + } + + /** @override */ + isWallpaperPolicyControlled() { + this.methodCalled('isWallpaperPolicyControlled'); + return Promise.resolve(this.isWallpaperPolicyControlled_); + } + + /** @override */ + openWallpaperManager() { + this.methodCalled('openWallpaperManager'); + } + + /** @param {boolean} Whether the wallpaper is policy controlled. */ + setIsWallpaperPolicyControlled(isPolicyControlled) { + this.isWallpaperPolicyControlled_ = isPolicyControlled; + } +} + +let personalizationPage = null; + +/** @type {?TestPersonalizationBrowserProxy} */ +let personalizationBrowserProxy = null; + +function createPersonalizationPage() { + personalizationBrowserProxy.reset(); + PolymerTest.clearBody(); + + personalizationPage = document.createElement('settings-personalization-page'); + personalizationPage.set('prefs', { + extensions: { + theme: { + id: { + value: '', + }, + use_system: { + value: false, + }, + }, + }, + }); + + personalizationPage.set('pageVisibility', { + setWallpaper: true, + }); + + document.body.appendChild(personalizationPage); + Polymer.dom.flush(); +} + +suite('PersonalizationHandler', function() { + setup(function() { + personalizationBrowserProxy = new TestPersonalizationBrowserProxy(); + settings.PersonalizationBrowserProxyImpl.instance_ = + personalizationBrowserProxy; + createPersonalizationPage(); + }); + + teardown(function() { + personalizationPage.remove(); + }); + + test('wallpaperManager', function() { + personalizationBrowserProxy.setIsWallpaperPolicyControlled(false); + // TODO(dschuyler): This should notice the policy change without needing + // the page to be recreated. + createPersonalizationPage(); + return personalizationBrowserProxy.whenCalled('isWallpaperPolicyControlled') + .then(() => { + const button = personalizationPage.$.wallpaperButton; + assertTrue(!!button); + assertFalse(button.disabled); + button.click(); + return personalizationBrowserProxy.whenCalled('openWallpaperManager'); + }); + }); + + test('wallpaperSettingVisible', function() { + personalizationPage.set('pageVisibility.setWallpaper', false); + return personalizationBrowserProxy.whenCalled('isWallpaperSettingVisible') + .then(function() { + Polymer.dom.flush(); + assertTrue(personalizationPage.$$('#wallpaperButton').hidden); + }); + }); + + test('wallpaperPolicyControlled', function() { + // Should show the wallpaper policy indicator and disable the toggle + // button if the wallpaper is policy controlled. + personalizationBrowserProxy.setIsWallpaperPolicyControlled(true); + createPersonalizationPage(); + return personalizationBrowserProxy.whenCalled('isWallpaperPolicyControlled') + .then(function() { + Polymer.dom.flush(); + assertFalse( + personalizationPage.$$('#wallpaperPolicyIndicator').hidden); + assertTrue(personalizationPage.$$('#wallpaperButton').disabled); + }); + }); +});
diff --git a/chrome/test/media_router/media_router_base_browsertest.cc b/chrome/test/media_router/media_router_base_browsertest.cc index 03145cd5..43331c3 100644 --- a/chrome/test/media_router/media_router_base_browsertest.cc +++ b/chrome/test/media_router/media_router_base_browsertest.cc
@@ -40,9 +40,6 @@ void MediaRouterBaseBrowserTest::SetUp() { ParseCommandLine(); - // The integration and E2E tests depend on the WebUI Cast dialog, so the Views - // dialog must be disabled. - feature_list_.InitAndEnableFeature(features::kViewsCastDialog); ExtensionBrowserTest::SetUp(); }
diff --git a/chromecast/media/cma/backend/buffering_mixer_source.cc b/chromecast/media/cma/backend/buffering_mixer_source.cc index f184375..fd8d286e3 100644 --- a/chromecast/media/cma/backend/buffering_mixer_source.cc +++ b/chromecast/media/cma/backend/buffering_mixer_source.cc
@@ -46,10 +46,6 @@ const int64_t kCommsInputQueueMs = 200; const int64_t kCommsStartThresholdMs = 150; -// Maximum amount that we can be late for starting playback (if a start time -// is specified). -constexpr base::TimeDelta kMaxStartDelay = base::TimeDelta::FromSeconds(5); - std::string AudioContentTypeToString(media::AudioContentType type) { switch (type) { case media::AudioContentType::kAlarm: @@ -346,6 +342,10 @@ LOG(INFO) << (paused ? "Pausing " : "Unpausing ") << device_id_ << " (" << this << ")"; auto locked = locked_members_.Lock(); + // Clear start timestamp, since a pause should invalidate the start timestamp + // anyway. The AV sync code can restart (hard correction) on resume if + // needed. + locked->playback_start_timestamp_ = INT64_MIN; locked->mixer_rendering_delay_ = RenderingDelay(); locked->paused_ = paused; } @@ -438,14 +438,6 @@ locked->queued_frames_ >= locked->fader_.FramesNeededFromSource(num_frames)); - // Error out if we have taken too long to start. - if (!locked->started_ && - playback_absolute_timestamp - locked->playback_start_timestamp_ > - kMaxStartDelay.InMicroseconds()) { - LOG(ERROR) << "Took too long to start playing"; - POST_TASK_TO_CALLER_THREAD(PostError, MixerError::kInternalError); - } - if (locked->started_) { int64_t start_pts = locked->queue_.front()->timestamp() + SamplesToMicroseconds(locked->current_buffer_offset_,
diff --git a/chromeos/login/auth/BUILD.gn b/chromeos/login/auth/BUILD.gn index 919ba70..973c33a 100644 --- a/chromeos/login/auth/BUILD.gn +++ b/chromeos/login/auth/BUILD.gn
@@ -50,6 +50,8 @@ "challenge_response/cert_utils.h", "challenge_response/key_label_utils.cc", "challenge_response/key_label_utils.h", + "challenge_response/known_user_pref_utils.cc", + "challenge_response/known_user_pref_utils.h", "cryptohome_authenticator.cc", "cryptohome_authenticator.h", "extended_authenticator.cc",
diff --git a/chromeos/login/auth/challenge_response/known_user_pref_utils.cc b/chromeos/login/auth/challenge_response/known_user_pref_utils.cc new file mode 100644 index 0000000..473c6cc --- /dev/null +++ b/chromeos/login/auth/challenge_response/known_user_pref_utils.cc
@@ -0,0 +1,34 @@ +// Copyright 2019 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 "chromeos/login/auth/challenge_response/known_user_pref_utils.h" + +#include <string> +#include <utility> + +#include "base/base64.h" +#include "base/values.h" + +namespace chromeos { + +namespace { + +constexpr char kPublicKeySpkiKey[] = "public_key_spki"; + +} // namespace + +base::Value SerializeChallengeResponseKeysForKnownUser( + const std::vector<ChallengeResponseKey>& challenge_response_keys) { + base::Value pref_value(base::Value::Type::LIST); + for (const auto& key : challenge_response_keys) { + std::string spki_base64; + base::Base64Encode(key.public_key_spki_der(), &spki_base64); + base::Value key_representation(base::Value::Type::DICTIONARY); + key_representation.SetKey(kPublicKeySpkiKey, base::Value(spki_base64)); + pref_value.GetList().emplace_back(std::move(key_representation)); + } + return pref_value; +} + +} // namespace chromeos
diff --git a/chromeos/login/auth/challenge_response/known_user_pref_utils.h b/chromeos/login/auth/challenge_response/known_user_pref_utils.h new file mode 100644 index 0000000..94c5d7b --- /dev/null +++ b/chromeos/login/auth/challenge_response/known_user_pref_utils.h
@@ -0,0 +1,31 @@ +// Copyright 2019 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 CHROMEOS_LOGIN_AUTH_CHALLENGE_RESPONSE_KNOWN_USER_PREF_UTILS_H_ +#define CHROMEOS_LOGIN_AUTH_CHALLENGE_RESPONSE_KNOWN_USER_PREF_UTILS_H_ + +#include <vector> + +#include "base/component_export.h" +#include "chromeos/login/auth/challenge_response_key.h" + +namespace base { +class Value; +} // namespace base + +namespace chromeos { + +// Builds the known_user value that contains information about the given +// challenge-response keys that can be used by the user to authenticate. +// +// The format currently is a list of dictionaries, each with the following keys: +// * "public_key_spki" - contains the base64-encoded DER blob of the X.509 +// Subject Public Key Info. +base::Value COMPONENT_EXPORT(CHROMEOS_LOGIN_AUTH) + SerializeChallengeResponseKeysForKnownUser( + const std::vector<ChallengeResponseKey>& challenge_response_keys); + +} // namespace chromeos + +#endif // CHROMEOS_LOGIN_AUTH_CHALLENGE_RESPONSE_KNOWN_USER_PREF_UTILS_H_
diff --git a/chromeos/services/device_sync/BUILD.gn b/chromeos/services/device_sync/BUILD.gn index 5c6b148..a5f6d76 100644 --- a/chromeos/services/device_sync/BUILD.gn +++ b/chromeos/services/device_sync/BUILD.gn
@@ -112,7 +112,7 @@ "//chromeos/components/multidevice", "//chromeos/components/multidevice/logging", "//chromeos/services/device_sync/public/mojom", - "//services/identity/public/mojom", + "//services/network/public/cpp", "//services/service_manager/public/cpp", ] @@ -127,8 +127,8 @@ "//chromeos/services/device_sync/public/cpp", "//chromeos/services/device_sync/public/mojom", "//components/gcm_driver", + "//components/signin/public/identity_manager", "//net", - "//services/identity/public/cpp", "//services/preferences/public/cpp", "//services/service_manager/public/cpp", ] @@ -235,8 +235,8 @@ "//chromeos/services/device_sync/public/mojom", "//components/gcm_driver:test_support", "//components/prefs:test_support", + "//components/signin/public/identity_manager:test_support", "//net/traffic_annotation:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//services/service_manager/public/cpp/test:test_support", "//testing/gmock",
diff --git a/chromeos/services/device_sync/DEPS b/chromeos/services/device_sync/DEPS index 1c91687..7d7a7bdb 100644 --- a/chromeos/services/device_sync/DEPS +++ b/chromeos/services/device_sync/DEPS
@@ -19,11 +19,11 @@ "-components/signin/core/browser/profile_oauth2_token_service.h", "-components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h", "-components/signin/core/browser/ubertoken_fetcher_impl.h", + "+components/signin/public", "+components/version_info", "+google_apis/gaia", "+mojo/public/cpp", - "+services/identity", "+services/network/public", "+services/network/test", "+services/preferences/public",
diff --git a/chromeos/services/device_sync/cryptauth_client_impl.cc b/chromeos/services/device_sync/cryptauth_client_impl.cc index 2c0b2c0a..efde1c48 100644 --- a/chromeos/services/device_sync/cryptauth_client_impl.cc +++ b/chromeos/services/device_sync/cryptauth_client_impl.cc
@@ -14,8 +14,8 @@ #include "chromeos/services/device_sync/proto/cryptauth_enrollment.pb.h" #include "chromeos/services/device_sync/proto/cryptauth_proto_to_query_parameters_util.h" #include "chromeos/services/device_sync/switches.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace chromeos {
diff --git a/chromeos/services/device_sync/cryptauth_client_impl.h b/chromeos/services/device_sync/cryptauth_client_impl.h index 9c906db..2f61d88d 100644 --- a/chromeos/services/device_sync/cryptauth_client_impl.h +++ b/chromeos/services/device_sync/cryptauth_client_impl.h
@@ -15,8 +15,8 @@ #include "chromeos/services/device_sync/cryptauth_api_call_flow.h" #include "chromeos/services/device_sync/cryptauth_client.h" #include "chromeos/services/device_sync/proto/cryptauth_api.pb.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/access_token_info.h" namespace identity { class IdentityManager;
diff --git a/chromeos/services/device_sync/cryptauth_client_impl_unittest.cc b/chromeos/services/device_sync/cryptauth_client_impl_unittest.cc index ad58d3ba..b2d3054 100644 --- a/chromeos/services/device_sync/cryptauth_client_impl_unittest.cc +++ b/chromeos/services/device_sync/cryptauth_client_impl_unittest.cc
@@ -23,8 +23,8 @@ #include "chromeos/services/device_sync/proto/cryptauth_v2_test_util.h" #include "chromeos/services/device_sync/proto/enum_util.h" #include "chromeos/services/device_sync/switches.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chromeos/services/device_sync/device_sync_impl.cc b/chromeos/services/device_sync/device_sync_impl.cc index 783cd05..bccb226 100644 --- a/chromeos/services/device_sync/device_sync_impl.cc +++ b/chromeos/services/device_sync/device_sync_impl.cc
@@ -30,7 +30,7 @@ #include "chromeos/services/device_sync/software_feature_manager_impl.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/service_manager/public/cpp/connector.h"
diff --git a/chromeos/services/device_sync/device_sync_service_unittest.cc b/chromeos/services/device_sync/device_sync_service_unittest.cc index d8a55635..4ba12ff 100644 --- a/chromeos/services/device_sync/device_sync_service_unittest.cc +++ b/chromeos/services/device_sync/device_sync_service_unittest.cc
@@ -44,7 +44,7 @@ #include "components/gcm_driver/fake_gcm_driver.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/service_manager/public/cpp/test/test_connector_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chromeos/services/device_sync/public/cpp/BUILD.gn b/chromeos/services/device_sync/public/cpp/BUILD.gn index 46e7cdf..6d76454 100644 --- a/chromeos/services/device_sync/public/cpp/BUILD.gn +++ b/chromeos/services/device_sync/public/cpp/BUILD.gn
@@ -66,8 +66,8 @@ "//chromeos/services/device_sync", "//chromeos/services/device_sync:test_support", "//components/gcm_driver:test_support", + "//components/signin/public/identity_manager:test_support", "//net", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//services/service_manager/public/cpp/test:test_support", "//testing/gtest",
diff --git a/chromeos/services/device_sync/public/cpp/device_sync_client_impl_unittest.cc b/chromeos/services/device_sync/public/cpp/device_sync_client_impl_unittest.cc index 3909c72..5c3c209 100644 --- a/chromeos/services/device_sync/public/cpp/device_sync_client_impl_unittest.cc +++ b/chromeos/services/device_sync/public/cpp/device_sync_client_impl_unittest.cc
@@ -26,7 +26,7 @@ #include "chromeos/services/device_sync/public/mojom/constants.mojom.h" #include "chromeos/services/device_sync/public/mojom/device_sync.mojom.h" #include "components/gcm_driver/fake_gcm_driver.h" -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/service_manager/public/cpp/test/test_connector_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/BUILD.gn b/components/BUILD.gn index 2131fd9d..ba91040d 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn
@@ -140,6 +140,7 @@ "//components/sessions:unit_tests", "//components/signin/core/browser:unit_tests", "//components/signin/core/browser/webdata:unit_tests", + "//components/signin/public/identity_manager:unit_tests", "//components/ssl_errors:unit_tests", "//components/subresource_filter/core/browser:unit_tests", "//components/subresource_filter/core/common:unit_tests",
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index 8630436..21d6b0b3 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -332,6 +332,7 @@ "//components/pref_registry", "//components/prefs", "//components/signin/core/browser:shared", + "//components/signin/public/identity_manager", "//components/strings", "//components/sync", "//components/variations/net", @@ -340,7 +341,6 @@ "//crypto", "//google_apis", "//net", - "//services/identity/public/cpp", "//services/metrics/public/cpp:metrics_cpp", "//services/metrics/public/cpp:ukm_builders", "//services/network/public/cpp", @@ -448,11 +448,11 @@ "//components/os_crypt:test_support", "//components/pref_registry", "//components/prefs:test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support", "//components/ukm", "//components/ukm:test_support", "//google_apis:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//services/network/public/cpp", "//skia", @@ -617,6 +617,7 @@ "//components/prefs:test_support", "//components/resources", "//components/security_state/core", + "//components/signin/public/identity_manager:test_support", "//components/strings", "//components/sync", "//components/sync:test_support_model", @@ -631,7 +632,6 @@ "//google_apis", "//google_apis:test_support", "//net:test_support", - "//services/identity/public/cpp:test_support", "//services/metrics/public/cpp:ukm_builders", "//services/network:test_support", "//services/network/public/cpp",
diff --git a/components/autofill/core/browser/DEPS b/components/autofill/core/browser/DEPS index 7cca31e..ea0964a 100644 --- a/components/autofill/core/browser/DEPS +++ b/components/autofill/core/browser/DEPS
@@ -25,6 +25,7 @@ "-components/signin/core/browser/profile_oauth2_token_service.h", "-components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h", "-components/signin/core/browser/ubertoken_fetcher_impl.h", + "+components/signin/public", "+components/sync", "+components/variations", @@ -36,7 +37,6 @@ "+google_apis/gaia", "+google_apis/google_api_keys.h", "+net", - "+services/identity/public", "+services/metrics/public", "+services/network/public", "+services/network/test",
diff --git a/components/autofill/core/browser/payments/credit_card_save_manager.cc b/components/autofill/core/browser/payments/credit_card_save_manager.cc index 5b3b414..0b5c0a8e 100644 --- a/components/autofill/core/browser/payments/credit_card_save_manager.cc +++ b/components/autofill/core/browser/payments/credit_card_save_manager.cc
@@ -42,7 +42,7 @@ #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/autofill/core/common/autofill_util.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "url/gurl.h" namespace autofill {
diff --git a/components/autofill/core/browser/payments/local_card_migration_manager.cc b/components/autofill/core/browser/payments/local_card_migration_manager.cc index 74c6c72..c068ee9 100644 --- a/components/autofill/core/browser/payments/local_card_migration_manager.cc +++ b/components/autofill/core/browser/payments/local_card_migration_manager.cc
@@ -24,7 +24,7 @@ #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/autofill/core/common/autofill_prefs.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace autofill {
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc index bb7fa1dc..be4ac2e 100644 --- a/components/autofill/core/browser/payments/payments_client.cc +++ b/components/autofill/core/browser/payments/payments_client.cc
@@ -32,13 +32,13 @@ #include "components/autofill/core/browser/payments/payments_service_url.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/variations/net/variations_http_headers.h" #include "net/base/escape.h" #include "net/base/load_flags.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/components/autofill/core/browser/payments/payments_client.h b/components/autofill/core/browser/payments/payments_client.h index d979a82f..a8037cfd 100644 --- a/components/autofill/core/browser/payments/payments_client.h +++ b/components/autofill/core/browser/payments/payments_client.h
@@ -17,9 +17,9 @@ #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/data_model/credit_card.h" #include "components/autofill/core/browser/payments/card_unmask_delegate.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/access_token_info.h" namespace identity { class IdentityManager;
diff --git a/components/autofill/core/browser/payments/payments_client_unittest.cc b/components/autofill/core/browser/payments/payments_client_unittest.cc index 4b73ecc..b34d817 100644 --- a/components/autofill/core/browser/payments/payments_client_unittest.cc +++ b/components/autofill/core/browser/payments/payments_client_unittest.cc
@@ -27,10 +27,10 @@ #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/autofill/core/common/autofill_switches.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/variations/net/variations_http_headers.h" #include "components/variations/variations_associated_data.h" #include "components/variations/variations_http_header_provider.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "services/network/test/test_utils.h"
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index 6d49b8b..d9fdfb6 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -52,11 +52,11 @@ #include "components/autofill/core/common/autofill_util.h" #include "components/history/core/browser/history_service.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_auth_util.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_service_utils.h" #include "components/version_info/version_info.h" -#include "services/identity/public/cpp/identity_manager.h" #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h" #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_formatter.h" #include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h"
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h index 23e97caa..4a7e94b 100644 --- a/components/autofill/core/browser/personal_data_manager.h +++ b/components/autofill/core/browser/personal_data_manager.h
@@ -37,9 +37,9 @@ #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_member.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service_observer.h" #include "components/webdata/common/web_data_service_consumer.h" -#include "services/identity/public/cpp/identity_manager.h" class Browser; class PrefService;
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index aec9843..2753836 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -54,13 +54,13 @@ #include "components/autofill/core/common/form_data.h" #include "components/os_crypt/os_crypt_mocker.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/sync_service_utils.h" #include "components/sync/driver/test_sync_service.h" #include "components/version_info/version_info.h" #include "components/webdata/common/web_data_service_base.h" #include "components/webdata/common/web_database_service.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h index 03b2876..912a525 100644 --- a/components/autofill/core/browser/test_autofill_client.h +++ b/components/autofill/core/browser/test_autofill_client.h
@@ -22,8 +22,8 @@ #include "components/autofill/core/browser/test_form_data_importer.h" #include "components/autofill/core/browser/test_personal_data_manager.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/ukm/test_ukm_recorder.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/metrics/public/cpp/delegating_ukm_recorder.h" namespace autofill {
diff --git a/components/autofill_assistant/browser/BUILD.gn b/components/autofill_assistant/browser/BUILD.gn index 4408e13b..a3d1133 100644 --- a/components/autofill_assistant/browser/BUILD.gn +++ b/components/autofill_assistant/browser/BUILD.gn
@@ -153,12 +153,12 @@ "//components/autofill/core/browser", "//components/autofill/core/common", "//components/autofill_assistant/browser/devtools", + "//components/signin/public/identity_manager", "//components/strings:components_strings_grit", "//components/version_info", "//content/public/browser", "//google_apis", "//net", - "//services/identity/public/cpp:cpp", "//third_party/re2", ] }
diff --git a/components/autofill_assistant/browser/DEPS b/components/autofill_assistant/browser/DEPS index ab280e4..11ea8bf 100644 --- a/components/autofill_assistant/browser/DEPS +++ b/components/autofill_assistant/browser/DEPS
@@ -4,11 +4,11 @@ "+content/public/browser", "+content/public/test", "+content/shell/browser/shell.h", + "+components/signin/public/identity_manager", "+components/strings/grit/components_strings.h", "+google_apis", "+net", "+services/network/public/cpp", - "+services/identity/public/cpp", "+third_party/blink/public/mojom/payments/payment_request.mojom.h", "+third_party/icu/source/common/unicode", "+third_party/re2",
diff --git a/components/autofill_assistant/browser/service.h b/components/autofill_assistant/browser/service.h index 2a98643..84666700 100644 --- a/components/autofill_assistant/browser/service.h +++ b/components/autofill_assistant/browser/service.h
@@ -14,8 +14,8 @@ #include "base/memory/weak_ptr.h" #include "components/autofill_assistant/browser/access_token_fetcher.h" #include "components/autofill_assistant/browser/service.pb.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/simple_url_loader.h" #include "url/gurl.h"
diff --git a/components/browser_sync/BUILD.gn b/components/browser_sync/BUILD.gn index e41eaf2..d194fc1 100644 --- a/components/browser_sync/BUILD.gn +++ b/components/browser_sync/BUILD.gn
@@ -67,7 +67,6 @@ "//components/version_info", "//components/version_info:generate_version_info", "//components/webdata/common", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//testing/gmock", "//testing/gtest", @@ -93,7 +92,6 @@ "//components/sync:test_support", "//components/sync_preferences:test_support", "//components/sync_sessions:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", ] }
diff --git a/components/browser_sync/DEPS b/components/browser_sync/DEPS index 08ac197..f18aa14b 100644 --- a/components/browser_sync/DEPS +++ b/components/browser_sync/DEPS
@@ -18,6 +18,5 @@ "+components/version_info", "+components/webdata/common", "+components/webdata_services", - "+services/identity/public/cpp", "+services/network/test", ]
diff --git a/components/feed/DEPS b/components/feed/DEPS index f29865a..7c06e34f 100644 --- a/components/feed/DEPS +++ b/components/feed/DEPS
@@ -4,6 +4,7 @@ "+components/leveldb_proto", "+components/offline_pages", "+components/prefs", + "+components/signin/public", "+components/variations", "+components/version_info", "+components/web_resource", @@ -12,7 +13,6 @@ "+net/traffic_annotation", "+net/url_request", "+google_apis", - "+services/identity/public/cpp", "+services/network/public/cpp", "+services/network/public/mojom", "+services/network/test",
diff --git a/components/feed/core/BUILD.gn b/components/feed/core/BUILD.gn index 443456f..01ca5f4 100644 --- a/components/feed/core/BUILD.gn +++ b/components/feed/core/BUILD.gn
@@ -49,12 +49,12 @@ deps = [ "//components/prefs", + "//components/signin/public/identity_manager", "//components/variations", "//components/variations/net", "//components/variations/service", "//components/web_resource", "//google_apis", - "//services/identity/public/cpp", "//services/network/public/cpp", "//services/network/public/mojom", "//third_party/zlib/google:compression_utils", @@ -89,11 +89,10 @@ "//base/test:test_support", "//components/leveldb_proto:test_support", "//components/prefs:test_support", + "//components/signin/public/identity_manager:test_support", "//components/variations:test_support", "//components/web_resource", "//net:test_support", - "//services/identity/public/cpp", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//services/network/public/cpp", "//services/network/public/mojom",
diff --git a/components/feed/core/feed_networking_host.cc b/components/feed/core/feed_networking_host.cc index 27a9481..da9d5682 100644 --- a/components/feed/core/feed_networking_host.cc +++ b/components/feed/core/feed_networking_host.cc
@@ -15,6 +15,8 @@ #include "base/time/time.h" #include "base/values.h" #include "components/feed/feed_feature_list.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/variations/net/variations_http_headers.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/load_flags.h" @@ -22,8 +24,6 @@ #include "net/http/http_response_headers.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/resource_request_body.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/feed/core/feed_networking_host_unittest.cc b/components/feed/core/feed_networking_host_unittest.cc index ad8123c..875075c 100644 --- a/components/feed/core/feed_networking_host_unittest.cc +++ b/components/feed/core/feed_networking_host_unittest.cc
@@ -15,10 +15,10 @@ #include "base/test/scoped_task_environment.h" #include "base/test/simple_test_tick_clock.h" #include "components/feed/feed_feature_list.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/http/http_response_headers.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/url_loader_completion_status.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/components/gcm_driver/BUILD.gn b/components/gcm_driver/BUILD.gn index 7830e3d..8f86d89 100644 --- a/components/gcm_driver/BUILD.gn +++ b/components/gcm_driver/BUILD.gn
@@ -60,12 +60,12 @@ "//components/os_crypt", "//components/pref_registry", "//components/prefs", + "//components/signin/public/identity_manager", "//components/sync", "//components/version_info", "//google_apis", "//google_apis/gcm", "//net", - "//services/identity/public/cpp", "//services/network/public/cpp", "//services/network/public/mojom", "//url:url", @@ -216,9 +216,7 @@ "gcm_driver_unittest.cc", "gcm_stats_recorder_impl_unittest.cc", ] + + deps += [ "//components/signin/public/identity_manager:test_support" ] } - deps += [ - "//services/identity/public/cpp", - "//services/identity/public/cpp:test_support", - ] }
diff --git a/components/gcm_driver/DEPS b/components/gcm_driver/DEPS index 8bc87bd..e3fe279 100644 --- a/components/gcm_driver/DEPS +++ b/components/gcm_driver/DEPS
@@ -4,6 +4,7 @@ "+components/keyed_service", "+components/pref_registry", "+components/prefs", + "+components/signin/public", "+components/sync/driver", "+components/sync/protocol", "+components/sync_preferences", @@ -19,7 +20,6 @@ "+google_apis/gaia/google_service_auth_error.h", "+google_apis/gcm", "+net", - "+services/identity/public", "+services/network/public/cpp", "+services/network/public/mojom", "+services/network/test",
diff --git a/components/gcm_driver/account_tracker.h b/components/gcm_driver/account_tracker.h index bcfca70..1e2e65ed 100644 --- a/components/gcm_driver/account_tracker.h +++ b/components/gcm_driver/account_tracker.h
@@ -12,9 +12,9 @@ #include "base/memory/scoped_refptr.h" #include "base/observer_list.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_oauth_client.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/identity_manager.h" class GoogleServiceAuthError;
diff --git a/components/gcm_driver/account_tracker_unittest.cc b/components/gcm_driver/account_tracker_unittest.cc index 058c809..7846a18 100644 --- a/components/gcm_driver/account_tracker_unittest.cc +++ b/components/gcm_driver/account_tracker_unittest.cc
@@ -10,9 +10,9 @@ #include "base/strings/stringprintf.h" #include "base/test/scoped_task_environment.h" #include "build/build_config.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "google_apis/gaia/gaia_oauth_client.h" #include "net/http/http_status_code.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "services/network/test/test_utils.h"
diff --git a/components/gcm_driver/gcm_account_tracker.cc b/components/gcm_driver/gcm_account_tracker.cc index b1bc996..c7a14b2f 100644 --- a/components/gcm_driver/gcm_account_tracker.cc +++ b/components/gcm_driver/gcm_account_tracker.cc
@@ -15,10 +15,10 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "components/gcm_driver/gcm_driver.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/ip_endpoint.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/identity_manager.h" namespace gcm {
diff --git a/components/gcm_driver/gcm_account_tracker.h b/components/gcm_driver/gcm_account_tracker.h index 513e015..c124882 100644 --- a/components/gcm_driver/gcm_account_tracker.h +++ b/components/gcm_driver/gcm_account_tracker.h
@@ -16,7 +16,7 @@ #include "components/gcm_driver/account_tracker.h" #include "components/gcm_driver/gcm_client.h" #include "components/gcm_driver/gcm_connection_observer.h" -#include "services/identity/public/cpp/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" namespace identity { class IdentityManager;
diff --git a/components/gcm_driver/gcm_account_tracker_unittest.cc b/components/gcm_driver/gcm_account_tracker_unittest.cc index 02da5770..8edb81f 100644 --- a/components/gcm_driver/gcm_account_tracker_unittest.cc +++ b/components/gcm_driver/gcm_account_tracker_unittest.cc
@@ -12,10 +12,10 @@ #include "base/macros.h" #include "base/test/scoped_task_environment.h" #include "components/gcm_driver/fake_gcm_driver.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/ip_endpoint.h" #include "net/http/http_status_code.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "services/network/test/test_utils.h"
diff --git a/components/gcm_driver/gcm_profile_service.cc b/components/gcm_driver/gcm_profile_service.cc index 0b853cb7c..a428d50 100644 --- a/components/gcm_driver/gcm_profile_service.cc +++ b/components/gcm_driver/gcm_profile_service.cc
@@ -29,7 +29,7 @@ #include "components/gcm_driver/gcm_client_factory.h" #include "components/gcm_driver/gcm_desktop_utils.h" #include "components/gcm_driver/gcm_driver_desktop.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #endif namespace gcm {
diff --git a/components/history/core/browser/BUILD.gn b/components/history/core/browser/BUILD.gn index d5317b6..3137667 100644 --- a/components/history/core/browser/BUILD.gn +++ b/components/history/core/browser/BUILD.gn
@@ -106,13 +106,13 @@ "//components/keyed_service/core", "//components/prefs", "//components/query_parser", + "//components/signin/public/identity_manager", "//components/sync", "//components/url_formatter", "//components/variations", "//components/version_info", "//google_apis", "//net", - "//services/identity/public/cpp", "//services/network/public/cpp", "//sql", "//third_party/sqlite",
diff --git a/components/history/core/browser/DEPS b/components/history/core/browser/DEPS index aa91bc81..b3ef2766 100644 --- a/components/history/core/browser/DEPS +++ b/components/history/core/browser/DEPS
@@ -1,5 +1,5 @@ include_rules = [ "+components/google/core/common/google_util.h", + "+components/signin/public/identity_manager", "+components/variations", - "+services/identity/public", ]
diff --git a/components/history/core/browser/web_history_service.cc b/components/history/core/browser/web_history_service.cc index c6a7ec8..c0b6be21 100644 --- a/components/history/core/browser/web_history_service.cc +++ b/components/history/core/browser/web_history_service.cc
@@ -19,6 +19,8 @@ #include "base/values.h" #include "components/history/core/browser/history_service_observer.h" #include "components/history/core/browser/web_history_service_observer.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/sync/driver/sync_util.h" #include "components/sync/protocol/history_status.pb.h" #include "google_apis/gaia/gaia_urls.h" @@ -27,8 +29,6 @@ #include "net/base/url_util.h" #include "net/http/http_status_code.h" #include "net/http/http_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/components/image_fetcher/core/BUILD.gn b/components/image_fetcher/core/BUILD.gn index 687e6f5f..c34dbca 100644 --- a/components/image_fetcher/core/BUILD.gn +++ b/components/image_fetcher/core/BUILD.gn
@@ -20,6 +20,8 @@ "image_fetcher_service.cc", "image_fetcher_service.h", "image_fetcher_types.h", + "reduced_mode_image_fetcher.cc", + "reduced_mode_image_fetcher.h", "request_metadata.cc", "request_metadata.h", ] @@ -74,6 +76,7 @@ "image_data_fetcher_unittest.cc", "image_fetcher_impl_unittest.cc", "image_fetcher_metrics_reporter_unittest.cc", + "reduced_mode_image_fetcher_unittest.cc", "request_metadata_unittest.cc", ] deps = [
diff --git a/components/image_fetcher/core/cached_image_fetcher.cc b/components/image_fetcher/core/cached_image_fetcher.cc index 04bd8dd4..ee8ed0b 100644 --- a/components/image_fetcher/core/cached_image_fetcher.cc +++ b/components/image_fetcher/core/cached_image_fetcher.cc
@@ -144,8 +144,10 @@ ImageFetcherEvent::kCacheHit); // Only continue with decoding if the user actually asked for an image, or - // the image hasn't been transcoded yet. - if (!image_callback.is_null() || cache_result_needs_transcoding) { + // the image hadn't been transcoded yet and NOT loaded in the reduced mode. + if (!image_callback.is_null() || + (cache_result_needs_transcoding && + !request.params.allow_needs_transcoding_file())) { GetImageDecoder()->DecodeImage( image_data, gfx::Size(), base::BindOnce(&CachedImageFetcher::OnImageDecodedFromCache, @@ -182,6 +184,7 @@ // again to replace the image data already on disk with the transcoded data. if (cache_result_needs_transcoding) { EncodeAndStoreData(/* cache_result_needs_transcoding */ true, + /* is_image_data_transcoded */ true, std::move(request), image); ImageFetcherMetricsReporter::ReportEvent( request.params.uma_client_name(), @@ -247,7 +250,8 @@ ImageFetcherEvent::kTotalFailure); } - StoreData(/* cache_result_needs_transcoding */ false, std::move(request), + StoreData(/* cache_result_needs_transcoding */ false, + /* is_image_data_transcoded */ false, std::move(request), image_data); } @@ -268,10 +272,12 @@ } EncodeAndStoreData(/* cache_result_needs_transcoding */ false, - std::move(request), image); + /* is_image_data_transcoded */ true, std::move(request), + image); } void CachedImageFetcher::EncodeAndStoreData(bool cache_result_needs_transcoding, + bool is_image_data_transcoded, CachedImageFetcherRequest request, const gfx::Image& image) { // Copy the image data out and store it on disk. @@ -290,11 +296,13 @@ base::BindOnce(&EncodeSkBitmapToPNG, uma_client_name, *bitmap), base::BindOnce(&CachedImageFetcher::StoreData, weak_ptr_factory_.GetWeakPtr(), - cache_result_needs_transcoding, std::move(request))); + cache_result_needs_transcoding, is_image_data_transcoded, + std::move(request))); } } void CachedImageFetcher::StoreData(bool cache_result_needs_transcoding, + bool is_image_data_transcoded, CachedImageFetcherRequest request, std::string image_data) { std::string url = request.url.spec(); @@ -309,10 +317,17 @@ ImageFetcherMetricsReporter::ReportEvent( request.params.uma_client_name(), ImageFetcherEvent::kImageQueuedForTranscodingStoredBack); + if (!is_image_data_transcoded) + return; } + // |needs_transcoding| is only true when the image to save isn't transcoded + // and |allow_needs_transcoding_file()| is true (set by + // ReducedModeImageFetcher). + bool needs_transcoding = !is_image_data_transcoded && + request.params.allow_needs_transcoding_file(); image_cache_->SaveImage(std::move(url), std::move(image_data), - /* needs_transcoding */ false); + /* needs_transcoding */ needs_transcoding); } }
diff --git a/components/image_fetcher/core/cached_image_fetcher.h b/components/image_fetcher/core/cached_image_fetcher.h index c273b9df..0c714a5 100644 --- a/components/image_fetcher/core/cached_image_fetcher.h +++ b/components/image_fetcher/core/cached_image_fetcher.h
@@ -76,13 +76,22 @@ const gfx::Image& image, const RequestMetadata& request_metadata); // Encode the given |image_data| and store it. - // |cache_result_needs_transcoding| is passed along for metrics purposes. + // |cache_result_needs_transcoding| is passed along for metrics purposes. It + // is true when the result 1) comes from cache and 2) wasn't transcoded when + // last time it was stored in the ImageCache. + // |is_image_data_transcoded| indicates whether the image to save has been + // transcoded. An image could be transcoded during network fetching, or loaded + // from the ImageCache without transcoding before. void EncodeAndStoreData(bool cache_result_needs_transcoding, + bool is_image_data_transcoded, CachedImageFetcherRequest request, const gfx::Image& image); // Store the given |image_data| in the cache. |cache_result_needs_transcoding| - // is passed along for metrics purposes. + // is passed along for metrics purposes. It is true when the result 1) comes + // from cache and 2) wasn't transcoded when last time it was stored in the + // ImageCache. void StoreData(bool cache_result_needs_transcoding, + bool is_image_data_transcoded, CachedImageFetcherRequest request, std::string image_data);
diff --git a/components/image_fetcher/core/image_fetcher.h b/components/image_fetcher/core/image_fetcher.h index e78e0ea..0844c4c 100644 --- a/components/image_fetcher/core/image_fetcher.h +++ b/components/image_fetcher/core/image_fetcher.h
@@ -19,6 +19,7 @@ namespace image_fetcher { class ImageDecoder; +class ReducedModeImageFetcher; // Encapsulates image fetching customization options. // (required) @@ -31,9 +32,13 @@ // that's closest to the given size (only useful for .icos). Does NOT resize // the downloaded image to the given dimensions. class ImageFetcherParams { - // Only allow the bridge to access the private function set_skip_transcoding + // Allows the bridge to access the private function set_skip_transcoding // used for gif download. friend class ImageFetcherBridge; + // Allows ReducedModeImageFetcher to access the private + // function set_skip_transcoding and set_allow_needs_transcoding_file because + // it ignores the ImageFetcherCallback. + friend class ReducedModeImageFetcher; public: // Sets the UMA client name to report feature-specific metrics. Make sure @@ -68,6 +73,10 @@ bool skip_transcoding() const { return skip_transcoding_; } + bool allow_needs_transcoding_file() const { + return allow_needs_transcoding_file_; + } + // Only to be used in unittests. void set_skip_transcoding_for_testing(bool skip_transcoding) { skip_transcoding_ = skip_transcoding; @@ -84,6 +93,10 @@ skip_transcoding_ = skip_transcoding; } + void set_allow_needs_transcoding_file(bool allow_needs_transcoding_file) { + allow_needs_transcoding_file_ = allow_needs_transcoding_file; + } + const net::NetworkTrafficAnnotationTag network_traffic_annotation_tag_; base::Optional<int64_t> max_download_bytes_; @@ -97,6 +110,9 @@ // True if the disk cache should be skipped because it was already checked in // java. bool skip_disk_cache_read_; + // True if allowing images that need transcoding to be stored with a prefix in + // file names. + bool allow_needs_transcoding_file_; }; // A class used to fetch server images. It can be called from any thread and the
diff --git a/components/image_fetcher/core/image_fetcher_service.cc b/components/image_fetcher/core/image_fetcher_service.cc index e509d52..1ad8b56 100644 --- a/components/image_fetcher/core/image_fetcher_service.cc +++ b/components/image_fetcher/core/image_fetcher_service.cc
@@ -12,6 +12,7 @@ #include "components/image_fetcher/core/image_decoder.h" #include "components/image_fetcher/core/image_fetcher.h" #include "components/image_fetcher/core/image_fetcher_impl.h" +#include "components/image_fetcher/core/reduced_mode_image_fetcher.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace image_fetcher { @@ -28,7 +29,9 @@ cached_image_fetcher_( std::make_unique<CachedImageFetcher>(image_fetcher_.get(), image_cache, - read_only)) {} + read_only)), + reduced_mode_image_fetcher_(std::make_unique<ReducedModeImageFetcher>( + cached_image_fetcher_.get())) {} ImageFetcherService::~ImageFetcherService() = default; @@ -44,6 +47,8 @@ // In memory portion is only available in Java. case ImageFetcherConfig::kInMemoryWithDiskCache: return cached_image_fetcher_.get(); + case ImageFetcherConfig::kReducedMode: + return reduced_mode_image_fetcher_.get(); default: // Provided ImageFetcherConfig not in the enum. NOTREACHED();
diff --git a/components/image_fetcher/core/image_fetcher_service.h b/components/image_fetcher/core/image_fetcher_service.h index 60231c8..f8c5556 100644 --- a/components/image_fetcher/core/image_fetcher_service.h +++ b/components/image_fetcher/core/image_fetcher_service.h
@@ -34,7 +34,12 @@ kInMemoryOnly = 2, // In memory cache with disk caching. Currently only available in Java. kInMemoryWithDiskCache = 3, - kMaxValue = kInMemoryWithDiskCache + // Deferring image transcoding when fetching. This is because utility process + // isn't created in the reduced mode, thus the image decoding in the utility + // process is deferred until full browser starts. The ReducedModeImageFetcher + // will ignore any ImageFetcherCallback which asks transcoded images. + kReducedMode = 4, + kMaxValue = kReducedMode }; // Keyed service responsible for managing the lifetime of various ImageFetcher @@ -62,6 +67,9 @@ std::unique_ptr<ImageFetcher> image_fetcher_; // This fetcher goes through a disk cache before going to the network. std::unique_ptr<ImageFetcher> cached_image_fetcher_; + // This fetcher goes through a disk cache before going to the network, but + // defers image transcoding when fetching. + std::unique_ptr<ImageFetcher> reduced_mode_image_fetcher_; DISALLOW_COPY_AND_ASSIGN(ImageFetcherService); };
diff --git a/components/image_fetcher/core/reduced_mode_image_fetcher.cc b/components/image_fetcher/core/reduced_mode_image_fetcher.cc new file mode 100644 index 0000000..2a599a46 --- /dev/null +++ b/components/image_fetcher/core/reduced_mode_image_fetcher.cc
@@ -0,0 +1,35 @@ +// Copyright 2019 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/image_fetcher/core/reduced_mode_image_fetcher.h" + +namespace image_fetcher { + +ReducedModeImageFetcher::ReducedModeImageFetcher(ImageFetcher* image_fetcher) + : image_fetcher_(image_fetcher) { + DCHECK(image_fetcher_); +} + +ReducedModeImageFetcher::~ReducedModeImageFetcher() = default; + +ImageDecoder* ReducedModeImageFetcher::GetImageDecoder() { + return nullptr; +} + +void ReducedModeImageFetcher::FetchImageAndData( + const GURL& image_url, + ImageDataFetcherCallback image_data_callback, + ImageFetcherCallback image_callback, + ImageFetcherParams params) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(!image_data_callback.is_null()); + + params.set_skip_transcoding(true); + params.set_allow_needs_transcoding_file(true); + + image_fetcher_->FetchImageAndData(image_url, std::move(image_data_callback), + ImageFetcherCallback(), params); +} + +} // namespace image_fetcher
diff --git a/components/image_fetcher/core/reduced_mode_image_fetcher.h b/components/image_fetcher/core/reduced_mode_image_fetcher.h new file mode 100644 index 0000000..ceeb25b4 --- /dev/null +++ b/components/image_fetcher/core/reduced_mode_image_fetcher.h
@@ -0,0 +1,48 @@ +// Copyright 2019 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_IMAGE_FETCHER_CORE_REDUCED_MODE_IMAGE_FETCHER_H_ +#define COMPONENTS_IMAGE_FETCHER_CORE_REDUCED_MODE_IMAGE_FETCHER_H_ + +#include <string> + +#include "base/sequence_checker.h" +#include "components/image_fetcher/core/image_fetcher.h" +#include "url/gurl.h" + +namespace image_fetcher { + +class ImageFetcher; + +// ReducedModeImageFetcher is used when Chrome is running in reduced mode. This +// image fetcher defers image decoding during fetching, since decoding in the +// utility process isn't available in the reduced mode. It ignores the +// ImageFetcherCallback, but will return the fetched but not-transcoding image +// to users by calling ImageDataFetcherCallback. +class ReducedModeImageFetcher : public ImageFetcher { + public: + ReducedModeImageFetcher(ImageFetcher* image_fetcher); + ~ReducedModeImageFetcher() override; + + // ImageFetcher: + void FetchImageAndData(const GURL& image_url, + ImageDataFetcherCallback image_data_callback, + ImageFetcherCallback image_callback, + ImageFetcherParams params) override; + ImageDecoder* GetImageDecoder() override; + + private: + // Owned by ImageFetcherService. + ImageFetcher* image_fetcher_; + + // Used to ensure that operations are performed on the sequence that this + // object was created on. + SEQUENCE_CHECKER(sequence_checker_); + + DISALLOW_COPY_AND_ASSIGN(ReducedModeImageFetcher); +}; + +} // namespace image_fetcher + +#endif // COMPONENTS_IMAGE_FETCHER_CORE_REDUCED_MODE_IMAGE_FETCHER_H_
diff --git a/components/image_fetcher/core/reduced_mode_image_fetcher_unittest.cc b/components/image_fetcher/core/reduced_mode_image_fetcher_unittest.cc new file mode 100644 index 0000000..ba0242b6 --- /dev/null +++ b/components/image_fetcher/core/reduced_mode_image_fetcher_unittest.cc
@@ -0,0 +1,175 @@ +// Copyright 2019 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/image_fetcher/core/reduced_mode_image_fetcher.h" + +#include <map> +#include <memory> +#include <string> +#include <utility> +#include <vector> + +#include "base/bind.h" +#include "base/files/scoped_temp_dir.h" +#include "base/memory/ref_counted.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/test/mock_callback.h" +#include "base/test/scoped_task_environment.h" +#include "base/test/simple_test_clock.h" +#include "base/threading/sequenced_task_runner_handle.h" +#include "components/image_fetcher/core/cache/image_cache.h" +#include "components/image_fetcher/core/cache/image_data_store_disk.h" +#include "components/image_fetcher/core/cache/image_metadata_store_leveldb.h" +#include "components/image_fetcher/core/cache/proto/cached_image_metadata.pb.h" +#include "components/image_fetcher/core/cached_image_fetcher.h" +#include "components/image_fetcher/core/image_fetcher_impl.h" +#include "components/image_fetcher/core/image_fetcher_metrics_reporter.h" +#include "components/image_fetcher/core/image_fetcher_types.h" +#include "components/leveldb_proto/testing/fake_db.h" +#include "components/prefs/testing_pref_service.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/test/test_url_loader_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_unittest_util.h" + +using leveldb_proto::test::FakeDB; +using testing::_; + +namespace image_fetcher { + +namespace { + +const GURL kImageUrl = GURL("http://gstatic.img.com/foo.jpg"); + +constexpr char kUmaClientName[] = "TestUma"; +constexpr char kImageData[] = "data"; + +const char kImageFetcherEventHistogramName[] = "ImageFetcher.Events"; + +} // namespace + +class ReducedModeImageFetcherTest : public testing::Test { + public: + ReducedModeImageFetcherTest() {} + + ~ReducedModeImageFetcherTest() override { + reduced_mode_image_fetcher_.reset(); + // We need to run until idle after deleting the database, because + // ProtoDatabase deletes the actual LevelDB asynchronously. + RunUntilIdle(); + } + + void SetUp() override { + ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); + ImageCache::RegisterProfilePrefs(test_prefs_.registry()); + CreateReducedModeImageFetcher(); + } + + void CreateReducedModeImageFetcher() { + auto db = + std::make_unique<FakeDB<CachedImageMetadataProto>>(&metadata_store_); + db_ = db.get(); + + auto metadata_store = + std::make_unique<ImageMetadataStoreLevelDB>(std::move(db), &clock_); + auto data_store = std::make_unique<ImageDataStoreDisk>( + data_dir_.GetPath(), base::SequencedTaskRunnerHandle::Get()); + + image_cache_ = base::MakeRefCounted<ImageCache>( + std::move(data_store), std::move(metadata_store), &test_prefs_, &clock_, + base::SequencedTaskRunnerHandle::Get()); + + // Use an initial request to start the cache up. + image_cache_->SaveImage(kImageUrl.spec(), kImageData, + /* needs_transcoding */ false); + RunUntilIdle(); + db_->InitStatusCallback(leveldb_proto::Enums::InitStatus::kOK); + image_cache_->DeleteImage(kImageUrl.spec()); + RunUntilIdle(); + + shared_factory_ = + base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( + &test_url_loader_factory_); + + image_fetcher_ = std::make_unique<image_fetcher::ImageFetcherImpl>( + /* ImageDecoder */ nullptr, shared_factory_); + cached_image_fetcher_ = std::make_unique<CachedImageFetcher>( + image_fetcher_.get(), image_cache_, /* read_only */ false); + reduced_mode_image_fetcher_ = + std::make_unique<ReducedModeImageFetcher>(cached_image_fetcher_.get()); + + RunUntilIdle(); + } + + void RunUntilIdle() { scoped_task_environment_.RunUntilIdle(); } + + void VerifyCacheHit() { + RunUntilIdle(); + + base::MockCallback<ImageDataFetcherCallback> data_callback; + + EXPECT_CALL(data_callback, Run(kImageData, _)); + reduced_mode_image_fetcher()->FetchImageAndData( + kImageUrl, data_callback.Get(), ImageFetcherCallback(), + ImageFetcherParams(TRAFFIC_ANNOTATION_FOR_TESTS, kUmaClientName)); + db()->LoadCallback(true); + RunUntilIdle(); + + histogram_tester().ExpectBucketCount(kImageFetcherEventHistogramName, + ImageFetcherEvent::kImageRequest, 1); + histogram_tester().ExpectBucketCount(kImageFetcherEventHistogramName, + ImageFetcherEvent::kCacheHit, 1); + } + + ReducedModeImageFetcher* reduced_mode_image_fetcher() { + return reduced_mode_image_fetcher_.get(); + } + scoped_refptr<ImageCache> image_cache() { return image_cache_; } + network::TestURLLoaderFactory* test_url_loader_factory() { + return &test_url_loader_factory_; + } + base::HistogramTester& histogram_tester() { return histogram_tester_; } + FakeDB<CachedImageMetadataProto>* db() { return db_; } + + MOCK_METHOD2(OnImageLoaded, void(bool, std::string)); + + private: + std::unique_ptr<ImageFetcher> image_fetcher_; + std::unique_ptr<ImageFetcher> cached_image_fetcher_; + std::unique_ptr<ReducedModeImageFetcher> reduced_mode_image_fetcher_; + network::TestURLLoaderFactory test_url_loader_factory_; + scoped_refptr<network::SharedURLLoaderFactory> shared_factory_; + + scoped_refptr<ImageCache> image_cache_; + base::SimpleTestClock clock_; + TestingPrefServiceSimple test_prefs_; + base::ScopedTempDir data_dir_; + FakeDB<CachedImageMetadataProto>* db_; + std::map<std::string, CachedImageMetadataProto> metadata_store_; + + base::test::ScopedTaskEnvironment scoped_task_environment_; + base::HistogramTester histogram_tester_; + + DISALLOW_COPY_AND_ASSIGN(ReducedModeImageFetcherTest); +}; + +TEST_F(ReducedModeImageFetcherTest, FetchNeedsTranscodingImageFromCache) { + // Save the image that needs transcoding in the database. + image_cache()->SaveImage(kImageUrl.spec(), kImageData, + /* needs_transcoding */ true); + VerifyCacheHit(); +} + +TEST_F(ReducedModeImageFetcherTest, FetchImageFromCache) { + // Save the image that doesn't need transcoding in the database. + image_cache()->SaveImage(kImageUrl.spec(), kImageData, + /* needs_transcoding */ false); + VerifyCacheHit(); +} + +} // namespace image_fetcher
diff --git a/components/invalidation/impl/BUILD.gn b/components/invalidation/impl/BUILD.gn index 25a26fb..f4960056 100644 --- a/components/invalidation/impl/BUILD.gn +++ b/components/invalidation/impl/BUILD.gn
@@ -80,10 +80,10 @@ "//components/keyed_service/core", "//components/pref_registry", "//components/prefs", + "//components/signin/public/identity_manager", "//google_apis", "//jingle:notifier", "//net:net", - "//services/identity/public/cpp", "//services/network/public/cpp", "//services/network/public/mojom", @@ -150,13 +150,13 @@ "//components/prefs", "//components/prefs:test_support", "//components/signin/core/browser:internals_test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync_preferences:test_support", "//google_apis:test_support", "//google_apis/gcm:gcm", "//net", "//net:test_support", "//services/data_decoder/public/cpp:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//testing/gmock", "//testing/gtest",
diff --git a/components/invalidation/impl/DEPS b/components/invalidation/impl/DEPS index 7a208ee..b3982d13 100644 --- a/components/invalidation/impl/DEPS +++ b/components/invalidation/impl/DEPS
@@ -4,6 +4,7 @@ "+components/gcm_driver", "+components/keyed_service", "+components/pref_registry", + "+components/signin/public", "+components/sync_preferences", "+google_apis/gaia", @@ -20,7 +21,6 @@ "+net/base/load_flags.h", "+services/data_decoder/public/cpp/testing_json_parser.h", - "+services/identity/public", "+services/network/public", "+services/network/test", ]
diff --git a/components/invalidation/impl/fcm_invalidation_service_unittest.cc b/components/invalidation/impl/fcm_invalidation_service_unittest.cc index b49e4ff..527ad91 100644 --- a/components/invalidation/impl/fcm_invalidation_service_unittest.cc +++ b/components/invalidation/impl/fcm_invalidation_service_unittest.cc
@@ -25,9 +25,9 @@ #include "components/invalidation/impl/profile_identity_provider.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/url_request/url_request_context_getter.h" #include "services/data_decoder/public/cpp/testing_json_parser.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/invalidation/impl/fcm_invalidator_unittest.cc b/components/invalidation/impl/fcm_invalidator_unittest.cc index 1ac9ca92..785acc44 100644 --- a/components/invalidation/impl/fcm_invalidator_unittest.cc +++ b/components/invalidation/impl/fcm_invalidator_unittest.cc
@@ -18,9 +18,9 @@ #include "components/invalidation/impl/push_client_channel.h" #include "components/invalidation/public/topic_invalidation_map.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/url_request/url_request_test_util.h" #include "services/data_decoder/public/cpp/testing_json_parser.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/invalidation/impl/gcm_invalidation_bridge_unittest.cc b/components/invalidation/impl/gcm_invalidation_bridge_unittest.cc index 76aa67e..7d215a7 100644 --- a/components/invalidation/impl/gcm_invalidation_bridge_unittest.cc +++ b/components/invalidation/impl/gcm_invalidation_bridge_unittest.cc
@@ -17,9 +17,9 @@ #include "components/gcm_driver/fake_gcm_driver.h" #include "components/gcm_driver/gcm_driver.h" #include "components/invalidation/impl/profile_identity_provider.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/ip_endpoint.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace invalidation {
diff --git a/components/invalidation/impl/per_user_topic_registration_manager_unittest.cc b/components/invalidation/impl/per_user_topic_registration_manager_unittest.cc index 5fe2210..843009c 100644 --- a/components/invalidation/impl/per_user_topic_registration_manager_unittest.cc +++ b/components/invalidation/impl/per_user_topic_registration_manager_unittest.cc
@@ -18,9 +18,9 @@ #include "components/invalidation/impl/profile_identity_provider.h" #include "components/invalidation/public/invalidation_util.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/http/http_status_code.h" #include "services/data_decoder/public/cpp/testing_json_parser.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/components/invalidation/impl/profile_identity_provider.h b/components/invalidation/impl/profile_identity_provider.h index 807bf1a..31e0b8cc 100644 --- a/components/invalidation/impl/profile_identity_provider.h +++ b/components/invalidation/impl/profile_identity_provider.h
@@ -8,7 +8,7 @@ #include "base/macros.h" #include "build/build_config.h" #include "components/invalidation/public/identity_provider.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace invalidation {
diff --git a/components/invalidation/impl/ticl_invalidation_service_unittest.cc b/components/invalidation/impl/ticl_invalidation_service_unittest.cc index 02c40e3..824921b 100644 --- a/components/invalidation/impl/ticl_invalidation_service_unittest.cc +++ b/components/invalidation/impl/ticl_invalidation_service_unittest.cc
@@ -21,8 +21,8 @@ #include "components/invalidation/impl/invalidation_state_tracker.h" #include "components/invalidation/impl/invalidator.h" #include "components/invalidation/impl/profile_identity_provider.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/url_request/url_request_context_getter.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/test/test_network_connection_tracker.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/journey/BUILD.gn b/components/journey/BUILD.gn index 400d6f6..acd967d 100644 --- a/components/journey/BUILD.gn +++ b/components/journey/BUILD.gn
@@ -13,10 +13,10 @@ deps = [ "//base", "//components/journey/proto", + "//components/signin/public/identity_manager", "//components/variations/net:net", "//net", "//services/data_decoder/public/cpp", - "//services/identity/public/cpp", "//services/network/public/cpp", "//url", ] @@ -31,8 +31,8 @@ deps = [ ":journey_info_fetcher", "//base/test:test_support", + "//components/signin/public/identity_manager:test_support", "//services/data_decoder/public/cpp:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//testing/gmock", "//testing/gtest",
diff --git a/components/journey/DEPS b/components/journey/DEPS index a5cf279e..38bdc5c 100644 --- a/components/journey/DEPS +++ b/components/journey/DEPS
@@ -3,7 +3,6 @@ "+components", "+net", "+services/data_decoder/public/cpp", - "+services/identity/public/cpp", "+services/network/public/cpp", "+services/network/test", "+url",
diff --git a/components/journey/journey_info_fetcher.h b/components/journey/journey_info_fetcher.h index a66bf89..e79e5cc 100644 --- a/components/journey/journey_info_fetcher.h +++ b/components/journey/journey_info_fetcher.h
@@ -12,7 +12,7 @@ #include "base/callback.h" #include "base/containers/queue.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" namespace base { class Value;
diff --git a/components/journey/journey_info_fetcher_unittest.cc b/components/journey/journey_info_fetcher_unittest.cc index 9b00265..9033d9ff 100644 --- a/components/journey/journey_info_fetcher_unittest.cc +++ b/components/journey/journey_info_fetcher_unittest.cc
@@ -11,9 +11,9 @@ #include "base/strings/stringprintf.h" #include "base/test/mock_callback.h" #include "base/test/scoped_task_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/http/http_util.h" #include "services/data_decoder/public/cpp/testing_json_parser.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/components/metrics/metrics_switches.cc b/components/metrics/metrics_switches.cc index 38f65ae..d860e6d 100644 --- a/components/metrics/metrics_switches.cc +++ b/components/metrics/metrics_switches.cc
@@ -14,6 +14,11 @@ // performance tests. const char kMetricsRecordingOnly[] = "metrics-recording-only"; +// Override the standard time interval between each metrics report upload for +// UMA and UKM. It is useful to set to a short interval for debugging. Unit in +// seconds. (The default is 1800 seconds on desktop). +const char kMetricsUploadIntervalSec[] = "metrics-upload-interval"; + // Forces a reset of the one-time-randomized FieldTrials on this client, also // known as the Chrome Variations state. const char kResetVariationState[] = "reset-variation-state";
diff --git a/components/metrics/metrics_switches.h b/components/metrics/metrics_switches.h index 10e41e9..368c2381 100644 --- a/components/metrics/metrics_switches.h +++ b/components/metrics/metrics_switches.h
@@ -12,6 +12,7 @@ // each in the .cc file. extern const char kMetricsRecordingOnly[]; +extern const char kMetricsUploadIntervalSec[]; extern const char kResetVariationState[]; extern const char kForceEnableMetricsReporting[];
diff --git a/components/ntp_snippets/BUILD.gn b/components/ntp_snippets/BUILD.gn index 9855dfa..c400e1a 100644 --- a/components/ntp_snippets/BUILD.gn +++ b/components/ntp_snippets/BUILD.gn
@@ -108,6 +108,7 @@ "//components/ntp_snippets/remote/proto", "//components/offline_pages/core", "//components/reading_list/core", + "//components/signin/public/identity_manager", "//components/strings", "//components/unified_consent", "//components/url_formatter", @@ -115,7 +116,6 @@ "//components/variations/net", "//components/variations/service", "//components/web_resource", - "//services/identity/public/cpp", "//services/metrics/public/cpp:metrics_cpp", "//services/metrics/public/cpp:ukm_builders", "//services/network/public/cpp", @@ -177,6 +177,7 @@ "//components/offline_pages/core/background:test_support", "//components/prefs:test_support", "//components/reading_list/core", + "//components/signin/public/identity_manager:test_support", "//components/strings", "//components/sync:test_support", "//components/sync_preferences:test_support", @@ -185,8 +186,6 @@ "//components/variations/net", "//components/web_resource:web_resource", "//net:test_support", - "//services/identity/public/cpp", - "//services/identity/public/cpp:test_support", "//services/metrics/public/cpp:ukm_builders", "//services/network:test_support", "//services/network/public/cpp",
diff --git a/components/ntp_snippets/DEPS b/components/ntp_snippets/DEPS index 19efdb79..6df4fbf 100644 --- a/components/ntp_snippets/DEPS +++ b/components/ntp_snippets/DEPS
@@ -9,6 +9,7 @@ "+components/metrics", "+components/prefs", "+components/reading_list", + "+components/signin/public", "+components/strings/grit/components_strings.h", "+components/sync_preferences/testing_pref_service_syncable.h", "+components/sync/driver", @@ -24,7 +25,6 @@ "+net/traffic_annotation", "+net/url_request", "+google_apis", - "+services/identity/public/cpp", "+services/metrics/public/cpp", "+services/network/public/cpp", "+services/network/public/mojom",
diff --git a/components/ntp_snippets/content_suggestions_service.h b/components/ntp_snippets/content_suggestions_service.h index 2697c6b0..1aff3e3 100644 --- a/components/ntp_snippets/content_suggestions_service.h +++ b/components/ntp_snippets/content_suggestions_service.h
@@ -27,7 +27,7 @@ #include "components/ntp_snippets/content_suggestions_provider.h" #include "components/ntp_snippets/remote/remote_suggestions_scheduler.h" #include "components/ntp_snippets/user_classifier.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class PrefService; class PrefRegistrySimple;
diff --git a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc index 9aee75b..c2cb157 100644 --- a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc +++ b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.cc
@@ -17,10 +17,10 @@ #include "components/ntp_snippets/features.h" #include "components/ntp_snippets/ntp_snippets_constants.h" #include "components/ntp_snippets/user_classifier.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/variations/variations_associated_data.h" #include "net/base/url_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/shared_url_loader_factory.h" using language::UrlLanguageHistogram;
diff --git a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h index 4511d2fd..465afa1 100644 --- a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h +++ b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h
@@ -18,8 +18,8 @@ #include "components/ntp_snippets/remote/json_to_categories.h" #include "components/ntp_snippets/remote/remote_suggestions_fetcher.h" #include "components/ntp_snippets/remote/request_params.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/access_token_info.h" class PrefService;
diff --git a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc index 538154d3..72f56d5 100644 --- a/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc +++ b/components/ntp_snippets/remote/remote_suggestions_fetcher_impl_unittest.cc
@@ -30,10 +30,10 @@ #include "components/ntp_snippets/remote/test_utils.h" #include "components/ntp_snippets/user_classifier.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/variations/entropy_provider.h" #include "net/http/http_util.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
diff --git a/components/omnibox/browser/BUILD.gn b/components/omnibox/browser/BUILD.gn index bfa679a..a13b546 100644 --- a/components/omnibox/browser/BUILD.gn +++ b/components/omnibox/browser/BUILD.gn
@@ -232,6 +232,7 @@ "//components/search", "//components/search_engines", "//components/sessions", + "//components/signin/public/identity_manager", "//components/strings", "//components/sync", "//components/url_formatter", @@ -239,7 +240,6 @@ "//components/variations/net", "//extensions/common:common_constants", "//net", - "//services/identity/public/cpp", "//skia", "//sql", "//third_party/protobuf:protobuf_lite",
diff --git a/components/omnibox/browser/DEPS b/components/omnibox/browser/DEPS index 1b73dd33..55868a6 100644 --- a/components/omnibox/browser/DEPS +++ b/components/omnibox/browser/DEPS
@@ -19,6 +19,7 @@ "+components/search_engines", "+components/security_state", "+components/sessions", + "+components/signin/public", "+components/sync", "+components/strings/grit/components_strings.h", "+components/url_formatter", @@ -29,7 +30,6 @@ "+net", "+services/network/public/cpp", "+services/network/test", - "+services/identity/public/cpp", "+sql", "+third_party/metrics_proto", "+third_party/protobuf/src/google",
diff --git a/components/omnibox/browser/document_suggestions_service.cc b/components/omnibox/browser/document_suggestions_service.cc index 1b3c203..2606da3 100644 --- a/components/omnibox/browser/document_suggestions_service.cc +++ b/components/omnibox/browser/document_suggestions_service.cc
@@ -17,11 +17,11 @@ #include "components/omnibox/browser/document_provider.h" #include "components/omnibox/common/omnibox_features.h" #include "components/search_engines/template_url_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/variations/variations_associated_data.h" #include "net/base/load_flags.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/resource_response.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/omnibox/browser/document_suggestions_service.h b/components/omnibox/browser/document_suggestions_service.h index 960fff4..fc9591f1 100644 --- a/components/omnibox/browser/document_suggestions_service.h +++ b/components/omnibox/browser/document_suggestions_service.h
@@ -10,7 +10,7 @@ #include "base/memory/scoped_refptr.h" #include "components/keyed_service/core/keyed_service.h" -#include "services/identity/public/cpp/access_token_info.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/components/omnibox/browser/remote_suggestions_service.cc b/components/omnibox/browser/remote_suggestions_service.cc index 10f9ecd..5ad5526 100644 --- a/components/omnibox/browser/remote_suggestions_service.cc +++ b/components/omnibox/browser/remote_suggestions_service.cc
@@ -18,14 +18,14 @@ #include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/common/omnibox_features.h" #include "components/search_engines/template_url_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/sync/base/time.h" #include "components/variations/net/variations_http_headers.h" #include "net/base/escape.h" #include "net/base/load_flags.h" #include "net/http/http_response_headers.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/components/omnibox/browser/remote_suggestions_service.h b/components/omnibox/browser/remote_suggestions_service.h index 4034dba..64eddc4 100644 --- a/components/omnibox/browser/remote_suggestions_service.h +++ b/components/omnibox/browser/remote_suggestions_service.h
@@ -12,8 +12,8 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/omnibox/browser/autocomplete_input.h" #include "components/search_engines/template_url.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/access_token_info.h" #include "url/gurl.h" namespace base {
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn index f0fd7e7..5678327 100644 --- a/components/password_manager/core/browser/BUILD.gn +++ b/components/password_manager/core/browser/BUILD.gn
@@ -230,6 +230,7 @@ "//components/pref_registry", "//components/prefs", "//components/security_state/core", + "//components/signin/public/identity_manager", "//components/strings", "//components/sync", "//components/sync_preferences", @@ -238,7 +239,6 @@ "//components/webdata/common", "//google_apis", "//net", - "//services/identity/public/cpp:cpp", "//services/metrics/public/cpp:metrics_cpp", "//services/metrics/public/cpp:ukm_builders", "//services/network/public/cpp", @@ -551,6 +551,7 @@ "//components/password_manager/core/common", "//components/prefs:test_support", "//components/security_state/core", + "//components/signin/public/identity_manager:test_support", "//components/strings", "//components/sync:test_support", "//components/sync_preferences:test_support", @@ -558,7 +559,6 @@ "//components/variations", "//google_apis:google_apis", "//net:test_support", - "//services/identity/public/cpp:test_support", "//services/metrics/public/cpp:ukm_builders", "//services/network:network_service", "//services/network:test_support",
diff --git a/components/password_manager/core/browser/DEPS b/components/password_manager/core/browser/DEPS index d17be60..fa76a0da 100644 --- a/components/password_manager/core/browser/DEPS +++ b/components/password_manager/core/browser/DEPS
@@ -52,9 +52,9 @@ "+services/network", ], "password_sync_util\.cc": [ - "+services/identity/public/cpp", + "+components/signin/public", ], "sync_username_test_base\.h": [ - "+services/identity/public/cpp", + "+components/signin/public", ], }
diff --git a/components/password_manager/core/browser/new_password_form_manager.cc b/components/password_manager/core/browser/new_password_form_manager.cc index 3d678d6..f9a1a02 100644 --- a/components/password_manager/core/browser/new_password_form_manager.cc +++ b/components/password_manager/core/browser/new_password_form_manager.cc
@@ -754,7 +754,7 @@ parsed_form->password_value = password; generation_state_ = std::make_unique<PasswordGenerationState>(form_saver_.get(), client_); - generation_state_->GeneratedPasswordAccepted(*parsed_form, GetAllMatches(), + generation_state_->GeneratedPasswordAccepted(*parsed_form, *form_fetcher_, driver_); }
diff --git a/components/password_manager/core/browser/password_form_manager_for_ui.h b/components/password_manager/core/browser/password_form_manager_for_ui.h index 27ec1aa..c4be597c 100644 --- a/components/password_manager/core/browser/password_form_manager_for_ui.h +++ b/components/password_manager/core/browser/password_form_manager_for_ui.h
@@ -33,10 +33,12 @@ virtual const GURL& GetOrigin() const = 0; // Returns the best saved matches for the observed form. + // TODO(crbug.com/831123): it should return a vector. virtual const std::map<base::string16, const autofill::PasswordForm*>& GetBestMatches() const = 0; // Returns the federated saved matches for the observed form. + // TODO(crbug.com/831123): merge with GetBestMatches. virtual std::vector<const autofill::PasswordForm*> GetFederatedMatches() const = 0;
diff --git a/components/password_manager/core/browser/password_generation_state.cc b/components/password_manager/core/browser/password_generation_state.cc index aaba322..00a96c13 100644 --- a/components/password_manager/core/browser/password_generation_state.cc +++ b/components/password_manager/core/browser/password_generation_state.cc
@@ -4,21 +4,189 @@ #include "components/password_manager/core/browser/password_generation_state.h" +#include <map> #include <utility> +#include "base/callback.h" #include "base/time/default_clock.h" +#include "components/password_manager/core/browser/form_fetcher.h" #include "components/password_manager/core/browser/form_saver.h" +#include "components/password_manager/core/browser/password_form_manager_for_ui.h" +#include "components/password_manager/core/browser/password_manager_client.h" #include "components/password_manager/core/browser/password_manager_driver.h" namespace password_manager { +namespace { using autofill::PasswordForm; +std::vector<PasswordForm> DeepCopyVector( + const std::vector<const PasswordForm*>& forms) { + std::vector<PasswordForm> result; + result.reserve(forms.size()); + for (const PasswordForm* form : forms) + result.emplace_back(*form); + return result; +} + +// Implementation of the UI model for "Update password?" bubble in case there is +// a conflict in generation. +class PasswordDataForUI : public PasswordFormManagerForUI { + public: + PasswordDataForUI(PasswordForm pending_form, + const std::vector<const PasswordForm*>& matches, + const std::vector<const PasswordForm*>& federated, + base::RepeatingCallback<void(bool, const PasswordForm&)> + bubble_interaction); + ~PasswordDataForUI() override = default; + PasswordDataForUI(const PasswordDataForUI&) = delete; + PasswordDataForUI& operator=(const PasswordDataForUI&) = delete; + + // PasswordFormManagerForUI: + const GURL& GetOrigin() const override; + const std::map<base::string16, const PasswordForm*>& GetBestMatches() + const override; + std::vector<const PasswordForm*> GetFederatedMatches() const override; + const PasswordForm& GetPendingCredentials() const override; + metrics_util::CredentialSourceType GetCredentialSource() override; + PasswordFormMetricsRecorder* GetMetricsRecorder() override; + base::span<const PasswordForm* const> GetBlacklistedMatches() const override; + base::span<const InteractionsStats> GetInteractionsStats() const override; + bool IsBlacklisted() const override; + void Save() override; + void Update(const PasswordForm& credentials_to_update) override; + void UpdateUsername(const base::string16& new_username) override; + void UpdatePasswordValue(const base::string16& new_password) override; + void OnNopeUpdateClicked() override; + void OnNeverClicked() override; + void OnNoInteraction(bool is_update) override; + void PermanentlyBlacklist() override; + void OnPasswordsRevealed() override; + + private: + PasswordForm pending_form_; + // TODO(https://crbug.com/831123): switch to vector. + std::map<base::string16, const PasswordForm*> matches_; + const std::vector<PasswordForm> federated_matches_; + const std::vector<PasswordForm> non_federated_matches_; + + // Observer that waits for bubble interaction. + // The first parameter is true iff the bubble was accepted. + // The second parameter is the pending form. + base::RepeatingCallback<void(bool, const PasswordForm&)> + bubble_interaction_cb_; +}; + +PasswordDataForUI::PasswordDataForUI( + PasswordForm pending_form, + const std::vector<const PasswordForm*>& matches, + const std::vector<const PasswordForm*>& federated, + base::RepeatingCallback<void(bool, const PasswordForm&)> bubble_interaction) + : pending_form_(std::move(pending_form)), + federated_matches_(DeepCopyVector(federated)), + non_federated_matches_(DeepCopyVector(matches)), + bubble_interaction_cb_(std::move(bubble_interaction)) { + for (const PasswordForm& form : non_federated_matches_) + matches_[form.username_value] = &form; +} + +const GURL& PasswordDataForUI::GetOrigin() const { + return pending_form_.origin; +} + +const std::map<base::string16, const PasswordForm*>& +PasswordDataForUI::GetBestMatches() const { + return matches_; +} + +std::vector<const PasswordForm*> PasswordDataForUI::GetFederatedMatches() + const { + std::vector<const PasswordForm*> result(federated_matches_.size()); + std::transform(federated_matches_.begin(), federated_matches_.end(), + result.begin(), + [](const PasswordForm& form) { return &form; }); + return result; +} + +const PasswordForm& PasswordDataForUI::GetPendingCredentials() const { + return pending_form_; +} + +metrics_util::CredentialSourceType PasswordDataForUI::GetCredentialSource() { + return metrics_util::CredentialSourceType::kPasswordManager; +} + +PasswordFormMetricsRecorder* PasswordDataForUI::GetMetricsRecorder() { + return nullptr; +} + +base::span<const PasswordForm* const> PasswordDataForUI::GetBlacklistedMatches() + const { + return {}; +} + +base::span<const InteractionsStats> PasswordDataForUI::GetInteractionsStats() + const { + return {}; +} + +bool PasswordDataForUI::IsBlacklisted() const { + // 'true' would suppress the bubble. + return false; +} + +void PasswordDataForUI::Save() { + bubble_interaction_cb_.Run(true, pending_form_); +} + +void PasswordDataForUI::Update(const PasswordForm&) { + // The method is obsolete. + NOTREACHED(); +} + +void PasswordDataForUI::UpdateUsername(const base::string16& new_username) { + pending_form_.username_value = new_username; +} + +void PasswordDataForUI::UpdatePasswordValue( + const base::string16& new_password) { + // Ignore. The generated password can be edited in-place. +} + +void PasswordDataForUI::OnNopeUpdateClicked() { + bubble_interaction_cb_.Run(false, pending_form_); +} + +void PasswordDataForUI::OnNeverClicked() { + bubble_interaction_cb_.Run(false, pending_form_); +} + +void PasswordDataForUI::OnNoInteraction(bool is_update) { + bubble_interaction_cb_.Run(false, pending_form_); +} + +void PasswordDataForUI::PermanentlyBlacklist() {} + +void PasswordDataForUI::OnPasswordsRevealed() {} + +// Returns a form from |matches| that causes a name conflict with |generated|. +const PasswordForm* FindUsernameConflict( + const PasswordForm& generated, + const std::vector<const PasswordForm*>& matches) { + for (const auto* form : matches) { + if (form->username_value == generated.username_value) + return form; + } + return nullptr; +} +} // namespace + PasswordGenerationState::PasswordGenerationState(FormSaver* form_saver, PasswordManagerClient* client) : form_saver_(form_saver), client_(client), - clock_(new base::DefaultClock) {} + clock_(new base::DefaultClock), + weak_factory_(this) {} PasswordGenerationState::~PasswordGenerationState() = default; @@ -30,23 +198,35 @@ } void PasswordGenerationState::GeneratedPasswordAccepted( - const PasswordForm& generated, - const std::vector<const autofill::PasswordForm*>& matches, + PasswordForm generated, + const FormFetcher& fetcher, base::WeakPtr<PasswordManagerDriver> driver) { - // TODO(936011): more logic is coming. + // Clear the username value if there are already saved credentials with + // the same username in order to prevent overwriting. + std::vector<const PasswordForm*> matches = fetcher.GetNonFederatedMatches(); + if (FindUsernameConflict(generated, matches)) { + generated.username_value.clear(); + const PasswordForm* conflict = FindUsernameConflict(generated, matches); + if (conflict) { + auto bubble_launcher = std::make_unique<PasswordDataForUI>( + std::move(generated), matches, fetcher.GetFederatedMatches(), + base::BindRepeating(&PasswordGenerationState::OnPresaveBubbleResult, + weak_factory_.GetWeakPtr(), std::move(driver))); + client_->PromptUserToSaveOrUpdatePassword(std::move(bubble_launcher), + true); + return; + } + } driver->GeneratedPasswordAccepted(generated.password_value); } void PasswordGenerationState::PresaveGeneratedPassword( PasswordForm generated, - const std::vector<const autofill::PasswordForm*>& matches) { + const std::vector<const PasswordForm*>& matches) { DCHECK(!generated.password_value.empty()); // Clear the username value if there are already saved credentials with // the same username in order to prevent overwriting. - if (std::any_of(matches.begin(), matches.end(), - [&generated](const autofill::PasswordForm* form) { - return form->username_value == generated.username_value; - })) + if (FindUsernameConflict(generated, matches)) generated.username_value.clear(); generated.date_created = clock_->Now(); if (presaved_) { @@ -68,7 +248,7 @@ void PasswordGenerationState::CommitGeneratedPassword( PasswordForm generated, - const std::vector<const autofill::PasswordForm*>& matches, + const std::vector<const PasswordForm*>& matches, const base::string16& old_password) { DCHECK(presaved_); generated.preferred = true; @@ -77,4 +257,14 @@ presaved_.value() /* old_primary_key */); } +void PasswordGenerationState::OnPresaveBubbleResult( + const base::WeakPtr<PasswordManagerDriver>& driver, + bool accepted, + const PasswordForm& pending) { + weak_factory_.InvalidateWeakPtrs(); + if (accepted) { + driver->GeneratedPasswordAccepted(pending.password_value); + } +} + } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_generation_state.h b/components/password_manager/core/browser/password_generation_state.h index 0c1a27c0..9df01a0 100644 --- a/components/password_manager/core/browser/password_generation_state.h +++ b/components/password_manager/core/browser/password_generation_state.h
@@ -15,6 +15,7 @@ namespace password_manager { +class FormFetcher; class FormSaver; class PasswordManagerClient; class PasswordManagerDriver; @@ -37,11 +38,17 @@ // Called when user wants to start generation flow for |generated|. If there // is no username conflict, the message is synchronously passed to |driver|. + // |fetcher| to fill that UI with correct data. // Otherwise, the UI on the client is invoked to ask for overwrite permission. - void GeneratedPasswordAccepted( - const autofill::PasswordForm& generated, - const std::vector<const autofill::PasswordForm*>& matches, - base::WeakPtr<PasswordManagerDriver> driver); + // There is one corner case that is still not covered. + // The user had the current password saved with empty username. + // - The change password form has no username. + // - The user generates a password and sees the bubble with an empty username. + // - The user clicks 'Update'. + // - The actual form submission doesn't succeed for some reason. + void GeneratedPasswordAccepted(autofill::PasswordForm generated, + const FormFetcher& fetcher, + base::WeakPtr<PasswordManagerDriver> driver); // Called when generated password is accepted or changed by user. void PresaveGeneratedPassword( @@ -65,6 +72,10 @@ #endif private: + void OnPresaveBubbleResult(const base::WeakPtr<PasswordManagerDriver>& driver, + bool accepted, + const autofill::PasswordForm& pending); + // Weak reference to the interface for saving credentials. FormSaver* const form_saver_; // The client for the password form. @@ -73,6 +84,8 @@ base::Optional<autofill::PasswordForm> presaved_; // Interface to get current time. std::unique_ptr<base::Clock> clock_; + // Used to produce callbacks. + base::WeakPtrFactory<PasswordGenerationState> weak_factory_; }; } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_generation_state_unittest.cc b/components/password_manager/core/browser/password_generation_state_unittest.cc index 1e4a5ac..28f5999 100644 --- a/components/password_manager/core/browser/password_generation_state_unittest.cc +++ b/components/password_manager/core/browser/password_generation_state_unittest.cc
@@ -8,9 +8,12 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_task_environment.h" #include "base/test/simple_test_clock.h" +#include "components/password_manager/core/browser/fake_form_fetcher.h" #include "components/password_manager/core/browser/form_saver_impl.h" #include "components/password_manager/core/browser/mock_password_store.h" +#include "components/password_manager/core/browser/password_form_manager_for_ui.h" #include "components/password_manager/core/browser/stub_password_manager_client.h" +#include "components/password_manager/core/browser/stub_password_manager_driver.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -20,6 +23,10 @@ using autofill::PasswordForm; using base::ASCIIToUTF16; using testing::_; +using testing::ElementsAre; +using testing::IsEmpty; +using testing::Key; +using testing::Pointee; constexpr char kURL[] = "https://example.in/login"; constexpr char kSubdomainURL[] = "https://m.example.in/login"; @@ -37,6 +44,17 @@ return form; } +PasswordForm CreateSavedFederated() { + autofill::PasswordForm federated; + federated.origin = GURL(kURL); + federated.signon_realm = "federation://example.in/google.com"; + federated.type = autofill::PasswordForm::Type::kApi; + federated.federation_origin = + url::Origin::Create(GURL("https://google.com/")); + federated.username_value = ASCIIToUTF16("federated_username"); + return federated; +} + // Creates a dummy saved PSL credential. PasswordForm CreateSavedPSL() { PasswordForm form; @@ -66,6 +84,35 @@ return ArePasswordFormUniqueKeysEqual(arg, key); } +class MockPasswordManagerDriver : public StubPasswordManagerDriver { + public: + MOCK_METHOD1(GeneratedPasswordAccepted, void(const base::string16& password)); +}; + +class MockPasswordManagerClient : public StubPasswordManagerClient { + public: + bool PromptUserToSaveOrUpdatePassword( + std::unique_ptr<PasswordFormManagerForUI> form_to_save, + bool update_password) override; + + MOCK_METHOD1(PromptUserToSaveOrUpdatePasswordMock, + bool(bool update_password)); + + std::unique_ptr<PasswordFormManagerForUI> MoveForm() { + return std::move(form_to_save_); + } + + private: + std::unique_ptr<PasswordFormManagerForUI> form_to_save_; +}; + +bool MockPasswordManagerClient::PromptUserToSaveOrUpdatePassword( + std::unique_ptr<PasswordFormManagerForUI> form_to_save, + bool update_password) { + form_to_save_ = std::move(form_to_save); + return PromptUserToSaveOrUpdatePasswordMock(update_password); +} + class PasswordGenerationStateTest : public testing::Test { public: PasswordGenerationStateTest(); @@ -74,7 +121,12 @@ MockPasswordStore& store() { return *mock_store_; } PasswordGenerationState& state() { return generation_state_; } FormSaverImpl& form_saver() { return form_saver_; } - StubPasswordManagerClient& client() { return client_; } + MockPasswordManagerClient& client() { return client_; } + + // Immitates user accepting the password that can't be immediately presaved. + // The returned value represents the UI model for the update bubble. + std::unique_ptr<PasswordFormManagerForUI> SetUpOverwritingUI( + base::WeakPtr<PasswordManagerDriver> driver); private: // For the MockPasswordStore. @@ -82,7 +134,7 @@ scoped_refptr<MockPasswordStore> mock_store_; // Test with the real form saver for better robustness. FormSaverImpl form_saver_; - StubPasswordManagerClient client_; + MockPasswordManagerClient client_; PasswordGenerationState generation_state_; }; @@ -99,6 +151,111 @@ mock_store_->ShutdownOnUIThread(); } +std::unique_ptr<PasswordFormManagerForUI> +PasswordGenerationStateTest::SetUpOverwritingUI( + base::WeakPtr<PasswordManagerDriver> driver) { + PasswordForm generated = CreateGenerated(); + PasswordForm saved = CreateSaved(); + generated.username_value = ASCIIToUTF16(""); + saved.username_value = ASCIIToUTF16(""); + const PasswordForm federated = CreateSavedFederated(); + FakeFormFetcher fetcher; + fetcher.SetNonFederated({&saved}); + fetcher.set_federated({&federated}); + + EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordMock(true)) + .WillOnce(testing::Return(true)); + state().GeneratedPasswordAccepted(std::move(generated), fetcher, + std::move(driver)); + return client_.MoveForm(); +} + +// Check that accepting a generated password simply relays the message to the +// driver. +TEST_F(PasswordGenerationStateTest, GeneratedPasswordAccepted_EmptyStore) { + PasswordForm generated = CreateGenerated(); + MockPasswordManagerDriver driver; + FakeFormFetcher fetcher; + + EXPECT_CALL(driver, GeneratedPasswordAccepted(generated.password_value)); + state().GeneratedPasswordAccepted(std::move(generated), fetcher, + driver.AsWeakPtr()); + EXPECT_FALSE(state().HasGeneratedPassword()); +} + +// In case of accepted password conflicts with an existing username the +// credential can be presaved with an empty one. Thus, no conflict happens and +// the driver should be notified directly. +TEST_F(PasswordGenerationStateTest, GeneratedPasswordAccepted_Conflict) { + PasswordForm generated = CreateGenerated(); + const PasswordForm saved = CreateSaved(); + generated.username_value = saved.username_value; + MockPasswordManagerDriver driver; + FakeFormFetcher fetcher; + fetcher.SetNonFederated({&saved}); + + EXPECT_CALL(driver, GeneratedPasswordAccepted(generated.password_value)); + state().GeneratedPasswordAccepted(std::move(generated), fetcher, + driver.AsWeakPtr()); + EXPECT_FALSE(state().HasGeneratedPassword()); +} + +TEST_F(PasswordGenerationStateTest, GeneratedPasswordAccepted_UpdateUI) { + MockPasswordManagerDriver driver; + EXPECT_CALL(driver, GeneratedPasswordAccepted(_)).Times(0); + std::unique_ptr<PasswordFormManagerForUI> ui_form = + SetUpOverwritingUI(driver.AsWeakPtr()); + ASSERT_TRUE(ui_form); + EXPECT_EQ(GURL(kURL), ui_form->GetOrigin()); + EXPECT_THAT(ui_form->GetBestMatches(), ElementsAre(Key(ASCIIToUTF16("")))); + EXPECT_THAT(ui_form->GetFederatedMatches(), + ElementsAre(Pointee(CreateSavedFederated()))); + EXPECT_EQ(ASCIIToUTF16(""), ui_form->GetPendingCredentials().username_value); + EXPECT_EQ(CreateGenerated().password_value, + ui_form->GetPendingCredentials().password_value); + EXPECT_THAT(ui_form->GetBlacklistedMatches(), IsEmpty()); + EXPECT_THAT(ui_form->GetInteractionsStats(), IsEmpty()); + EXPECT_FALSE(ui_form->IsBlacklisted()); +} + +TEST_F(PasswordGenerationStateTest, + GeneratedPasswordAccepted_UpdateUIDismissed) { + MockPasswordManagerDriver driver; + EXPECT_CALL(driver, GeneratedPasswordAccepted(_)).Times(0); + std::unique_ptr<PasswordFormManagerForUI> ui_form = + SetUpOverwritingUI(driver.AsWeakPtr()); + ASSERT_TRUE(ui_form); + ui_form->OnNoInteraction(true); +} + +TEST_F(PasswordGenerationStateTest, GeneratedPasswordAccepted_UpdateUINope) { + MockPasswordManagerDriver driver; + EXPECT_CALL(driver, GeneratedPasswordAccepted(_)).Times(0); + std::unique_ptr<PasswordFormManagerForUI> ui_form = + SetUpOverwritingUI(driver.AsWeakPtr()); + ASSERT_TRUE(ui_form); + ui_form->OnNopeUpdateClicked(); +} + +TEST_F(PasswordGenerationStateTest, GeneratedPasswordAccepted_UpdateUINever) { + MockPasswordManagerDriver driver; + EXPECT_CALL(driver, GeneratedPasswordAccepted(_)).Times(0); + std::unique_ptr<PasswordFormManagerForUI> ui_form = + SetUpOverwritingUI(driver.AsWeakPtr()); + ASSERT_TRUE(ui_form); + ui_form->OnNeverClicked(); +} + +TEST_F(PasswordGenerationStateTest, GeneratedPasswordAccepted_UpdateUISave) { + MockPasswordManagerDriver driver; + std::unique_ptr<PasswordFormManagerForUI> ui_form = + SetUpOverwritingUI(driver.AsWeakPtr()); + ASSERT_TRUE(ui_form); + EXPECT_CALL(driver, + GeneratedPasswordAccepted(CreateGenerated().password_value)); + ui_form->Save(); +} + // Check that presaving a password for the first time results in adding it. TEST_F(PasswordGenerationStateTest, PresaveGeneratedPassword_New) { const PasswordForm generated = CreateGenerated();
diff --git a/components/password_manager/core/browser/password_sync_util.cc b/components/password_manager/core/browser/password_sync_util.cc index 20a606a..92e1b25 100644 --- a/components/password_manager/core/browser/password_sync_util.cc +++ b/components/password_manager/core/browser/password_sync_util.cc
@@ -7,11 +7,11 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "components/autofill/core/common/password_form.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/base/user_selectable_type.h" #include "components/sync/driver/sync_user_settings.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" -#include "services/identity/public/cpp/identity_manager.h" #include "url/origin.h" #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED)
diff --git a/components/password_manager/core/browser/sync_username_test_base.h b/components/password_manager/core/browser/sync_username_test_base.h index 09ac897c..34527ec 100644 --- a/components/password_manager/core/browser/sync_username_test_base.h +++ b/components/password_manager/core/browser/sync_username_test_base.h
@@ -12,8 +12,8 @@ #include "base/test/scoped_task_environment.h" #include "components/autofill/core/common/password_form.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/test_sync_service.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace password_manager {
diff --git a/components/policy/core/common/BUILD.gn b/components/policy/core/common/BUILD.gn index b0c3b6b..d8154cc 100644 --- a/components/policy/core/common/BUILD.gn +++ b/components/policy/core/common/BUILD.gn
@@ -159,12 +159,12 @@ "//base/third_party/dynamic_annotations", "//components/account_id", "//components/prefs", + "//components/signin/public/identity_manager", "//components/strings", "//components/version_info", "//extensions/buildflags", "//google_apis", "//net", - "//services/identity/public/cpp", "//services/identity/public/cpp:cpp_types", "//services/network/public/cpp", "//third_party/libxml",
diff --git a/components/policy/core/common/cloud/DEPS b/components/policy/core/common/cloud/DEPS index 692812d..71018a6 100644 --- a/components/policy/core/common/cloud/DEPS +++ b/components/policy/core/common/cloud/DEPS
@@ -1,3 +1,4 @@ include_rules = [ + "+components/signin/public", "+services/identity/public/cpp", ]
diff --git a/components/policy/core/common/cloud/cloud_policy_client_registration_helper.cc b/components/policy/core/common/cloud/cloud_policy_client_registration_helper.cc index 785a86e..4b30b46 100644 --- a/components/policy/core/common/cloud/cloud_policy_client_registration_helper.cc +++ b/components/policy/core/common/cloud/cloud_policy_client_registration_helper.cc
@@ -11,12 +11,12 @@ #include "base/values.h" #include "build/build_config.h" #include "components/policy/core/common/cloud/dm_auth.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/access_token_info.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/cpp/scope_set.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/search_provider_logos/BUILD.gn b/components/search_provider_logos/BUILD.gn index 8676d7f..c95e6f3e 100644 --- a/components/search_provider_logos/BUILD.gn +++ b/components/search_provider_logos/BUILD.gn
@@ -33,8 +33,8 @@ "//components/keyed_service/core", "//components/search_engines", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//net", - "//services/identity/public/cpp", "//services/network/public/cpp", "//services/network/public/mojom", "//ui/gfx", @@ -98,9 +98,9 @@ "//components/search_engines", "//components/signin/core/browser", "//components/signin/core/browser:internals_test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync_preferences:test_support", "//net:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//testing/gmock", "//testing/gtest",
diff --git a/components/search_provider_logos/DEPS b/components/search_provider_logos/DEPS index c8cebd8..7a75cde 100644 --- a/components/search_provider_logos/DEPS +++ b/components/search_provider_logos/DEPS
@@ -19,10 +19,10 @@ "-components/signin/core/browser/profile_oauth2_token_service.h", "-components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h", "-components/signin/core/browser/ubertoken_fetcher_impl.h", + "+components/signin/public", "+components/sync_preferences/testing_pref_service_syncable.h", "+net", - "+services/identity/public/cpp", "+services/network/public/cpp", "+services/network/public/mojom", "+services/network/test",
diff --git a/components/search_provider_logos/logo_service_impl.h b/components/search_provider_logos/logo_service_impl.h index 835b384..4edd54f 100644 --- a/components/search_provider_logos/logo_service_impl.h +++ b/components/search_provider_logos/logo_service_impl.h
@@ -19,7 +19,7 @@ #include "base/time/time.h" #include "components/search_provider_logos/logo_common.h" #include "components/search_provider_logos/logo_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class TemplateURLService;
diff --git a/components/search_provider_logos/logo_service_impl_unittest.cc b/components/search_provider_logos/logo_service_impl_unittest.cc index d351963..0eeb41d 100644 --- a/components/search_provider_logos/logo_service_impl_unittest.cc +++ b/components/search_provider_logos/logo_service_impl_unittest.cc
@@ -36,12 +36,12 @@ #include "components/search_provider_logos/google_logo_api.h" #include "components/search_provider_logos/logo_cache.h" #include "components/search_provider_logos/logo_observer.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "net/base/url_util.h" #include "net/http/http_response_headers.h" #include "net/http/http_status_code.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_test_util.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/components/signin/DEPS b/components/signin/DEPS index 63cf12d..fb87796 100644 --- a/components/signin/DEPS +++ b/components/signin/DEPS
@@ -1,20 +1,19 @@ include_rules = [ "+components/content_settings", "+components/google/core", + "+components/image_fetcher/core", "+components/keyed_service/core", "+components/os_crypt", "+components/prefs", "+components/sync_preferences", + "+components/signin", "+components/webdata/common", "+crypto", "+google_apis/gaia", "+grit", # For generated headers "+net", + "+services/identity/public", + "+services/network/public", + "+services/network/test", "+sql", ] - -specific_include_rules = { - "test_signin_client\.h": [ - "+services/network/test" - ] -}
diff --git a/components/signin/core/browser/BUILD.gn b/components/signin/core/browser/BUILD.gn index e638b5f..452faf1c 100644 --- a/components/signin/core/browser/BUILD.gn +++ b/components/signin/core/browser/BUILD.gn
@@ -64,10 +64,10 @@ } # This target forms the core of the IdentityManager implementation -# (//services/identity/public/cpp/identity_manager.*). We are actively -# converting the codebase away from using the code in this target directly to -# using IdentityManager (tracked in https://crbug.com/796544). Do not add code -# to this target without consulting with blundell@chromium.org. +# (//components/signin/public/identity_manager/identity_manager.*). We are +# actively converting the codebase away from using the code in this target +# directly to using IdentityManager (tracked in https://crbug.com/796544). Do +# not add code to this target without consulting with blundell@chromium.org. static_library("internals") { sources = [ "account_fetcher_service.cc", @@ -201,9 +201,9 @@ "//components/google/core/browser", "//components/metrics", "//components/os_crypt", + "//components/signin/public/identity_manager", "//components/webdata/common", "//crypto", - "//services/identity/public/cpp", "//services/network/public/cpp", "//skia", "//sql", @@ -247,7 +247,8 @@ "fake_profile_oauth2_token_service.h", # TODO(https://crbug.com/907782): Move list_accounts_test_utils to - # //services/identity/public/cpp once FakeGCMS no longer depends on it. + # //components/signin/public/identity_manager once FakeGCMS no longer + # depends on it. "list_accounts_test_utils.cc", "list_accounts_test_utils.h", "test_signin_client.cc", @@ -308,12 +309,12 @@ "//components/prefs", "//components/prefs:test_support", "//components/signin/core/browser/webdata", + "//components/signin/public/identity_manager:test_support", "//components/sync_preferences", "//components/sync_preferences:test_support", "//components/webdata/common", "//google_apis:test_support", "//net:test_support", - "//services/identity/public/cpp:test_support", "//testing/gmock", "//testing/gtest", "//ui/gfx:test_support",
diff --git a/components/signin/core/browser/DEPS b/components/signin/core/browser/DEPS index 278e73a..777c796 100644 --- a/components/signin/core/browser/DEPS +++ b/components/signin/core/browser/DEPS
@@ -1,14 +1,10 @@ include_rules = [ "+chromeos/components/account_manager", "+components/account_id", - "+components/image_fetcher/core", "+components/metrics", "+components/user_manager/known_user.h", "+jni", "+mojo/public", - "+services/identity/public", - "+services/network/public", - "+services/network/test", "+third_party/re2", "+ui/gfx", ]
diff --git a/components/signin/core/browser/about_signin_internals.cc b/components/signin/core/browser/about_signin_internals.cc index 2c26ec0f4..015e8c70 100644 --- a/components/signin/core/browser/about_signin_internals.cc +++ b/components/signin/core/browser/about_signin_internals.cc
@@ -20,11 +20,11 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_client.h" #include "components/signin/core/browser/signin_switches.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/diagnostics_provider.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/oauth2_token_service_delegate.h" #include "net/base/backoff_entry.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" -#include "services/identity/public/cpp/diagnostics_provider.h" -#include "services/identity/public/cpp/identity_manager.h" namespace {
diff --git a/components/signin/core/browser/about_signin_internals.h b/components/signin/core/browser/about_signin_internals.h index 816e9b9..9ac5fec 100644 --- a/components/signin/core/browser/about_signin_internals.h +++ b/components/signin/core/browser/about_signin_internals.h
@@ -20,7 +20,7 @@ #include "components/signin/core/browser/signin_client.h" #include "components/signin/core/browser/signin_error_controller.h" #include "components/signin/core/browser/signin_internals_util.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "services/identity/public/cpp/scope_set.h" namespace identity {
diff --git a/components/signin/core/browser/account_investigator.cc b/components/signin/core/browser/account_investigator.cc index 9222b36..c45d8cb 100644 --- a/components/signin/core/browser/account_investigator.cc +++ b/components/signin/core/browser/account_investigator.cc
@@ -15,9 +15,9 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" using base::Time; using base::TimeDelta;
diff --git a/components/signin/core/browser/account_investigator.h b/components/signin/core/browser/account_investigator.h index 0d8acc73..25651d0 100644 --- a/components/signin/core/browser/account_investigator.h +++ b/components/signin/core/browser/account_investigator.h
@@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/timer/timer.h" #include "components/keyed_service/core/keyed_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" struct CoreAccountInfo; class PrefRegistrySimple;
diff --git a/components/signin/core/browser/account_investigator_unittest.cc b/components/signin/core/browser/account_investigator_unittest.cc index e6f5b19..9510de2 100644 --- a/components/signin/core/browser/account_investigator_unittest.cc +++ b/components/signin/core/browser/account_investigator_unittest.cc
@@ -15,10 +15,10 @@ #include "components/prefs/pref_registry_simple.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/signin/core/browser/account_reconcilor.cc b/components/signin/core/browser/account_reconcilor.cc index 9fef64e..12d70e0 100644 --- a/components/signin/core/browser/account_reconcilor.cc +++ b/components/signin/core/browser/account_reconcilor.cc
@@ -27,12 +27,12 @@ #include "components/signin/core/browser/signin_buildflags.h" #include "components/signin/core/browser/signin_client.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" -#include "services/identity/public/cpp/accounts_mutator.h" #if defined(OS_ANDROID) #include "components/signin/core/browser/consistency_cookie_manager_android.h"
diff --git a/components/signin/core/browser/account_reconcilor.h b/components/signin/core/browser/account_reconcilor.h index b680266..cc29fce 100644 --- a/components/signin/core/browser/account_reconcilor.h +++ b/components/signin/core/browser/account_reconcilor.h
@@ -26,8 +26,8 @@ #include "components/signin/core/browser/signin_client.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_manager.h" // Enables usage of Gaia Auth Multilogin endpoint for identity consistency. extern const base::Feature kUseMultiloginEndpoint;
diff --git a/components/signin/core/browser/account_reconcilor_unittest.cc b/components/signin/core/browser/account_reconcilor_unittest.cc index bc045e3..0bca285 100644 --- a/components/signin/core/browser/account_reconcilor_unittest.cc +++ b/components/signin/core/browser/account_reconcilor_unittest.cc
@@ -31,15 +31,15 @@ #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/url_request/test_url_fetcher_factory.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/signin/core/browser/consistency_cookie_manager_android.cc b/components/signin/core/browser/consistency_cookie_manager_android.cc index 2e4bdbc74..7a0f6ff 100644 --- a/components/signin/core/browser/consistency_cookie_manager_android.cc +++ b/components/signin/core/browser/consistency_cookie_manager_android.cc
@@ -5,7 +5,7 @@ #include "components/signin/core/browser/consistency_cookie_manager_android.h" #include "components/signin/core/browser/android/jni_headers/ConsistencyCookieManager_jni.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace signin {
diff --git a/components/signin/core/browser/consistency_cookie_manager_unittest.cc b/components/signin/core/browser/consistency_cookie_manager_unittest.cc index b623f3b..5eec907f 100644 --- a/components/signin/core/browser/consistency_cookie_manager_unittest.cc +++ b/components/signin/core/browser/consistency_cookie_manager_unittest.cc
@@ -13,9 +13,9 @@ #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/account_reconcilor_delegate.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "google_apis/gaia/gaia_urls.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_cookie_manager.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/signin/core/browser/identity_manager_wrapper.cc b/components/signin/core/browser/identity_manager_wrapper.cc index 7134830..fd692401 100644 --- a/components/signin/core/browser/identity_manager_wrapper.cc +++ b/components/signin/core/browser/identity_manager_wrapper.cc
@@ -10,10 +10,10 @@ #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider.h" -#include "services/identity/public/cpp/primary_account_mutator.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/diagnostics_provider.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" IdentityManagerWrapper::IdentityManagerWrapper( std::unique_ptr<AccountTrackerService> account_tracker_service,
diff --git a/components/signin/core/browser/identity_manager_wrapper.h b/components/signin/core/browser/identity_manager_wrapper.h index c733c7d..cfe63f48 100644 --- a/components/signin/core/browser/identity_manager_wrapper.h +++ b/components/signin/core/browser/identity_manager_wrapper.h
@@ -6,7 +6,7 @@ #define COMPONENTS_SIGNIN_CORE_BROWSER_IDENTITY_MANAGER_WRAPPER_H_ #include "components/keyed_service/core/keyed_service.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" class AccountFetcherService; class AccountsMutator;
diff --git a/components/signin/core/browser/mirror_account_reconcilor_delegate.h b/components/signin/core/browser/mirror_account_reconcilor_delegate.h index 77bdfb2f..5f4dc7c 100644 --- a/components/signin/core/browser/mirror_account_reconcilor_delegate.h +++ b/components/signin/core/browser/mirror_account_reconcilor_delegate.h
@@ -10,7 +10,7 @@ #include "base/macros.h" #include "components/signin/core/browser/account_reconcilor_delegate.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace signin {
diff --git a/components/signin/core/browser/profile_oauth2_token_service.cc b/components/signin/core/browser/profile_oauth2_token_service.cc index 415fcd62..4c083563 100644 --- a/components/signin/core/browser/profile_oauth2_token_service.cc +++ b/components/signin/core/browser/profile_oauth2_token_service.cc
@@ -145,6 +145,12 @@ } #endif +void ProfileOAuth2TokenService::UpdateAuthErrorForTesting( + const CoreAccountId& account_id, + const GoogleServiceAuthError& error) { + GetDelegate()->UpdateAuthError(account_id, error); +} + void ProfileOAuth2TokenService::OnRefreshTokenAvailable( const CoreAccountId& account_id) { OAuth2TokenService::OnRefreshTokenAvailable(account_id);
diff --git a/components/signin/core/browser/profile_oauth2_token_service.h b/components/signin/core/browser/profile_oauth2_token_service.h index 03886da..fd04ed8 100644 --- a/components/signin/core/browser/profile_oauth2_token_service.h +++ b/components/signin/core/browser/profile_oauth2_token_service.h
@@ -115,9 +115,7 @@ // Exposes the ability to update auth errors to tests. void UpdateAuthErrorForTesting(const CoreAccountId& account_id, - const GoogleServiceAuthError& error) { - UpdateAuthError(account_id, error); - } + const GoogleServiceAuthError& error); private: friend class identity::IdentityManager;
diff --git a/components/signin/core/browser/signin_error_controller.h b/components/signin/core/browser/signin_error_controller.h index 3111119..e06a2f1b 100644 --- a/components/signin/core/browser/signin_error_controller.h +++ b/components/signin/core/browser/signin_error_controller.h
@@ -13,8 +13,8 @@ #include "base/observer_list.h" #include "base/scoped_observer.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_manager.h" // Keep track of auth errors and expose them to observers in the UI. Services // that wish to expose auth errors to the user should register an
diff --git a/components/signin/core/browser/signin_error_controller_unittest.cc b/components/signin/core/browser/signin_error_controller_unittest.cc index 68a1b00..2c3b2f42 100644 --- a/components/signin/core/browser/signin_error_controller_unittest.cc +++ b/components/signin/core/browser/signin_error_controller_unittest.cc
@@ -12,8 +12,8 @@ #include "base/scoped_observer.h" #include "base/stl_util.h" #include "base/test/scoped_task_environment.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/primary_account_mutator.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/signin/core/browser/signin_investigator_unittest.cc b/components/signin/core/browser/signin_investigator_unittest.cc index cb861a03..de525a6 100644 --- a/components/signin/core/browser/signin_investigator_unittest.cc +++ b/components/signin/core/browser/signin_investigator_unittest.cc
@@ -10,8 +10,8 @@ #include "components/signin/core/browser/signin_investigator.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" using signin_metrics::AccountEquality;
diff --git a/components/signin/core/browser/signin_status_metrics_provider.h b/components/signin/core/browser/signin_status_metrics_provider.h index 1a027dc..364a8c378 100644 --- a/components/signin/core/browser/signin_status_metrics_provider.h +++ b/components/signin/core/browser/signin_status_metrics_provider.h
@@ -16,7 +16,7 @@ #include "build/build_config.h" #include "components/signin/core/browser/signin_status_metrics_provider_base.h" #include "components/signin/core/browser/signin_status_metrics_provider_delegate.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace metrics { class ChromeUserMetricsExtension;
diff --git a/components/signin/internal/identity_manager/BUILD.gn b/components/signin/internal/identity_manager/BUILD.gn new file mode 100644 index 0000000..466baf8 --- /dev/null +++ b/components/signin/internal/identity_manager/BUILD.gn
@@ -0,0 +1,36 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("identity_manager") { + sources = [ + "accounts_cookie_mutator_impl.cc", + "accounts_cookie_mutator_impl.h", + "diagnostics_provider_impl.cc", + "diagnostics_provider_impl.h", + "primary_account_mutator_impl.cc", + "primary_account_mutator_impl.h", + ] + + configs += [ "//build/config/compiler:wexit_time_destructors" ] + + public_deps = [ + "//base", + "//components/signin/public/identity_manager", + "//google_apis", + ] + + deps = [ + "//components/prefs", + "//components/signin/core/browser:internals", + "//components/signin/core/browser:shared", + "//components/signin/core/browser:signin_buildflags", + ] + + if (!is_android && !is_ios) { + sources += [ + "accounts_mutator_impl.cc", + "accounts_mutator_impl.h", + ] + } +}
diff --git a/services/identity/public/cpp/accounts_cookie_mutator_impl.cc b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc similarity index 93% rename from services/identity/public/cpp/accounts_cookie_mutator_impl.cc rename to components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc index 6874343..10c6bf7 100644 --- a/services/identity/public/cpp/accounts_cookie_mutator_impl.cc +++ b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc
@@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" +#include "components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h" #include <vector> +#include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" namespace identity {
diff --git a/services/identity/public/cpp/accounts_cookie_mutator_impl.h b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h similarity index 81% rename from services/identity/public/cpp/accounts_cookie_mutator_impl.h rename to components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h index 33d459a0..bb7c4eb 100644 --- a/services/identity/public/cpp/accounts_cookie_mutator_impl.h +++ b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_ +#ifndef COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_ +#define COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_ #include <string> #include <vector> #include "base/macros.h" -#include "components/signin/core/browser/account_tracker_service.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +class AccountTrackerService; class GaiaCookieManagerService; namespace gaia { @@ -58,4 +58,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_ +#endif // COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_
diff --git a/services/identity/public/cpp/accounts_mutator_impl.cc b/components/signin/internal/identity_manager/accounts_mutator_impl.cc similarity index 97% rename from services/identity/public/cpp/accounts_mutator_impl.cc rename to components/signin/internal/identity_manager/accounts_mutator_impl.cc index 2e17776..fac9e1e7 100644 --- a/services/identity/public/cpp/accounts_mutator_impl.cc +++ b/components/signin/internal/identity_manager/accounts_mutator_impl.cc
@@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/accounts_mutator_impl.h" +#include "components/signin/internal/identity_manager/accounts_mutator_impl.h" #include <string> -#include "base/logging.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/account_tracker_service.h"
diff --git a/services/identity/public/cpp/accounts_mutator_impl.h b/components/signin/internal/identity_manager/accounts_mutator_impl.h similarity index 88% rename from services/identity/public/cpp/accounts_mutator_impl.h rename to components/signin/internal/identity_manager/accounts_mutator_impl.h index a4f58ab1..38beacf5 100644 --- a/services/identity/public/cpp/accounts_mutator_impl.h +++ b/components/signin/internal/identity_manager/accounts_mutator_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 SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_MUTATOR_IMPL_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_MUTATOR_IMPL_H_ +#ifndef COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_MUTATOR_IMPL_H_ +#define COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_MUTATOR_IMPL_H_ #include <string> @@ -11,8 +11,8 @@ #include "build/buildflag.h" #include "components/signin/core/browser/signin_buildflags.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" #include "google_apis/gaia/core_account_id.h" -#include "services/identity/public/cpp/accounts_mutator.h" class AccountTrackerService; class PrefService; @@ -69,4 +69,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_MUTATOR_IMPL_H_ +#endif // COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_MUTATOR_IMPL_H_
diff --git a/services/identity/public/cpp/diagnostics_provider_impl.cc b/components/signin/internal/identity_manager/diagnostics_provider_impl.cc similarity index 94% rename from services/identity/public/cpp/diagnostics_provider_impl.cc rename to components/signin/internal/identity_manager/diagnostics_provider_impl.cc index b00e48b..5d47eb5 100644 --- a/services/identity/public/cpp/diagnostics_provider_impl.cc +++ b/components/signin/internal/identity_manager/diagnostics_provider_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 "services/identity/public/cpp/diagnostics_provider_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" @@ -41,4 +41,4 @@ return gaia_cookie_manager_service_->GetBackoffEntry()->GetTimeUntilRelease(); } -} // namespace identity \ No newline at end of file +} // namespace identity
diff --git a/services/identity/public/cpp/diagnostics_provider_impl.h b/components/signin/internal/identity_manager/diagnostics_provider_impl.h similarity index 80% rename from services/identity/public/cpp/diagnostics_provider_impl.h rename to components/signin/internal/identity_manager/diagnostics_provider_impl.h index 13c22650..54664d5 100644 --- a/services/identity/public/cpp/diagnostics_provider_impl.h +++ b/components/signin/internal/identity_manager/diagnostics_provider_impl.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_DIAGNOSTICS_PROVIDER_IMPL_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_DIAGNOSTICS_PROVIDER_IMPL_H_ +#ifndef COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_DIAGNOSTICS_PROVIDER_IMPL_H_ +#define COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_DIAGNOSTICS_PROVIDER_IMPL_H_ #include "base/macros.h" -#include "services/identity/public/cpp/diagnostics_provider.h" +#include "components/signin/public/identity_manager/diagnostics_provider.h" class GaiaCookieManagerService; class ProfileOAuth2TokenService; @@ -42,4 +42,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_DIAGNOSTICS_PROVIDER_IMPL_H_ +#endif // COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_DIAGNOSTICS_PROVIDER_IMPL_H_
diff --git a/services/identity/public/cpp/primary_account_mutator_impl.cc b/components/signin/internal/identity_manager/primary_account_mutator_impl.cc similarity index 96% rename from services/identity/public/cpp/primary_account_mutator_impl.cc rename to components/signin/internal/identity_manager/primary_account_mutator_impl.cc index a159b01..0ddbeea 100644 --- a/services/identity/public/cpp/primary_account_mutator_impl.cc +++ b/components/signin/internal/identity_manager/primary_account_mutator_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 "services/identity/public/cpp/primary_account_mutator_impl.h" +#include "components/signin/internal/identity_manager/primary_account_mutator_impl.h" #include <string>
diff --git a/services/identity/public/cpp/primary_account_mutator_impl.h b/components/signin/internal/identity_manager/primary_account_mutator_impl.h similarity index 81% rename from services/identity/public/cpp/primary_account_mutator_impl.h rename to components/signin/internal/identity_manager/primary_account_mutator_impl.h index b0163dc..14bc379 100644 --- a/services/identity/public/cpp/primary_account_mutator_impl.h +++ b/components/signin/internal/identity_manager/primary_account_mutator_impl.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_MUTATOR_IMPL_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_MUTATOR_IMPL_H_ - -#include "services/identity/public/cpp/primary_account_mutator.h" +#ifndef COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_PRIMARY_ACCOUNT_MUTATOR_IMPL_H_ +#define COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_PRIMARY_ACCOUNT_MUTATOR_IMPL_H_ #include <string> +#include "components/signin/public/identity_manager/primary_account_mutator.h" + class AccountTrackerService; class PrefService; class PrimaryAccountManager; @@ -46,4 +46,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_MUTATOR_IMPL_H_ +#endif // COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_PRIMARY_ACCOUNT_MUTATOR_IMPL_H_
diff --git a/components/signin/ios/DEPS b/components/signin/ios/DEPS index bb46705a..4dd6307 100644 --- a/components/signin/ios/DEPS +++ b/components/signin/ios/DEPS
@@ -1,5 +1,4 @@ include_rules = [ "+ios/web/public", - "+services/identity/public/cpp", "+third_party/ocmock", ]
diff --git a/components/signin/ios/browser/BUILD.gn b/components/signin/ios/browser/BUILD.gn index 35495db9..cbc35a2 100644 --- a/components/signin/ios/browser/BUILD.gn +++ b/components/signin/ios/browser/BUILD.gn
@@ -24,10 +24,10 @@ "//components/pref_registry", "//components/prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//google_apis", "//ios/web", "//net", - "//services/identity/public/cpp:cpp", ] } @@ -75,11 +75,12 @@ ":test_support", "//components/prefs:test_support", "//components/signin/core/browser", + "//components/signin/core/browser:internals_test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync_preferences:test_support", "//ios/web", "//ios/web/public/test", "//ios/web/public/test/fakes", - "//services/identity/public/cpp:test_support", "//third_party/ocmock", ] }
diff --git a/components/signin/ios/browser/account_consistency_service.h b/components/signin/ios/browser/account_consistency_service.h index e70f21b..0041a8a7 100644 --- a/components/signin/ios/browser/account_consistency_service.h +++ b/components/signin/ios/browser/account_consistency_service.h
@@ -19,7 +19,7 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/signin/ios/browser/active_state_manager.h" #import "components/signin/ios/browser/manage_accounts_delegate.h" -#import "services/identity/public/cpp/identity_manager.h" +#import "components/signin/public/identity_manager/identity_manager.h" namespace web { class BrowserState;
diff --git a/components/signin/ios/browser/account_consistency_service_unittest.mm b/components/signin/ios/browser/account_consistency_service_unittest.mm index 0a2e3d0..0e6134e0 100644 --- a/components/signin/ios/browser/account_consistency_service_unittest.mm +++ b/components/signin/ios/browser/account_consistency_service_unittest.mm
@@ -15,14 +15,14 @@ #include "components/signin/core/browser/account_reconcilor_delegate.h" #include "components/signin/core/browser/list_accounts_test_utils.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "ios/web/public/test/fakes/test_browser_state.h" #import "ios/web/public/test/fakes/test_web_state.h" #include "ios/web/public/test/test_web_thread_bundle.h" #include "ios/web/public/web_state/web_state_policy_decider.h" -#import "services/identity/public/cpp/identity_manager.h" -#import "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/test_identity_manager_observer.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h"
diff --git a/components/signin/public/identity_manager/BUILD.gn b/components/signin/public/identity_manager/BUILD.gn new file mode 100644 index 0000000..369d989 --- /dev/null +++ b/components/signin/public/identity_manager/BUILD.gn
@@ -0,0 +1,108 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("identity_manager") { + sources = [ + "access_token_fetcher.cc", + "access_token_fetcher.h", + "access_token_info.cc", + "access_token_info.h", + "accounts_cookie_mutator.h", + "accounts_in_cookie_jar_info.cc", + "accounts_in_cookie_jar_info.h", + "accounts_mutator.h", + "diagnostics_provider.h", + "identity_manager.cc", + "identity_manager.h", + "primary_account_access_token_fetcher.cc", + "primary_account_access_token_fetcher.h", + "primary_account_mutator.h", + ] + + configs += [ "//build/config/compiler:wexit_time_destructors" ] + + public_deps = [ + "//base", + "//components/signin/core/browser:shared", + "//components/signin/core/browser:signin_buildflags", + "//google_apis", + "//services/identity/public/cpp:cpp_types", + ] + + deps = [ + "//components/signin/core/browser:internals", + "//services/network/public/cpp", + ] +} + +source_set("unit_tests") { + testonly = true + + sources = [ + "access_token_fetcher_unittest.cc", + "accounts_cookie_mutator_unittest.cc", + "accounts_mutator_unittest.cc", + "diagnostics_provider_unittest.cc", + "identity_manager_unittest.cc", + "identity_test_environment_unittest.cc", + "primary_account_access_token_fetcher_unittest.cc", + ] + + deps = [ + ":identity_manager", + ":test_support", + "//base", + "//base/test:test_support", + "//components/image_fetcher/core:test_support", + "//components/prefs:test_support", + "//components/signin/core/browser:internals", + "//components/signin/core/browser:internals_test_support", + "//components/signin/core/browser:shared", + "//components/signin/internal/identity_manager", + "//components/signin/public/identity_manager", + "//components/sync_preferences:test_support", + "//google_apis", + "//services/network:test_support", + "//testing/gmock", + "//testing/gtest", + ] + + if (!is_chromeos) { + sources += [ "primary_account_mutator_unittest.cc" ] + } +} + +source_set("test_support") { + testonly = true + + sources = [ + "identity_test_environment.cc", + "identity_test_environment.h", + "identity_test_utils.cc", + "identity_test_utils.h", + "test_identity_manager_observer.cc", + "test_identity_manager_observer.h", + ] + + public_deps = [ + "//base", + "//components/signin/core/browser:shared", + "//components/signin/public/identity_manager", + "//google_apis", + ] + + deps = [ + "//components/image_fetcher/core:test_support", + "//components/signin/core/browser", + "//components/signin/core/browser:internals", + "//components/signin/core/browser:internals_test_support", + "//components/signin/internal/identity_manager", + "//components/sync_preferences:test_support", + "//testing/gtest", + ] + + if (is_ios) { + deps += [ "//components/signin/ios/browser" ] + } +}
diff --git a/services/identity/public/cpp/README.md b/components/signin/public/identity_manager/README.md similarity index 96% rename from services/identity/public/cpp/README.md rename to components/signin/public/identity_manager/README.md index c08d24e..27dfe2e 100644 --- a/services/identity/public/cpp/README.md +++ b/components/signin/public/identity_manager/README.md
@@ -1,5 +1,5 @@ IdentityManager is the next-generation C++ API for interacting with Google -identity. It is backed by //components/signin. +identity. Documentation on the mapping between usage of legacy signin classes (notably PrimaryAccountManager and ProfileOAuth2TokenService) and usage
diff --git a/services/identity/public/cpp/access_token_fetcher.cc b/components/signin/public/identity_manager/access_token_fetcher.cc similarity index 98% rename from services/identity/public/cpp/access_token_fetcher.cc rename to components/signin/public/identity_manager/access_token_fetcher.cc index 9adbbcca1..2a2a308 100644 --- a/services/identity/public/cpp/access_token_fetcher.cc +++ b/components/signin/public/identity_manager/access_token_fetcher.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 "services/identity/public/cpp/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" #include <utility>
diff --git a/services/identity/public/cpp/access_token_fetcher.h b/components/signin/public/identity_manager/access_token_fetcher.h similarity index 94% rename from services/identity/public/cpp/access_token_fetcher.h rename to components/signin/public/identity_manager/access_token_fetcher.h index 23c5bfb..c895723 100644 --- a/services/identity/public/cpp/access_token_fetcher.h +++ b/components/signin/public/identity_manager/access_token_fetcher.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 SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_FETCHER_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_FETCHER_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCESS_TOKEN_FETCHER_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCESS_TOKEN_FETCHER_H_ #include <memory> #include <string> @@ -11,10 +11,10 @@ #include "base/callback.h" #include "base/macros.h" #include "base/scoped_observer.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/oauth2_access_token_manager.h" #include "google_apis/gaia/oauth2_token_service_observer.h" -#include "services/identity/public/cpp/access_token_info.h" #include "services/identity/public/cpp/scope_set.h" namespace network { @@ -146,4 +146,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_FETCHER_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCESS_TOKEN_FETCHER_H_
diff --git a/services/identity/public/cpp/access_token_fetcher_unittest.cc b/components/signin/public/identity_manager/access_token_fetcher_unittest.cc similarity index 99% rename from services/identity/public/cpp/access_token_fetcher_unittest.cc rename to components/signin/public/identity_manager/access_token_fetcher_unittest.cc index af9f08d..a8a0ad0 100644 --- a/services/identity/public/cpp/access_token_fetcher_unittest.cc +++ b/components/signin/public/identity_manager/access_token_fetcher_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 "services/identity/public/cpp/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" #include <memory> #include <utility>
diff --git a/services/identity/public/cpp/access_token_info.cc b/components/signin/public/identity_manager/access_token_info.cc similarity index 85% rename from services/identity/public/cpp/access_token_info.cc rename to components/signin/public/identity_manager/access_token_info.cc index f29bebd18..b4c7acfa 100644 --- a/services/identity/public/cpp/access_token_info.cc +++ b/components/signin/public/identity_manager/access_token_info.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 "services/identity/public/cpp/access_token_info.h" +#include "components/signin/public/identity_manager/access_token_info.h" namespace identity {
diff --git a/services/identity/public/cpp/access_token_info.h b/components/signin/public/identity_manager/access_token_info.h similarity index 84% rename from services/identity/public/cpp/access_token_info.h rename to components/signin/public/identity_manager/access_token_info.h index 4d12757..5be2a07e 100644 --- a/services/identity/public/cpp/access_token_info.h +++ b/components/signin/public/identity_manager/access_token_info.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 SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_INFO_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_INFO_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCESS_TOKEN_INFO_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCESS_TOKEN_INFO_H_ #include <string> @@ -39,4 +39,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_ACCESS_TOKEN_INFO_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCESS_TOKEN_INFO_H_
diff --git a/services/identity/public/cpp/accounts_cookie_mutator.h b/components/signin/public/identity_manager/accounts_cookie_mutator.h similarity index 92% rename from services/identity/public/cpp/accounts_cookie_mutator.h rename to components/signin/public/identity_manager/accounts_cookie_mutator.h index 4a68144..65b9e88 100644 --- a/services/identity/public/cpp/accounts_cookie_mutator.h +++ b/components/signin/public/identity_manager/accounts_cookie_mutator.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 SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_COOKIE_MUTATOR_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_COOKIE_MUTATOR_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_H_ #include <string> #include <vector> @@ -73,4 +73,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_COOKIE_MUTATOR_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_H_
diff --git a/services/identity/public/cpp/accounts_cookie_mutator_unittest.cc b/components/signin/public/identity_manager/accounts_cookie_mutator_unittest.cc similarity index 97% rename from services/identity/public/cpp/accounts_cookie_mutator_unittest.cc rename to components/signin/public/identity_manager/accounts_cookie_mutator_unittest.cc index 06c5b19..6b9f7859 100644 --- a/services/identity/public/cpp/accounts_cookie_mutator_unittest.cc +++ b/components/signin/public/identity_manager/accounts_cookie_mutator_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 "services/identity/public/cpp/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" #include <utility> #include <vector> @@ -15,17 +15,16 @@ #include "components/signin/core/browser/list_accounts_test_utils.h" #include "components/signin/core/browser/set_accounts_in_cookie_result.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "google_apis/gaia/gaia_auth_fetcher.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/test_identity_manager_observer.h" #include "services/network/test/test_url_loader_factory.h" -#include "services/network/test/test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace {
diff --git a/services/identity/public/cpp/accounts_in_cookie_jar_info.cc b/components/signin/public/identity_manager/accounts_in_cookie_jar_info.cc similarity index 91% rename from services/identity/public/cpp/accounts_in_cookie_jar_info.cc rename to components/signin/public/identity_manager/accounts_in_cookie_jar_info.cc index df4a6e6a0..993b40d 100644 --- a/services/identity/public/cpp/accounts_in_cookie_jar_info.cc +++ b/components/signin/public/identity_manager/accounts_in_cookie_jar_info.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 "services/identity/public/cpp/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" namespace identity {
diff --git a/services/identity/public/cpp/accounts_in_cookie_jar_info.h b/components/signin/public/identity_manager/accounts_in_cookie_jar_info.h similarity index 81% rename from services/identity/public/cpp/accounts_in_cookie_jar_info.h rename to components/signin/public/identity_manager/accounts_in_cookie_jar_info.h index 7350053..0057278 100644 --- a/services/identity/public/cpp/accounts_in_cookie_jar_info.h +++ b/components/signin/public/identity_manager/accounts_in_cookie_jar_info.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 SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_IN_COOKIE_JAR_INFO_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_IN_COOKIE_JAR_INFO_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_IN_COOKIE_JAR_INFO_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_IN_COOKIE_JAR_INFO_H_ #include <vector> @@ -34,4 +34,4 @@ } // namespace identity -#endif // _USR_LOCAL_GOOGLE_WORK_CHROMIUM_SRC_SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_IN_COOKIE_JAR_INFO_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_IN_COOKIE_JAR_INFO_H_
diff --git a/services/identity/public/cpp/accounts_mutator.h b/components/signin/public/identity_manager/accounts_mutator.h similarity index 92% rename from services/identity/public/cpp/accounts_mutator.h rename to components/signin/public/identity_manager/accounts_mutator.h index cc4d26f8..851f3e1 100644 --- a/services/identity/public/cpp/accounts_mutator.h +++ b/components/signin/public/identity_manager/accounts_mutator.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 SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_MUTATOR_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_MUTATOR_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_MUTATOR_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_MUTATOR_H_ #include <string> @@ -75,4 +75,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_ACCOUNTS_MUTATOR_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNTS_MUTATOR_H_
diff --git a/services/identity/public/cpp/accounts_mutator_unittest.cc b/components/signin/public/identity_manager/accounts_mutator_unittest.cc similarity index 98% rename from services/identity/public/cpp/accounts_mutator_unittest.cc rename to components/signin/public/identity_manager/accounts_mutator_unittest.cc index 44ea178..b8bb4c59 100644 --- a/services/identity/public/cpp/accounts_mutator_unittest.cc +++ b/components/signin/public/identity_manager/accounts_mutator_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 "services/identity/public/cpp/accounts_mutator_impl.h" +#include "components/signin/internal/identity_manager/accounts_mutator_impl.h" #include "base/bind.h" #include "base/optional.h" @@ -10,12 +10,11 @@ #include "base/test/scoped_task_environment.h" #include "components/signin/core/browser/device_id_helper.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "services/identity/public/cpp/accounts_mutator_impl.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/test_identity_manager_observer.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/services/identity/public/cpp/diagnostics_provider.h b/components/signin/public/identity_manager/diagnostics_provider.h similarity index 83% rename from services/identity/public/cpp/diagnostics_provider.h rename to components/signin/public/identity_manager/diagnostics_provider.h index 487b422..fc9634bf 100644 --- a/services/identity/public/cpp/diagnostics_provider.h +++ b/components/signin/public/identity_manager/diagnostics_provider.h
@@ -2,10 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_DIAGNOSTICS_PROVIDER_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_DIAGNOSTICS_PROVIDER_H_ - -#include <string> +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_DIAGNOSTICS_PROVIDER_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_DIAGNOSTICS_PROVIDER_H_ #include "base/macros.h" #include "google_apis/gaia/oauth2_token_service_delegate.h" @@ -37,4 +35,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_DIAGNOSTICS_PROVIDER_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_DIAGNOSTICS_PROVIDER_H_
diff --git a/services/identity/public/cpp/diagnostics_provider_unittest.cc b/components/signin/public/identity_manager/diagnostics_provider_unittest.cc similarity index 89% rename from services/identity/public/cpp/diagnostics_provider_unittest.cc rename to components/signin/public/identity_manager/diagnostics_provider_unittest.cc index b616c3c..5f38109 100644 --- a/services/identity/public/cpp/diagnostics_provider_unittest.cc +++ b/components/signin/public/identity_manager/diagnostics_provider_unittest.cc
@@ -2,11 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/diagnostics_provider_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" +#include "base/bind_helpers.h" #include "base/macros.h" #include "base/test/scoped_task_environment.h" -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" const char kAccountId[] = "user@gmail.com"; @@ -74,4 +76,4 @@ identity_test_env()->SimulateMergeSessionFailure( GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED)); EXPECT_GT(diagnostics_provider()->GetDelayBeforeMakingCookieRequests(), zero); -} \ No newline at end of file +}
diff --git a/services/identity/public/cpp/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc similarity index 97% rename from services/identity/public/cpp/identity_manager.cc rename to components/signin/public/identity_manager/identity_manager.cc index 82b40ad..0a484d3 100644 --- a/services/identity/public/cpp/identity_manager.cc +++ b/components/signin/public/identity_manager/identity_manager.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 "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include <string> @@ -14,11 +14,11 @@ #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/signin/core/browser/ubertoken_fetcher_impl.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/diagnostics_provider.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if defined(OS_ANDROID)
diff --git a/services/identity/public/cpp/identity_manager.h b/components/signin/public/identity_manager/identity_manager.h similarity index 98% rename from services/identity/public/cpp/identity_manager.h rename to components/signin/public/identity_manager/identity_manager.h index 22be751..a8e63c5c 100644 --- a/services/identity/public/cpp/identity_manager.h +++ b/components/signin/public/identity_manager/identity_manager.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 SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_MANAGER_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_MANAGER_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_MANAGER_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_MANAGER_H_ #include <memory> #include <string> @@ -12,12 +12,11 @@ #include "base/observer_list.h" #include "build/build_config.h" #include "components/signin/core/browser/account_info.h" -#include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/ubertoken_fetcher.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" #include "google_apis/gaia/gaia_auth_fetcher.h" #include "google_apis/gaia/oauth2_token_service_observer.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" #include "services/identity/public/cpp/scope_set.h" #if defined(OS_ANDROID) @@ -654,4 +653,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_MANAGER_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_MANAGER_H_
diff --git a/services/identity/public/cpp/identity_manager_unittest.cc b/components/signin/public/identity_manager/identity_manager_unittest.cc similarity index 98% rename from services/identity/public/cpp/identity_manager_unittest.cc rename to components/signin/public/identity_manager/identity_manager_unittest.cc index b32ad48..f15abb0 100644 --- a/services/identity/public/cpp/identity_manager_unittest.cc +++ b/components/signin/public/identity_manager/identity_manager_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 "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include <memory> #include <set> @@ -30,17 +30,17 @@ #include "components/signin/core/browser/set_accounts_in_cookie_result.h" #include "components/signin/core/browser/signin_switches.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" +#include "components/signin/public/identity_manager/accounts_cookie_mutator.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "google_apis/gaia/core_account_id.h" #include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/oauth2_token_service_delegate.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider_impl.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" -#include "services/identity/public/cpp/test_identity_manager_observer.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_cookie_manager.h" #include "services/network/test/test_url_loader_factory.h" @@ -266,9 +266,7 @@ PrimaryAccountManagerSetup::kWithAuthenticatedAccout); } - ~IdentityManagerTest() override { - signin_client_.Shutdown(); - } + ~IdentityManagerTest() override { signin_client_.Shutdown(); } void SetUp() override { primary_account_id_ =
diff --git a/services/identity/public/cpp/identity_test_environment.cc b/components/signin/public/identity_manager/identity_test_environment.cc similarity index 95% rename from services/identity/public/cpp/identity_test_environment.cc rename to components/signin/public/identity_manager/identity_test_environment.cc index af698bce..0c19ca0 100644 --- a/services/identity/public/cpp/identity_test_environment.cc +++ b/components/signin/public/identity_manager/identity_test_environment.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 "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include <memory> #include <string> @@ -22,16 +22,15 @@ #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/primary_account_policy_manager_impl.h" #include "components/signin/core/browser/test_signin_client.h" +#include "components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" +#include "components/signin/internal/identity_manager/primary_account_mutator_impl.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "google_apis/gaia/oauth2_access_token_consumer.h" -#include "services/identity/public/cpp/accounts_cookie_mutator.h" -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider_impl.h" -#include "services/identity/public/cpp/identity_test_utils.h" -#include "services/identity/public/cpp/primary_account_mutator.h" -#include "services/identity/public/cpp/primary_account_mutator_impl.h" -#include "services/identity/public/cpp/test_identity_manager_observer.h" #if defined(OS_IOS) #include "components/signin/ios/browser/device_accounts_provider.h" @@ -39,11 +38,7 @@ #endif #if !defined(OS_ANDROID) && !defined(OS_IOS) -#include "services/identity/public/cpp/accounts_mutator_impl.h" -#endif - -#if defined(OS_ANDROID) -#include "components/signin/core/browser/child_account_info_fetcher_android.h" +#include "components/signin/internal/identity_manager/accounts_mutator_impl.h" #endif namespace identity { @@ -79,7 +74,6 @@ std::unique_ptr<TestSigninClient> owned_signin_client_; TestSigninClient* raw_signin_client_ = nullptr; - DISALLOW_COPY_AND_ASSIGN(IdentityManagerDependenciesOwner); };
diff --git a/services/identity/public/cpp/identity_test_environment.h b/components/signin/public/identity_manager/identity_test_environment.h similarity index 96% rename from services/identity/public/cpp/identity_test_environment.h rename to components/signin/public/identity_manager/identity_test_environment.h index 52fbf61..2527f6a 100644 --- a/services/identity/public/cpp/identity_test_environment.h +++ b/components/signin/public/identity_manager/identity_test_environment.h
@@ -2,21 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_TEST_ENVIRONMENT_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_TEST_ENVIRONMENT_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_TEST_ENVIRONMENT_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_TEST_ENVIRONMENT_H_ +#include <memory> + +#include "base/callback.h" #include "base/optional.h" #include "build/build_config.h" #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/signin_client.h" -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" -#include "services/identity/public/cpp/diagnostics_provider_impl.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" -class AccountTrackerService; class FakeProfileOAuth2TokenService; -class Profile; class IdentityManagerWrapper; class IdentityTestEnvironmentChromeBrowserStateAdaptor; class IdentityTestEnvironmentProfileAdaptor; @@ -392,4 +391,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_TEST_ENVIRONMENT_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_TEST_ENVIRONMENT_H_
diff --git a/services/identity/public/cpp/identity_test_environment_unittest.cc b/components/signin/public/identity_manager/identity_test_environment_unittest.cc similarity index 95% rename from services/identity/public/cpp/identity_test_environment_unittest.cc rename to components/signin/public/identity_manager/identity_test_environment_unittest.cc index df8f1d09..fdcdbe5 100644 --- a/services/identity/public/cpp/identity_test_environment_unittest.cc +++ b/components/signin/public/identity_manager/identity_test_environment_unittest.cc
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" + #include "base/bind.h" #include "base/test/scoped_task_environment.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/services/identity/public/cpp/identity_test_utils.cc b/components/signin/public/identity_manager/identity_test_utils.cc similarity index 97% rename from services/identity/public/cpp/identity_test_utils.cc rename to components/signin/public/identity_manager/identity_test_utils.cc index 988326bc..2fbcd30 100644 --- a/services/identity/public/cpp/identity_test_utils.cc +++ b/components/signin/public/identity_manager/identity_test_utils.cc
@@ -2,22 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/identity_test_utils.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" -#include <utility> #include <vector> #include "base/run_loop.h" -#include "base/strings/string_split.h" +#include "build/build_config.h" #include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/list_accounts_test_utils.h" #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "google_apis/gaia/gaia_auth_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" -#include "services/identity/public/cpp/test_identity_manager_observer.h" #if defined(OS_ANDROID) #include "components/signin/core/browser/oauth2_token_service_delegate_android.h"
diff --git a/services/identity/public/cpp/identity_test_utils.h b/components/signin/public/identity_manager/identity_test_utils.h similarity index 96% rename from services/identity/public/cpp/identity_test_utils.h rename to components/signin/public/identity_manager/identity_test_utils.h index 891b94f9..4f82a8e 100644 --- a/services/identity/public/cpp/identity_test_utils.h +++ b/components/signin/public/identity_manager/identity_test_utils.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 SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_TEST_UTILS_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_TEST_UTILS_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_TEST_UTILS_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_TEST_UTILS_H_ #include <string> @@ -172,4 +172,4 @@ const std::string& picture_url); } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_IDENTITY_TEST_UTILS_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_IDENTITY_TEST_UTILS_H_
diff --git a/services/identity/public/objc/BUILD.gn b/components/signin/public/identity_manager/objc/BUILD.gn similarity index 87% rename from services/identity/public/objc/BUILD.gn rename to components/signin/public/identity_manager/objc/BUILD.gn index 0e9cf2d..ba323fe7 100644 --- a/services/identity/public/objc/BUILD.gn +++ b/components/signin/public/identity_manager/objc/BUILD.gn
@@ -10,6 +10,6 @@ ] public_deps = [ - "//services/identity/public/cpp", + "//components/signin/public/identity_manager", ] }
diff --git a/services/identity/public/objc/identity_manager_observer_bridge.h b/components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h similarity index 85% rename from services/identity/public/objc/identity_manager_observer_bridge.h rename to components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h index 57d5bee..620ff9b 100644 --- a/services/identity/public/objc/identity_manager_observer_bridge.h +++ b/components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_OBJC_IDENTITY_MANAGER_OBSERVER_BRIDGE_H_ -#define SERVICES_IDENTITY_PUBLIC_OBJC_IDENTITY_MANAGER_OBSERVER_BRIDGE_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_OBJC_IDENTITY_MANAGER_OBSERVER_BRIDGE_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_OBJC_IDENTITY_MANAGER_OBSERVER_BRIDGE_H_ #import <Foundation/Foundation.h> #include <vector> -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" // Implement this protocol and pass your implementation into an // IdentityManagerObserverBridge object to receive IdentityManager observer // callbacks in Objective-C. -@protocol IdentityManagerObserverBridgeDelegate<NSObject> +@protocol IdentityManagerObserverBridgeDelegate <NSObject> @optional @@ -72,4 +72,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_OBJC_IDENTITY_MANAGER_OBSERVER_BRIDGE_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_OBJC_IDENTITY_MANAGER_OBSERVER_BRIDGE_H_
diff --git a/services/identity/public/objc/identity_manager_observer_bridge.mm b/components/signin/public/identity_manager/objc/identity_manager_observer_bridge.mm similarity index 96% rename from services/identity/public/objc/identity_manager_observer_bridge.mm rename to components/signin/public/identity_manager/objc/identity_manager_observer_bridge.mm index 2becda5..0496cfae 100644 --- a/services/identity/public/objc/identity_manager_observer_bridge.mm +++ b/components/signin/public/identity_manager/objc/identity_manager_observer_bridge.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "services/identity/public/objc/identity_manager_observer_bridge.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/services/identity/public/cpp/primary_account_access_token_fetcher.cc b/components/signin/public/identity_manager/primary_account_access_token_fetcher.cc similarity index 96% rename from services/identity/public/cpp/primary_account_access_token_fetcher.cc rename to components/signin/public/identity_manager/primary_account_access_token_fetcher.cc index ff7b0ea..8a87a92 100644 --- a/services/identity/public/cpp/primary_account_access_token_fetcher.cc +++ b/components/signin/public/identity_manager/primary_account_access_token_fetcher.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include <utility> #include "base/bind.h" #include "base/logging.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace identity {
diff --git a/services/identity/public/cpp/primary_account_access_token_fetcher.h b/components/signin/public/identity_manager/primary_account_access_token_fetcher.h similarity index 89% rename from services/identity/public/cpp/primary_account_access_token_fetcher.h rename to components/signin/public/identity_manager/primary_account_access_token_fetcher.h index 0c56b36..e8416046 100644 --- a/services/identity/public/cpp/primary_account_access_token_fetcher.h +++ b/components/signin/public/identity_manager/primary_account_access_token_fetcher.h
@@ -2,19 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_ACCESS_TOKEN_FETCHER_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_ACCESS_TOKEN_FETCHER_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_ACCESS_TOKEN_FETCHER_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_ACCESS_TOKEN_FETCHER_H_ #include <memory> #include <string> -#include "base/callback.h" #include "base/macros.h" #include "base/scoped_observer.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/oauth2_token_service.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "services/identity/public/cpp/scope_set.h" namespace identity { @@ -101,4 +101,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_ACCESS_TOKEN_FETCHER_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_ACCESS_TOKEN_FETCHER_H_
diff --git a/services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc b/components/signin/public/identity_manager/primary_account_access_token_fetcher_unittest.cc similarity index 97% rename from services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc rename to components/signin/public/identity_manager/primary_account_access_token_fetcher_unittest.cc index ab3e9e5..55fcd1cf 100644 --- a/services/identity/public/cpp/primary_account_access_token_fetcher_unittest.cc +++ b/components/signin/public/identity_manager/primary_account_access_token_fetcher_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 "services/identity/public/cpp/primary_account_access_token_fetcher.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include <memory> #include <utility> @@ -11,8 +11,8 @@ #include "base/run_loop.h" #include "base/test/mock_callback.h" #include "base/test/scoped_task_environment.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock_mutant.h" #include "testing/gtest/include/gtest/gtest.h" @@ -52,8 +52,7 @@ base::Time::Now() + base::TimeDelta::FromHours(1), "id_token") {} - ~PrimaryAccountAccessTokenFetcherTest() override { - } + ~PrimaryAccountAccessTokenFetcherTest() override {} std::unique_ptr<PrimaryAccountAccessTokenFetcher> CreateFetcher( AccessTokenFetcher::TokenCallback callback,
diff --git a/services/identity/public/cpp/primary_account_mutator.h b/components/signin/public/identity_manager/primary_account_mutator.h similarity index 92% rename from services/identity/public/cpp/primary_account_mutator.h rename to components/signin/public/identity_manager/primary_account_mutator.h index b474abf1..34a0e3a 100644 --- a/services/identity/public/cpp/primary_account_mutator.h +++ b/components/signin/public/identity_manager/primary_account_mutator.h
@@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_MUTATOR_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_MUTATOR_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_MUTATOR_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_MUTATOR_H_ #include <string> -#include "base/callback_forward.h" #include "components/signin/core/browser/signin_metrics.h" #include "google_apis/gaia/core_account_id.h" @@ -75,4 +74,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_PRIMARY_ACCOUNT_MUTATOR_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_MUTATOR_H_
diff --git a/services/identity/public/cpp/primary_account_mutator_unittest.cc b/components/signin/public/identity_manager/primary_account_mutator_unittest.cc similarity index 98% rename from services/identity/public/cpp/primary_account_mutator_unittest.cc rename to components/signin/public/identity_manager/primary_account_mutator_unittest.cc index 8781dd0..1418cc3 100644 --- a/services/identity/public/cpp/primary_account_mutator_unittest.cc +++ b/components/signin/public/identity_manager/primary_account_mutator_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 "services/identity/public/cpp/primary_account_mutator.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "base/bind.h" #include "base/containers/flat_set.h" @@ -11,9 +11,9 @@ #include "base/test/scoped_task_environment.h" #include "components/signin/core/browser/signin_metrics.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/identity_test_utils.h" #include "testing/platform_test.h" namespace {
diff --git a/services/identity/public/cpp/test_identity_manager_observer.cc b/components/signin/public/identity_manager/test_identity_manager_observer.cc similarity index 98% rename from services/identity/public/cpp/test_identity_manager_observer.cc rename to components/signin/public/identity_manager/test_identity_manager_observer.cc index b43aa18..e92f94f 100644 --- a/services/identity/public/cpp/test_identity_manager_observer.cc +++ b/components/signin/public/identity_manager/test_identity_manager_observer.cc
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/identity/public/cpp/test_identity_manager_observer.h" +#include "components/signin/public/identity_manager/test_identity_manager_observer.h" + #include "testing/gtest/include/gtest/gtest.h" #include <utility>
diff --git a/services/identity/public/cpp/test_identity_manager_observer.h b/components/signin/public/identity_manager/test_identity_manager_observer.h similarity index 91% rename from services/identity/public/cpp/test_identity_manager_observer.h rename to components/signin/public/identity_manager/test_identity_manager_observer.h index b050dae..14e43978 100644 --- a/services/identity/public/cpp/test_identity_manager_observer.h +++ b/components/signin/public/identity_manager/test_identity_manager_observer.h
@@ -2,17 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_IDENTITY_PUBLIC_CPP_TEST_IDENTITY_MANAGER_OBSERVER_H_ -#define SERVICES_IDENTITY_PUBLIC_CPP_TEST_IDENTITY_MANAGER_OBSERVER_H_ +#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_TEST_IDENTITY_MANAGER_OBSERVER_H_ +#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_TEST_IDENTITY_MANAGER_OBSERVER_H_ -#include <string> #include <vector> #include "base/callback.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" -#include "services/identity/public/cpp/identity_manager.h" namespace identity { @@ -124,4 +123,4 @@ } // namespace identity -#endif // SERVICES_IDENTITY_PUBLIC_CPP_TEST_IDENTITY_MANAGER_OBSERVER_H_ +#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_TEST_IDENTITY_MANAGER_OBSERVER_H_
diff --git a/components/suggestions/BUILD.gn b/components/suggestions/BUILD.gn index f5b9a54..fd86688c 100644 --- a/components/suggestions/BUILD.gn +++ b/components/suggestions/BUILD.gn
@@ -30,11 +30,11 @@ "//components/google/core/browser", "//components/keyed_service/core", "//components/pref_registry", + "//components/signin/public/identity_manager", "//components/sync", "//components/variations", "//components/variations/net", "//google_apis", - "//services/identity/public/cpp", ] } @@ -48,11 +48,10 @@ deps = [ ":suggestions", "//base/test:test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support", "//components/sync_preferences:test_support", "//net:test_support", - "//services/identity/public/cpp", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//testing/gmock", "//testing/gtest",
diff --git a/components/suggestions/DEPS b/components/suggestions/DEPS index f8b90c5..d04256d 100644 --- a/components/suggestions/DEPS +++ b/components/suggestions/DEPS
@@ -3,12 +3,12 @@ "+components/keyed_service/core", "+components/pref_registry", "+components/prefs", + "+components/signin/public", "+components/sync/driver", "+components/sync_preferences", "+components/variations", "+google_apis", "+net", - "+services/identity/public/cpp", "+services/network/public", "+services/network/test", "+ui",
diff --git a/components/suggestions/suggestions_service_impl.cc b/components/suggestions/suggestions_service_impl.cc index 36b099ba1..ca36783 100644 --- a/components/suggestions/suggestions_service_impl.cc +++ b/components/suggestions/suggestions_service_impl.cc
@@ -20,6 +20,8 @@ #include "build/build_config.h" #include "components/google/core/common/google_util.h" #include "components/pref_registry/pref_registry_syncable.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/suggestions/blacklist_store.h" #include "components/suggestions/suggestions_store.h" #include "components/sync/driver/sync_service.h" @@ -35,8 +37,6 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/url_fetcher.h" #include "net/url_request/url_request_status.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/resource_response.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/components/suggestions/suggestions_service_impl.h b/components/suggestions/suggestions_service_impl.h index 7c63e32c..0febacc9 100644 --- a/components/suggestions/suggestions_service_impl.h +++ b/components/suggestions/suggestions_service_impl.h
@@ -21,6 +21,7 @@ #include "base/time/tick_clock.h" #include "base/time/time.h" #include "base/timer/timer.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "components/suggestions/proto/suggestions.pb.h" #include "components/suggestions/suggestions_service.h" #include "components/sync/driver/sync_service_observer.h" @@ -28,7 +29,6 @@ #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/backoff_entry.h" #include "net/url_request/url_fetcher_delegate.h" -#include "services/identity/public/cpp/access_token_info.h" #include "url/gurl.h" namespace identity {
diff --git a/components/suggestions/suggestions_service_impl_unittest.cc b/components/suggestions/suggestions_service_impl_unittest.cc index 8e66e00f..8b2907c 100644 --- a/components/suggestions/suggestions_service_impl_unittest.cc +++ b/components/suggestions/suggestions_service_impl_unittest.cc
@@ -15,6 +15,7 @@ #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/suggestions/blacklist_store.h" #include "components/suggestions/proto/suggestions.pb.h" #include "components/suggestions/suggestions_store.h" @@ -26,8 +27,6 @@ #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_status.h" #include "net/url_request/url_request_test_util.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "services/network/test/test_utils.h"
diff --git a/components/sync/BUILD.gn b/components/sync/BUILD.gn index 306c6a7b..54591fc 100644 --- a/components/sync/BUILD.gn +++ b/components/sync/BUILD.gn
@@ -672,6 +672,7 @@ "//components/os_crypt:test_support", "//components/prefs:test_support", "//components/signin/core/browser:internals_test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync/base:test_support", "//components/sync/driver:test_support", "//components/sync/js:test_support", @@ -684,7 +685,6 @@ "//google_apis:test_support", "//net", "//net:test_support", - "//services/identity/public/cpp:test_support", "//services/network:test_support", "//services/network/public/cpp", "//sql",
diff --git a/components/sync/base/passphrase_enums.cc b/components/sync/base/passphrase_enums.cc index 62c596f..793087d 100644 --- a/components/sync/base/passphrase_enums.cc +++ b/components/sync/base/passphrase_enums.cc
@@ -13,9 +13,16 @@ type == PassphraseType::FROZEN_IMPLICIT_PASSPHRASE; } -PassphraseType ProtoPassphraseTypeToEnum( - sync_pb::NigoriSpecifics::PassphraseType type) { - switch (type) { +sync_pb::NigoriSpecifics::PassphraseType ProtoPassphraseInt32ToProtoEnum( + ::google::protobuf::int32 type) { + return sync_pb::NigoriSpecifics::PassphraseType_IsValid(type) + ? static_cast<sync_pb::NigoriSpecifics::PassphraseType>(type) + : sync_pb::NigoriSpecifics::UNKNOWN; +} + +base::Optional<PassphraseType> ProtoPassphraseInt32ToEnum( + ::google::protobuf::int32 type) { + switch (ProtoPassphraseInt32ToProtoEnum(type)) { case sync_pb::NigoriSpecifics::IMPLICIT_PASSPHRASE: return PassphraseType::IMPLICIT_PASSPHRASE; case sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE: @@ -25,13 +32,12 @@ case sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE: return PassphraseType::FROZEN_IMPLICIT_PASSPHRASE; case sync_pb::NigoriSpecifics::UNKNOWN: - // It is expected that this value will never be encountered, as the - // protocol does not consider it valid. + // This must be an unknown value coming from future versions or a field + // actually being populated with UNKNOWN (which is a protocol violation). break; } - NOTREACHED(); - return PassphraseType::IMPLICIT_PASSPHRASE; + return base::nullopt; } sync_pb::NigoriSpecifics::PassphraseType EnumPassphraseTypeToProto(
diff --git a/components/sync/base/passphrase_enums.h b/components/sync/base/passphrase_enums.h index 0bf5cf1..cfd8ca1 100644 --- a/components/sync/base/passphrase_enums.h +++ b/components/sync/base/passphrase_enums.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_SYNC_BASE_PASSPHRASE_ENUMS_H_ #define COMPONENTS_SYNC_BASE_PASSPHRASE_ENUMS_H_ +#include "base/optional.h" #include "components/sync/protocol/nigori_specifics.pb.h" namespace syncer { @@ -22,8 +23,22 @@ }; bool IsExplicitPassphrase(PassphraseType type); -PassphraseType ProtoPassphraseTypeToEnum( - sync_pb::NigoriSpecifics::PassphraseType type); + +// Function meant to convert |NigoriSpecifics.passphrase_type| into enum. +// All unknown values are returned as UNKNOWN, which mainly represents future +// values of the enum that are not currently supported. Note however that if the +// field is not populated, it defaults to IMPLICIT_PASSPHRASE for backwards +// compatibility reasons. +sync_pb::NigoriSpecifics::PassphraseType ProtoPassphraseInt32ToProtoEnum( + ::google::protobuf::int32 type); + +// Returns base::nullopt if |type| represents an unknown value, likely coming +// from a future version of the browser. Note however that if the field is not +// populated, it defaults to IMPLICIT_PASSPHRASE for backwards compatibility +// reasons. +base::Optional<PassphraseType> ProtoPassphraseInt32ToEnum( + ::google::protobuf::int32 type); + sync_pb::NigoriSpecifics::PassphraseType EnumPassphraseTypeToProto( PassphraseType type);
diff --git a/components/sync/driver/BUILD.gn b/components/sync/driver/BUILD.gn index ca04b2c..6502941 100644 --- a/components/sync/driver/BUILD.gn +++ b/components/sync/driver/BUILD.gn
@@ -112,9 +112,9 @@ "//components/keyed_service/core", "//components/prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/version_info", "//components/version_info:generate_version_info", - "//services/identity/public/cpp", "//services/network/public/cpp", "//ui/base", ] @@ -178,6 +178,7 @@ "//components/invalidation/impl:test_support", "//components/pref_registry", "//components/signin/core/browser:shared", + "//components/signin/public/identity_manager:test_support", "//components/sync", "//components/sync:test_support_engine", "//components/sync:test_support_model", @@ -186,6 +187,6 @@ "//components/version_info", "//components/version_info:generate_version_info", "//google_apis", - "//services/identity/public/cpp:test_support", + "//services/network:test_support", ] }
diff --git a/components/sync/driver/DEPS b/components/sync/driver/DEPS index 8c58bd2..2c28985 100644 --- a/components/sync/driver/DEPS +++ b/components/sync/driver/DEPS
@@ -22,6 +22,7 @@ "-components/signin/core/browser/profile_oauth2_token_service.h", "-components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h", "-components/signin/core/browser/ubertoken_fetcher_impl.h", + "+components/signin/public", "+components/sync/base", "+components/sync/engine", @@ -37,7 +38,6 @@ "+google/cacheinvalidation", "+net", "+policy", - "+services/identity/public/cpp", "+services/network/public/cpp", "+services/network/test", "+ui/base",
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc index ead807e7..c46aaa9 100644 --- a/components/sync/driver/profile_sync_service.cc +++ b/components/sync/driver/profile_sync_service.cc
@@ -17,6 +17,8 @@ #include "components/invalidation/public/invalidation_service.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/base/bind_to_task_runner.h" #include "components/sync/base/report_unrecoverable_error.h" #include "components/sync/base/stop_source.h" @@ -38,8 +40,6 @@ #include "components/sync/model/sync_error.h" #include "components/sync/syncable/user_share.h" #include "components/version_info/version_info_values.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace syncer {
diff --git a/components/sync/driver/profile_sync_service.h b/components/sync/driver/profile_sync_service.h index 21a5decbc..f2479120 100644 --- a/components/sync/driver/profile_sync_service.h +++ b/components/sync/driver/profile_sync_service.h
@@ -21,6 +21,7 @@ #include "base/threading/thread.h" #include "base/time/time.h" #include "components/invalidation/public/identity_provider.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/base/model_type.h" #include "components/sync/base/sync_prefs.h" #include "components/sync/base/unrecoverable_error_handler.h" @@ -44,7 +45,6 @@ #include "components/version_info/channel.h" #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_manager.h" #include "url/gurl.h" namespace network {
diff --git a/components/sync/driver/profile_sync_service_bundle.h b/components/sync/driver/profile_sync_service_bundle.h index 780ce1b..a4fd8b1 100644 --- a/components/sync/driver/profile_sync_service_bundle.h +++ b/components/sync/driver/profile_sync_service_bundle.h
@@ -12,11 +12,11 @@ #include "base/memory/ref_counted.h" #include "components/invalidation/impl/fake_invalidation_service.h" #include "components/invalidation/impl/profile_identity_provider.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/driver/sync_api_component_factory_mock.h" #include "components/sync/driver/sync_client_mock.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" namespace syncer {
diff --git a/components/sync/driver/profile_sync_service_startup_unittest.cc b/components/sync/driver/profile_sync_service_startup_unittest.cc index 86c6928..2964141 100644 --- a/components/sync/driver/profile_sync_service_startup_unittest.cc +++ b/components/sync/driver/profile_sync_service_startup_unittest.cc
@@ -8,6 +8,7 @@ #include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/base/pref_names.h" #include "components/sync/driver/data_type_manager_mock.h" #include "components/sync/driver/fake_data_type_controller.h" @@ -17,7 +18,6 @@ #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/engine/fake_sync_engine.h" #include "components/sync/engine/mock_sync_engine.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/sync/driver/profile_sync_service_unittest.cc b/components/sync/driver/profile_sync_service_unittest.cc index 9f4ac24..be972430 100644 --- a/components/sync/driver/profile_sync_service_unittest.cc +++ b/components/sync/driver/profile_sync_service_unittest.cc
@@ -17,6 +17,8 @@ #include "base/test/scoped_task_environment.h" #include "base/values.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/base/pref_names.h" #include "components/sync/base/user_selectable_type.h" #include "components/sync/driver/configure_context.h" @@ -31,8 +33,6 @@ #include "components/sync/engine/fake_sync_engine.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/version_info/version_info_values.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/sync/driver/sync_auth_manager.cc b/components/sync/driver/sync_auth_manager.cc index 66cb8be..4f5ac31 100644 --- a/components/sync/driver/sync_auth_manager.cc +++ b/components/sync/driver/sync_auth_manager.cc
@@ -9,12 +9,12 @@ #include "base/bind.h" #include "base/metrics/histogram_macros.h" #include "base/time/time.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" #include "components/sync/base/stop_source.h" #include "components/sync/base/sync_prefs.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/engine/sync_credentials.h" #include "google_apis/gaia/gaia_constants.h" -#include "services/identity/public/cpp/access_token_fetcher.h" namespace syncer {
diff --git a/components/sync/driver/sync_auth_manager.h b/components/sync/driver/sync_auth_manager.h index 684fe15fd..afb8a3d 100644 --- a/components/sync/driver/sync_auth_manager.h +++ b/components/sync/driver/sync_auth_manager.h
@@ -15,12 +15,12 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_auth_util.h" #include "components/sync/driver/sync_token_status.h" #include "components/sync/engine/connection_status.h" #include "google_apis/gaia/google_service_auth_error.h" #include "net/base/backoff_entry.h" -#include "services/identity/public/cpp/identity_manager.h" namespace identity { class AccessTokenFetcher;
diff --git a/components/sync/driver/sync_auth_manager_unittest.cc b/components/sync/driver/sync_auth_manager_unittest.cc index 2d702d97..50b8fb4 100644 --- a/components/sync/driver/sync_auth_manager_unittest.cc +++ b/components/sync/driver/sync_auth_manager_unittest.cc
@@ -10,12 +10,12 @@ #include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" #include "build/build_config.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/engine/connection_status.h" #include "components/sync/engine/sync_credentials.h" #include "net/base/net_errors.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/sync/driver/sync_auth_util.cc b/components/sync/driver/sync_auth_util.cc index 3afb65e..4595d36 100644 --- a/components/sync/driver/sync_auth_util.cc +++ b/components/sync/driver/sync_auth_util.cc
@@ -6,8 +6,8 @@ #include <vector> +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/identity_manager.h" namespace syncer {
diff --git a/components/sync/driver/sync_session_durations_metrics_recorder.h b/components/sync/driver/sync_session_durations_metrics_recorder.h index b69ed49..ce1224f7 100644 --- a/components/sync/driver/sync_session_durations_metrics_recorder.h +++ b/components/sync/driver/sync_session_durations_metrics_recorder.h
@@ -12,8 +12,8 @@ #include "base/scoped_observer.h" #include "base/timer/elapsed_timer.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service_observer.h" -#include "services/identity/public/cpp/identity_manager.h" namespace syncer {
diff --git a/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc b/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc index abb668b..2b26126 100644 --- a/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc +++ b/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc
@@ -9,8 +9,8 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_task_environment.h" #include "base/timer/timer.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/test_sync_service.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/components/sync/engine_impl/sync_encryption_handler_impl.cc b/components/sync/engine_impl/sync_encryption_handler_impl.cc index 7835156..5d50ad39 100644 --- a/components/sync/engine_impl/sync_encryption_handler_impl.cc +++ b/components/sync/engine_impl/sync_encryption_handler_impl.cc
@@ -94,6 +94,10 @@ // 2. Frozen keybag is true // 3. If passphrase state is keystore, keystore_decryptor_token is set. bool IsNigoriMigratedToKeystore(const sync_pb::NigoriSpecifics& nigori) { + // |passphrase_type| is always populated by modern clients, but may be missing + // in coming from an ancient client, from data that was never upgraded, or + // from the uninitialized NigoriSpecifics (e.g. sync was just enabled for this + // account). if (!nigori.has_passphrase_type()) return false; if (!nigori.keybag_is_frozen()) @@ -385,6 +389,8 @@ // WriteEncryptionStateToNigori will do this for us.) ReplaceImplicitKeyDerivationMethodInNigori(&trans); break; + case ApplyNigoriUpdateResult::kUnsupportedRemoteState: + return false; case ApplyNigoriUpdateResult::kRemoteMustBeCorrected: WriteEncryptionStateToNigori(&trans, NigoriMigrationTrigger::kInit); break; @@ -824,6 +830,8 @@ weak_ptr_factory_.GetWeakPtr())); } break; + case ApplyNigoriUpdateResult::kUnsupportedRemoteState: + return false; case ApplyNigoriUpdateResult::kRemoteMustBeCorrected: base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, @@ -1063,6 +1071,17 @@ const sync_pb::NigoriSpecifics& nigori, syncable::BaseTransaction* const trans) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + const base::Optional<PassphraseType> nigori_passphrase_type_optional = + ProtoPassphraseInt32ToEnum(nigori.passphrase_type()); + if (!nigori_passphrase_type_optional) { + DVLOG(1) << "Ignoring nigori node update with unknown passphrase type."; + return ApplyNigoriUpdateResult::kUnsupportedRemoteState; + } + + const PassphraseType nigori_passphrase_type = + *nigori_passphrase_type_optional; + DVLOG(1) << "Applying nigori node update."; bool nigori_types_need_update = !UpdateEncryptedTypesFromNigori(nigori, trans); @@ -1075,8 +1094,6 @@ if (is_nigori_migrated) { keystore_migration_time_ = ProtoTimeToTime(nigori.keystore_migration_time()); - PassphraseType nigori_passphrase_type = - ProtoPassphraseTypeToEnum(nigori.passphrase_type()); // Only update the local passphrase state if it's a valid transition: // - implicit -> keystore @@ -1135,8 +1152,7 @@ // Else, since it was decryptable, it must not have been a new key. bool need_new_default_key = false; if (is_nigori_migrated) { - need_new_default_key = IsExplicitPassphrase( - ProtoPassphraseTypeToEnum(nigori.passphrase_type())); + need_new_default_key = IsExplicitPassphrase(nigori_passphrase_type); } else { need_new_default_key = nigori.keybag_is_frozen(); } @@ -1213,9 +1229,7 @@ passphrase_type_matches = nigori.keybag_is_frozen() == IsExplicitPassphrase(*passphrase_type); } else { - passphrase_type_matches = - (ProtoPassphraseTypeToEnum(nigori.passphrase_type()) == - *passphrase_type); + passphrase_type_matches = (nigori_passphrase_type == *passphrase_type); } if (!passphrase_type_matches || nigori.encrypt_everything() != encrypt_everything_ ||
diff --git a/components/sync/engine_impl/sync_encryption_handler_impl.h b/components/sync/engine_impl/sync_encryption_handler_impl.h index 551e4fb..bf14aa1 100644 --- a/components/sync/engine_impl/sync_encryption_handler_impl.h +++ b/components/sync/engine_impl/sync_encryption_handler_impl.h
@@ -187,6 +187,7 @@ // Enumeration of possible outcomes of ApplyNigoriUpdateImpl. enum class ApplyNigoriUpdateResult { kSuccess, + kUnsupportedRemoteState, kRemoteMustBeCorrected, };
diff --git a/components/sync/nigori/nigori_sync_bridge_impl.cc b/components/sync/nigori/nigori_sync_bridge_impl.cc index 1df33036..681c379d 100644 --- a/components/sync/nigori/nigori_sync_bridge_impl.cc +++ b/components/sync/nigori/nigori_sync_bridge_impl.cc
@@ -197,9 +197,10 @@ DLOG(ERROR) << "Specifics has no passphrase_type."; return false; } - switch (specifics.passphrase_type()) { + switch (ProtoPassphraseInt32ToProtoEnum(specifics.passphrase_type())) { case NigoriSpecifics::UNKNOWN: - DLOG(ERROR) << "Received UNKNOWN passphrase_type"; + DLOG(ERROR) << "Received unknown passphrase type with value: " + << specifics.passphrase_type(); return false; case NigoriSpecifics::IMPLICIT_PASSPHRASE: // TODO(crbug.com/922900): we hope that IMPLICIT_PASSPHRASE support is not @@ -421,8 +422,8 @@ observer.OnPassphraseAccepted(); } for (auto& observer : observers_) { - observer.OnPassphraseTypeChanged( - ProtoPassphraseTypeToEnum(passphrase_type_), custom_passphrase_time_); + observer.OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, + custom_passphrase_time_); } for (auto& observer : observers_) { observer.OnCryptographerStateChanged(&cryptographer_); @@ -609,18 +610,22 @@ if (!IsValidNigoriSpecifics(specifics)) { return ModelError(FROM_HERE, "NigoriSpecifics is not valid."); } + + const sync_pb::NigoriSpecifics::PassphraseType new_passphrase_type = + ProtoPassphraseInt32ToProtoEnum(specifics.passphrase_type()); + DCHECK_NE(new_passphrase_type, NigoriSpecifics::UNKNOWN); + if (!IsValidPassphraseTransition( - /*old_passphrase_type=*/passphrase_type_, - /*new_paspshrase_type=*/specifics.passphrase_type())) { + /*old_passphrase_type=*/passphrase_type_, new_passphrase_type)) { return ModelError(FROM_HERE, "Invalid passphrase type transition."); } if (!IsValidEncryptedTypesTransition(encrypt_everything_, specifics)) { return ModelError(FROM_HERE, "Invalid encrypted types transition."); } - DCHECK(specifics.has_passphrase_type()); const bool passphrase_type_changed = - UpdatePassphraseType(specifics.passphrase_type(), &passphrase_type_); + UpdatePassphraseType(new_passphrase_type, &passphrase_type_); + DCHECK_NE(passphrase_type_, NigoriSpecifics::UNKNOWN); const bool encrypted_types_changed = UpdateEncryptedTypes(specifics, &encrypt_everything_); @@ -664,7 +669,7 @@ if (passphrase_type_changed) { for (auto& observer : observers_) { observer.OnPassphraseTypeChanged( - ProtoPassphraseTypeToEnum(passphrase_type_), + *ProtoPassphraseInt32ToEnum(passphrase_type_), GetExplicitPassphraseTime()); } }
diff --git a/components/sync/nigori/nigori_sync_bridge_impl.h b/components/sync/nigori/nigori_sync_bridge_impl.h index 71e3be1..06ef8b6 100644 --- a/components/sync/nigori/nigori_sync_bridge_impl.h +++ b/components/sync/nigori/nigori_sync_bridge_impl.h
@@ -102,6 +102,9 @@ std::vector<std::string> keystore_keys_; Cryptographer cryptographer_; + // TODO(mmoskvitin): Consider adopting the C++ enum PassphraseType here and + // if so remove function ProtoPassphraseInt32ToProtoEnum() from + // passphrase_enums.h. sync_pb::NigoriSpecifics::PassphraseType passphrase_type_; bool encrypt_everything_; base::Time custom_passphrase_time_;
diff --git a/components/sync/protocol/nigori_specifics.proto b/components/sync/protocol/nigori_specifics.proto index 4547de9..cee80f1 100644 --- a/components/sync/protocol/nigori_specifics.proto +++ b/components/sync/protocol/nigori_specifics.proto
@@ -96,7 +96,11 @@ // User provided custom passphrase. CUSTOM_PASSPHRASE = 4; } - optional PassphraseType passphrase_type = 30 [default = IMPLICIT_PASSPHRASE]; + // An |int| field is used instead of enum PassphraseType so we can better + // handle unknown values coming from later versions. Prior to M77, this was an + // enum so old clients will assume IMPLICIT_PASSPHRASE for values greater than + // 4. + optional int32 passphrase_type = 30 [default = 1]; // The keystore decryptor token blob. Encrypted with the keystore key, and // contains the encryption key used to decrypt |encryption_keybag|.
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h index 1df27e9..a86bdd4 100644 --- a/components/sync/protocol/proto_visitors.h +++ b/components/sync/protocol/proto_visitors.h
@@ -640,7 +640,7 @@ VISIT(encrypt_everything); VISIT(server_only_was_missing_keystore_migration_time); VISIT(sync_tab_favicons); - VISIT_ENUM(passphrase_type); + VISIT(passphrase_type); VISIT(keystore_decryptor_token); VISIT(keystore_migration_time); VISIT(custom_passphrase_time);
diff --git a/components/unified_consent/BUILD.gn b/components/unified_consent/BUILD.gn index e669889..e0cafb05f 100644 --- a/components/unified_consent/BUILD.gn +++ b/components/unified_consent/BUILD.gn
@@ -21,9 +21,9 @@ "//components/browser_sync", "//components/pref_registry", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/sync", "//components/sync_preferences", - "//services/identity/public/cpp", ] } @@ -56,9 +56,9 @@ ":test_support", ":unified_consent", "//base/test:test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support", "//components/sync_preferences:test_support", - "//services/identity/public/cpp:test_support", "//testing/gtest", ] }
diff --git a/components/unified_consent/DEPS b/components/unified_consent/DEPS index d0a37047..abc4c13a 100644 --- a/components/unified_consent/DEPS +++ b/components/unified_consent/DEPS
@@ -4,7 +4,7 @@ "+components/keyed_service/core", "+components/pref_registry", "+components/prefs", + "+components/signin/public", "+components/sync", "+components/sync_preferences", - "+services/identity/public/cpp", ]
diff --git a/components/unified_consent/unified_consent_service.h b/components/unified_consent/unified_consent_service.h index 95350aa..ab386f22 100644 --- a/components/unified_consent/unified_consent_service.h +++ b/components/unified_consent/unified_consent_service.h
@@ -15,11 +15,11 @@ #include "base/values.h" #include "components/keyed_service/core/keyed_service.h" #include "components/prefs/pref_change_registrar.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/base/model_type.h" #include "components/sync/driver/sync_service_observer.h" #include "components/sync_preferences/pref_service_syncable_observer.h" #include "components/unified_consent/unified_consent_metrics.h" -#include "services/identity/public/cpp/identity_manager.h" namespace user_prefs { class PrefRegistrySyncable;
diff --git a/components/unified_consent/unified_consent_service_unittest.cc b/components/unified_consent/unified_consent_service_unittest.cc index a8cea518..b5c2adf 100644 --- a/components/unified_consent/unified_consent_service_unittest.cc +++ b/components/unified_consent/unified_consent_service_unittest.cc
@@ -11,6 +11,7 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_task_environment.h" #include "build/build_config.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/base/sync_prefs.h" #include "components/sync/driver/sync_user_settings.h" #include "components/sync/driver/test_sync_service.h" @@ -18,7 +19,6 @@ #include "components/unified_consent/pref_names.h" #include "components/unified_consent/scoped_unified_consent.h" #include "components/unified_consent/unified_consent_metrics.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace unified_consent {
diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc index 992837de..a0c78f6 100644 --- a/components/user_manager/known_user.cc +++ b/components/user_manager/known_user.cc
@@ -69,6 +69,9 @@ // from the local state on logout. const char kIsEphemeral[] = "is_ephemeral"; +// Key of the list value that stores challenge-response authentication keys. +const char kChallengeResponseKeys[] = "challenge_response_keys"; + // List containing all the known user preferences keys. const char* kReservedKeys[] = {kCanonicalEmail, kGAIAIdKey, @@ -82,7 +85,8 @@ kGaiaIdMigration, kMinimalMigrationAttempted, kProfileRequiresPolicy, - kIsEphemeral}; + kIsEphemeral, + kChallengeResponseKeys}; PrefService* GetLocalState() { if (!UserManager::IsInitialized()) @@ -586,6 +590,18 @@ minimal_migration_attempted); } +void SetChallengeResponseKeys(const AccountId& account_id, base::Value value) { + DCHECK(value.is_list()); + SetPref(account_id, kChallengeResponseKeys, std::move(value)); +} + +base::Value GetChallengeResponseKeys(const AccountId& account_id) { + const base::Value* value = nullptr; + if (!GetPref(account_id, kChallengeResponseKeys, &value) || !value->is_list()) + return base::Value(); + return value->Clone(); +} + void RemovePrefs(const AccountId& account_id) { PrefService* local_state = GetLocalState();
diff --git a/components/user_manager/known_user.h b/components/user_manager/known_user.h index 1e22339..edc8555 100644 --- a/components/user_manager/known_user.h +++ b/components/user_manager/known_user.h
@@ -204,6 +204,17 @@ bool USER_MANAGER_EXPORT WasUserHomeMinimalMigrationAttempted(const AccountId& account_id); +// Setter and getter for the information about challenge-response keys that can +// be used by this user to authenticate. +// The getter returns a null value when the property isn't present. +// For the format of the value, refer to +// chromeos/login/auth/challenge_response/known_user_pref_utils.h. +void USER_MANAGER_EXPORT SetChallengeResponseKeys(const AccountId& account_id, + base::Value value); + +base::Value USER_MANAGER_EXPORT +GetChallengeResponseKeys(const AccountId& account_id); + // Removes all user preferences associated with |account_id|. // Not exported as code should not be calling this outside this component void RemovePrefs(const AccountId& account_id);
diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn index 7ad42145..27e957e9 100644 --- a/components/viz/service/BUILD.gn +++ b/components/viz/service/BUILD.gn
@@ -488,9 +488,8 @@ # TODO(samans): Support more configurations. # CFI issue: https://crbug.com/967819 - # x86 issue: https://crbug.com/967831 # LSAN issue: https://crbug.com/971357 - if (use_x11 && target_cpu != "x86" && !is_cfi && !is_lsan) { + if (use_x11 && !is_cfi && !is_lsan) { defines = [ "ENABLE_VIZ_VULKAN_TESTS" ] } }
diff --git a/content/app/service_manager_environment.cc b/content/app/service_manager_environment.cc index 2658257..d910458 100644 --- a/content/app/service_manager_environment.cc +++ b/content/app/service_manager_environment.cc
@@ -15,10 +15,6 @@ #include "mojo/core/embedder/embedder.h" #include "mojo/core/embedder/scoped_ipc_support.h" -#if defined(OS_MACOSX) -#include "content/browser/mach_broker_mac.h" -#endif - namespace content { ServiceManagerEnvironment::ServiceManagerEnvironment( @@ -29,10 +25,6 @@ mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST)), service_manager_context_( std::make_unique<ServiceManagerContext>(ipc_thread_->task_runner())) { -#if defined(OS_MACOSX) - mojo::core::SetMachPortProvider(MachBroker::GetInstance()); -#endif // defined(OS_MACOSX) - auto* system_connection = ServiceManagerConnection::GetForProcess(); RegisterCommonBrowserInterfaces(system_connection); system_connection->Start();
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm index 88c2379..b7b9ee7 100644 --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -91,6 +91,8 @@ // Touch bar identifier. NSString* const kWebContentTouchBarId = @"web-content"; +constexpr int wrap_around_distance = 10000; + // Whether a keyboard event has been reserved by OSX. BOOL EventIsReservedBySystem(NSEvent* event) { return content::GetSystemHotkeyMap()->IsEventReserved(event); @@ -782,6 +784,43 @@ if (!send_touch) { WebMouseEvent event = WebMouseEventBuilder::Build(theEvent, self, pointerType_); + + if (mouse_locked_ && + base::FeatureList::IsEnabled(features::kConsolidatedMovementXY)) { + // When mouse is locked, we keep increasing |last_mouse_screen_position| + // by movement_x/y so that we can still use PositionInScreen to calculate + // movements in blink. We need to keep |last_mouse_screen_position_| from + // getting too large because it will lose some precision. So whenever it + // exceed the |wrap_around_distance|, we start again from the current + // mouse position (locked position), and also send a synthesized event to + // update the blink-side status. + if (std::abs(last_mouse_screen_position_.x()) > wrap_around_distance || + std::abs(last_mouse_screen_position_.y()) > wrap_around_distance) { + NSWindow* window = [self window]; + NSPoint location = [window mouseLocationOutsideOfEventStream]; + int window_number = window ? [window windowNumber] : -1; + NSEvent* nsevent = [NSEvent mouseEventWithType:NSMouseMoved + location:location + modifierFlags:[theEvent modifierFlags] + timestamp:[theEvent timestamp] + windowNumber:window_number + context:nil + eventNumber:0 + clickCount:[theEvent clickCount] + pressure:0]; + WebMouseEvent wrap_around_event = + WebMouseEventBuilder::Build(nsevent, self, pointerType_); + last_mouse_screen_position_ = wrap_around_event.PositionInScreen(); + wrap_around_event.SetModifiers( + event.GetModifiers() | + blink::WebInputEvent::Modifiers::kRelativeMotionEvent); + hostHelper_->RouteOrProcessMouseEvent(wrap_around_event); + } + event.SetPositionInScreen( + last_mouse_screen_position_ + + gfx::Vector2dF(event.movement_x, event.movement_y)); + } + last_mouse_screen_position_ = event.PositionInScreen(); hostHelper_->RouteOrProcessMouseEvent(event); } else {
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc index 5fb77b4..942be53 100644 --- a/content/browser/frame_host/navigation_handle_impl.cc +++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -255,7 +255,7 @@ : net::HttpResponseInfo::ConnectionInfo(); } -const base::Optional<net::SSLInfo> NavigationHandleImpl::GetSSLInfo() { +const base::Optional<net::SSLInfo>& NavigationHandleImpl::GetSSLInfo() { return navigation_request_->ssl_info(); }
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h index a8e8866..292de745 100644 --- a/content/browser/frame_host/navigation_handle_impl.h +++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -89,7 +89,7 @@ const std::string& header_value) override; const net::HttpResponseHeaders* GetResponseHeaders() override; net::HttpResponseInfo::ConnectionInfo GetConnectionInfo() override; - const base::Optional<net::SSLInfo> GetSSLInfo() override; + const base::Optional<net::SSLInfo>& GetSSLInfo() override; const base::Optional<net::AuthChallengeInfo>& GetAuthChallengeInfo() override; void RegisterThrottleForTesting( std::unique_ptr<NavigationThrottle> navigation_throttle) override;
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc index 4575aa23..4deb9d7 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc
@@ -1076,8 +1076,8 @@ return commit_navigation_client_.get(); } -void NavigationRequest::SetOriginPolicy(const std::string& policy) { - common_params_.origin_policy = policy; +void NavigationRequest::SetOriginPolicy(const network::OriginPolicy& policy) { + response_head_->head.origin_policy = policy; } void NavigationRequest::OnRequestRedirected(
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h index 4da5d3f..e97fa85e 100644 --- a/content/browser/frame_host/navigation_request.h +++ b/content/browser/frame_host/navigation_request.h
@@ -28,6 +28,7 @@ #include "content/public/browser/render_process_host_observer.h" #include "content/public/common/previews_state.h" #include "mojo/public/cpp/system/data_pipe.h" +#include "services/network/public/cpp/origin_policy.h" #if defined(OS_ANDROID) #include "base/android/scoped_java_ref.h" @@ -311,7 +312,10 @@ // for commit. Only used with PerNavigationMojoInterface enabled. mojom::NavigationClient* GetCommitNavigationClient(); - void SetOriginPolicy(const std::string& policy); + // TODO(andypaicu): Currently the origin_policy_throttle is responsible for + // setting the origin policy. Remove this function after this is done inside + // the network service. + void SetOriginPolicy(const network::OriginPolicy& policy); void set_transition(ui::PageTransition transition) { common_params_.transition = transition;
diff --git a/content/browser/frame_host/origin_policy_throttle.cc b/content/browser/frame_host/origin_policy_throttle.cc index 6ebefe68..b7aee32b 100644 --- a/content/browser/frame_host/origin_policy_throttle.cc +++ b/content/browser/frame_host/origin_policy_throttle.cc
@@ -247,31 +247,31 @@ #endif // BUILDFLAG(ENABLE_REPORTING) void OriginPolicyThrottle::OnOriginPolicyManagerRetrieveDone( - const network::mojom::OriginPolicyPtr origin_policy) { - switch (origin_policy->state) { - case network::mojom::OriginPolicyState::kCannotLoadPolicy: + const network::OriginPolicy& origin_policy) { + switch (origin_policy.state) { + case network::OriginPolicyState::kCannotLoadPolicy: // TODO(andypaicu): OriginPolicyErrorReason is obsolete and we should use - // network::mojom::OriginPolicyState instead. + // network::OriginPolicyState instead. CancelNavigation(OriginPolicyErrorReason::kCannotLoadPolicy, - origin_policy->policy_url); + origin_policy.policy_url); return; - case network::mojom::OriginPolicyState::kInvalidRedirect: + case network::OriginPolicyState::kInvalidRedirect: // TODO(andypaicu): OriginPolicyErrorReason is obsolete and we should use - // network::mojom::OriginPolicyState instead. + // network::OriginPolicyState instead. CancelNavigation(OriginPolicyErrorReason::kPolicyShouldNotRedirect, - origin_policy->policy_url); + origin_policy.policy_url); return; - case network::mojom::OriginPolicyState::kNoPolicyApplies: + case network::OriginPolicyState::kNoPolicyApplies: Resume(); return; - case network::mojom::OriginPolicyState::kLoaded: - DCHECK(origin_policy->contents); + case network::OriginPolicyState::kLoaded: + DCHECK(origin_policy.contents); static_cast<NavigationHandleImpl*>(navigation_handle()) ->navigation_request() - ->SetOriginPolicy(origin_policy->contents->raw_policy); + ->SetOriginPolicy(origin_policy); Resume(); return;
diff --git a/content/browser/frame_host/origin_policy_throttle.h b/content/browser/frame_host/origin_policy_throttle.h index bffbe55..20b53d8 100644 --- a/content/browser/frame_host/origin_policy_throttle.h +++ b/content/browser/frame_host/origin_policy_throttle.h
@@ -14,7 +14,7 @@ #include "base/memory/scoped_refptr.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/navigation_throttle.h" -#include "services/network/public/mojom/origin_policy_manager.mojom.h" +#include "services/network/public/cpp/origin_policy.h" class GURL; @@ -87,7 +87,7 @@ void Report(OriginPolicyErrorReason reason, const GURL& policy_url); void OnOriginPolicyManagerRetrieveDone( - const network::mojom::OriginPolicyPtr origin_policy); + const network::OriginPolicy& origin_policy); base::WeakPtrFactory<OriginPolicyThrottle> weak_factory_;
diff --git a/content/browser/frame_host/origin_policy_throttle_unittest.cc b/content/browser/frame_host/origin_policy_throttle_unittest.cc index 703a82b8..440d24e 100644 --- a/content/browser/frame_host/origin_policy_throttle_unittest.cc +++ b/content/browser/frame_host/origin_policy_throttle_unittest.cc
@@ -6,6 +6,7 @@ #include <set> #include <utility> +#include <vector> #include "base/feature_list.h" #include "base/macros.h" @@ -20,12 +21,18 @@ #include "content/public/test/navigation_simulator.h" #include "content/public/test/test_renderer_host.h" #include "net/http/http_util.h" +#include "services/network/public/cpp/origin_policy.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace { -constexpr const char kExampleManifestString[] = "{}"; +const network::OriginPolicyContentsPtr kExamplePolicyContents = + std::make_unique<network::OriginPolicyContents>( + std::vector<std::string>( + {"geolocation http://example.com"}) /* features */, + std::vector<std::string>() /* content_security_policies */, + std::vector<std::string>() /* content_security_policies_report_only */); } namespace content { @@ -70,27 +77,26 @@ void RetrieveOriginPolicy(const url::Origin& origin, const std::string& header_value, RetrieveOriginPolicyCallback callback) override { - auto result = network::mojom::OriginPolicy::New(); + network::OriginPolicy result; if (origin_exceptions_.find(origin) == origin_exceptions_.end()) { - result->state = network::mojom::OriginPolicyState::kLoaded; - result->contents = network::mojom::OriginPolicyContents::New(); - result->contents->raw_policy = kExampleManifestString; - result->policy_url = origin.GetURL(); + result.state = network::OriginPolicyState::kLoaded; + result.contents = kExamplePolicyContents->ClonePtr(); + result.policy_url = origin.GetURL(); } else { - result->state = network::mojom::OriginPolicyState::kNoPolicyApplies; - result->policy_url = origin.GetURL(); + result.state = network::OriginPolicyState::kNoPolicyApplies; + result.policy_url = origin.GetURL(); } base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&TestOriginPolicyManager::RunCallback, - base::Unretained(this), std::move(callback), - std::move(result))); + FROM_HERE, + base::BindOnce(&TestOriginPolicyManager::RunCallback, + base::Unretained(this), std::move(callback), result)); } void RunCallback(RetrieveOriginPolicyCallback callback, - network::mojom::OriginPolicyPtr result) { - std::move(callback).Run(std::move(result)); + const network::OriginPolicy& result) { + std::move(callback).Run(result); } network::mojom::OriginPolicyManagerPtr GetPtr() { @@ -188,8 +194,13 @@ // At the end of the navigation, the navigation handle should have a copy // of the origin policy. - EXPECT_EQ(kExampleManifestString, - nav_handle->navigation_request()->common_params().origin_policy); + EXPECT_TRUE(nav_handle->navigation_request() + ->response() + ->head.origin_policy.has_value()); + EXPECT_EQ(kExamplePolicyContents, nav_handle->navigation_request() + ->response() + ->head.origin_policy.value() + .contents); static_cast<StoragePartitionImpl*>( BrowserContext::GetStoragePartition(site_instance->GetBrowserContext(), site_instance)) @@ -243,8 +254,9 @@ // At the end of the navigation, the navigation handle should have no policy // as this origin should be exempted. - EXPECT_EQ("", - nav_handle->navigation_request()->common_params().origin_policy); + EXPECT_FALSE(nav_handle->navigation_request() + ->response() + ->head.origin_policy.has_value()); static_cast<StoragePartitionImpl*>( BrowserContext::GetStoragePartition(site_instance->GetBrowserContext(),
diff --git a/content/browser/media/session/media_session_browsertest.cc b/content/browser/media/session/media_session_browsertest.cc index 9315f9d..110addf 100644 --- a/content/browser/media/session/media_session_browsertest.cc +++ b/content/browser/media/session/media_session_browsertest.cc
@@ -11,6 +11,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h" #include "base/test/scoped_feature_list.h" +#include "build/build_config.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" @@ -278,7 +279,13 @@ EXPECT_TRUE(IsPlaying(shell(), "long-audio")); } -IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, WebContents_Muted) { +// Flaky on Mac. See https://crbug.com/980663 +#if defined(OS_MACOSX) +#define MAYBE_WebContents_Muted DISABLED_WebContents_Muted +#else +#define MAYBE_WebContents_Muted WebContents_Muted +#endif +IN_PROC_BROWSER_TEST_F(MediaSessionBrowserTest, MAYBE_WebContents_Muted) { NavigateToURL(shell(), GetTestUrl("media/session", "media-session.html")); shell()->web_contents()->SetAudioMuted(true);
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc index 91427708..e08c81b 100644 --- a/content/browser/site_per_process_hit_test_browsertest.cc +++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -6534,8 +6534,14 @@ EXPECT_EQ(kSlowHitTestFlags, hit_test_data[2].flags); } +// Flaky on Linux. See https://crbug.com/980564 +#if defined(OS_LINUX) +#define MAYBE_PointerEventsNoneOOPIF DISABLED_PointerEventsNoneOOPIF +#else +#define MAYBE_PointerEventsNoneOOPIF PointerEventsNoneOOPIF +#endif IN_PROC_BROWSER_TEST_P(SitePerProcessHitTestDataGenerationBrowserTest, - PointerEventsNoneOOPIF) { + MAYBE_PointerEventsNoneOOPIF) { auto hit_test_data = SetupAndGetHitTestData( "/frame_tree/page_with_positioned_frame_pointer-events_none.html", 0); float device_scale_factor = current_device_scale_factor();
diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc index 50e34fea..7862866 100644 --- a/content/browser/tracing/tracing_controller_impl.cc +++ b/content/browser/tracing/tracing_controller_impl.cc
@@ -506,6 +506,10 @@ // complete. See also crbug.com/944107. // TODO(eseckler): Avoid the nestedRunLoop here somehow. base::RunLoop run_loop; + // We may not have completed startup yet when we attempt to write the trace, + // and thus tasks with BEST_EFFORT may not be run. Choose a non-background + // priority to avoid blocking forever. + const base::TaskPriority kWritePriority = base::TaskPriority::USER_VISIBLE; bool success = StopTracing(CreateFileEndpoint( startup_trace_file.value(), base::BindRepeating( @@ -513,7 +517,8 @@ OnStoppedStartupTracing(trace_file); std::move(quit_closure).Run(); }, - startup_trace_file.value(), run_loop.QuitClosure()))); + startup_trace_file.value(), run_loop.QuitClosure()), + kWritePriority)); if (!success) return; run_loop.Run();
diff --git a/content/browser/tracing/tracing_controller_impl_data_endpoint.cc b/content/browser/tracing/tracing_controller_impl_data_endpoint.cc index 1b9d43f..daa335e 100644 --- a/content/browser/tracing/tracing_controller_impl_data_endpoint.cc +++ b/content/browser/tracing/tracing_controller_impl_data_endpoint.cc
@@ -61,13 +61,15 @@ class FileTraceDataEndpoint : public TracingController::TraceDataEndpoint { public: explicit FileTraceDataEndpoint(const base::FilePath& trace_file_path, - const base::Closure& callback) + const base::Closure& callback, + base::TaskPriority write_priority) : file_path_(trace_file_path), completion_callback_(callback), - file_(nullptr) {} + may_block_task_runner_(base::CreateSequencedTaskRunnerWithTraits( + {base::MayBlock(), write_priority})) {} void ReceiveTraceChunk(std::unique_ptr<std::string> chunk) override { - background_task_runner_->PostTask( + may_block_task_runner_->PostTask( FROM_HERE, base::BindOnce( &FileTraceDataEndpoint::ReceiveTraceChunkOnBlockingThread, this, @@ -76,7 +78,7 @@ void ReceiveTraceFinalContents( std::unique_ptr<const base::DictionaryValue>) override { - background_task_runner_->PostTask( + may_block_task_runner_->PostTask( FROM_HERE, base::BindOnce(&FileTraceDataEndpoint::CloseOnBlockingThread, this)); } @@ -118,10 +120,8 @@ base::FilePath file_path_; base::Closure completion_callback_; - FILE* file_; - const scoped_refptr<base::SequencedTaskRunner> background_task_runner_ = - base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT}); + FILE* file_ = nullptr; + const scoped_refptr<base::SequencedTaskRunner> may_block_task_runner_; DISALLOW_COPY_AND_ASSIGN(FileTraceDataEndpoint); }; @@ -240,8 +240,9 @@ scoped_refptr<TracingController::TraceDataEndpoint> TracingController::CreateFileEndpoint(const base::FilePath& file_path, - const base::Closure& callback) { - return new FileTraceDataEndpoint(file_path, callback); + const base::Closure& callback, + base::TaskPriority write_priority) { + return new FileTraceDataEndpoint(file_path, callback, write_priority); } scoped_refptr<TracingController::TraceDataEndpoint>
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 06dfed6..d523ad2 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -498,7 +498,6 @@ IPC_STRUCT_TRAITS_MEMBER(started_from_context_menu) IPC_STRUCT_TRAITS_MEMBER(initiator_csp_info) IPC_STRUCT_TRAITS_MEMBER(initiator_origin_trial_features) - IPC_STRUCT_TRAITS_MEMBER(origin_policy) IPC_STRUCT_TRAITS_MEMBER(href_translate) IPC_STRUCT_TRAITS_MEMBER(input_start) IPC_STRUCT_TRAITS_MEMBER(is_history_navigation_in_new_child_frame)
diff --git a/content/common/navigation_params.h b/content/common/navigation_params.h index f413d8e1..40d9752 100644 --- a/content/common/navigation_params.h +++ b/content/common/navigation_params.h
@@ -187,10 +187,6 @@ // as they are passed through content across navigations. std::vector<int> initiator_origin_trial_features; - // The current origin policy for this request's origin. - // (Empty if none applies.) - std::string origin_policy; - // The value of the hrefTranslate attribute if this navigation was initiated // from a link that had that attribute set. std::string href_translate;
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h index e7cd35c..4f0bcd6 100644 --- a/content/public/browser/navigation_handle.h +++ b/content/public/browser/navigation_handle.h
@@ -266,7 +266,7 @@ // Returns the SSLInfo for a request that succeeded or failed due to a // certificate error. In the case of other request failures or of a non-secure // scheme, returns an empty object. - virtual const base::Optional<net::SSLInfo> GetSSLInfo() = 0; + virtual const base::Optional<net::SSLInfo>& GetSSLInfo() = 0; // Returns the AuthChallengeInfo for the request, if the response contained an // authentication challenge.
diff --git a/content/public/browser/tracing_controller.h b/content/public/browser/tracing_controller.h index a26f45e..8c3459a7 100644 --- a/content/public/browser/tracing_controller.h +++ b/content/public/browser/tracing_controller.h
@@ -12,6 +12,7 @@ #include "base/callback.h" #include "base/memory/ref_counted.h" +#include "base/task/task_traits.h" #include "base/trace_event/trace_event.h" #include "base/values.h" #include "content/common/content_export.h" @@ -58,7 +59,8 @@ // to dump the trace data to a file. CONTENT_EXPORT static scoped_refptr<TraceDataEndpoint> CreateFileEndpoint( const base::FilePath& file_path, - const base::Closure& callback); + const base::Closure& callback, + base::TaskPriority write_priority = base::TaskPriority::BEST_EFFORT); // Get a set of category groups. The category groups can change as // new code paths are reached.
diff --git a/content/public/test/mock_navigation_handle.h b/content/public/test/mock_navigation_handle.h index 73c5faf..ca57bd2 100644 --- a/content/public/test/mock_navigation_handle.h +++ b/content/public/test/mock_navigation_handle.h
@@ -77,7 +77,9 @@ return response_headers_.get(); } MOCK_METHOD0(GetConnectionInfo, net::HttpResponseInfo::ConnectionInfo()); - const base::Optional<net::SSLInfo> GetSSLInfo() override { return ssl_info_; } + const base::Optional<net::SSLInfo>& GetSSLInfo() override { + return ssl_info_; + } const base::Optional<net::AuthChallengeInfo>& GetAuthChallengeInfo() override { return auth_challenge_info_;
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index c33ea4e..78efcf4 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -117,7 +117,6 @@ #include "third_party/blink/public/web/web_print_params.h" #include "third_party/blink/public/web/web_print_preset_options.h" #include "third_party/blink/public/web/web_print_scaling_option.h" -#include "third_party/blink/public/web/web_scoped_user_gesture.h" #include "third_party/blink/public/web/web_script_source.h" #include "third_party/blink/public/web/web_user_gesture_indicator.h" #include "third_party/blink/public/web/web_view.h" @@ -177,14 +176,12 @@ using blink::WebPluginContainer; using blink::WebPrintParams; using blink::WebPrintScalingOption; -using blink::WebScopedUserGesture; using blink::WebString; using blink::WebURLError; using blink::WebAssociatedURLLoaderClient; using blink::WebURLRequest; using blink::WebURLResponse; using blink::WebUserGestureIndicator; -using blink::WebUserGestureToken; using blink::WebView; using blink::WebWidget; @@ -538,7 +535,6 @@ text_input_type_(kPluginDefaultTextInputType), selection_caret_(0), selection_anchor_(0), - pending_user_gesture_(0.0), document_loader_(nullptr), external_document_load_(false), isolate_(v8::Isolate::GetCurrent()), @@ -1176,23 +1172,6 @@ else CreateInputEventData(event, &events); - // Allow the user gesture to be pending after the plugin handles the - // event. This allows out-of-process plugins to respond to the user - // gesture after processing has finished here. - if (WebUserGestureIndicator::IsProcessingUserGesture( - render_frame_->GetWebFrame())) { - auto user_gesture_token = - WebUserGestureIndicator::CurrentUserGestureToken(); - // Checking user_gesture_token.HasGestures() to make sure we are - // processing user geasture. - if (user_gesture_token.HasGestures()) { - pending_user_gesture_ = - ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now()); - pending_user_gesture_token_ = user_gesture_token; - WebUserGestureIndicator::ExtendTimeout(); - } - } - // Each input event may generate more than one PP_InputEvent. for (size_t i = 0; i < events.size(); i++) { if (filtered_input_event_mask_ & event_class) @@ -2120,8 +2099,6 @@ desired_fullscreen_state_ = fullscreen; if (fullscreen) { - // Create the user gesture in case we're processing one that's pending. - WebScopedUserGesture user_gesture(CurrentUserGestureToken()); // WebKit does not resize the plugin to fill the screen in fullscreen mode, // so we will tweak plugin's attributes to support the expected behavior. KeepSizeAttributesBeforeFullscreen(); @@ -2149,14 +2126,11 @@ bool old_plugin_focus = PluginHasFocus(); flash_fullscreen_ = flash_fullscreen; if (is_mouselock_pending && !IsMouseLocked()) { - if (!IsProcessingUserGesture() && + if (!HasTransientUserActivation() && !module_->permissions().HasPermission( ppapi::PERMISSION_BYPASS_USER_GESTURE)) { lock_mouse_callback_->Run(PP_ERROR_NO_USER_GESTURE); } else { - // Open a user gesture here so the Webkit user gesture checks will succeed - // for out-of-process plugins. - WebScopedUserGesture user_gesture(CurrentUserGestureToken()); if (!LockMouse()) lock_mouse_callback_->Run(PP_ERROR_FAILED); } @@ -2294,18 +2268,9 @@ live_plugin_objects_.erase(plugin_object); } -bool PepperPluginInstanceImpl::IsProcessingUserGesture() const { - PP_TimeTicks now = ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now()); - // Give a lot of slack so tests won't be flaky. - const PP_TimeTicks kUserGestureDurationInSeconds = 10.0; - return pending_user_gesture_token_.HasGestures() && - (now - pending_user_gesture_ < kUserGestureDurationInSeconds); -} - -WebUserGestureToken PepperPluginInstanceImpl::CurrentUserGestureToken() { - if (!IsProcessingUserGesture()) - pending_user_gesture_token_ = WebUserGestureToken(); - return pending_user_gesture_token_; +bool PepperPluginInstanceImpl::HasTransientUserActivation() const { + return WebUserGestureIndicator::IsProcessingUserGesture( + render_frame_->GetWebFrame()); } void PepperPluginInstanceImpl::OnLockMouseACK(bool succeeded) { @@ -2549,8 +2514,7 @@ blink::WebScriptSource script( blink::WebString::FromUTF8(script_string.c_str())); v8::Local<v8::Value> result; - if (IsProcessingUserGesture()) { - blink::WebScopedUserGesture user_gesture(CurrentUserGestureToken()); + if (HasTransientUserActivation()) { result = frame->ExecuteScriptAndReturnValue(script); } else { result = frame->ExecuteScriptAndReturnValue(script); @@ -2792,15 +2756,12 @@ if (!CanAccessMainFrame()) return PP_ERROR_NOACCESS; - if (!IsProcessingUserGesture()) + if (!HasTransientUserActivation()) return PP_ERROR_NO_USER_GESTURE; // Attempt mouselock only if Flash isn't waiting on fullscreen, otherwise // we wait and call LockMouse() in UpdateFlashFullscreenState(). if (!FlashIsFullscreenOrPending() || flash_fullscreen_) { - // Open a user gesture here so the Webkit user gesture checks will succeed - // for out-of-process plugins. - WebScopedUserGesture user_gesture(CurrentUserGestureToken()); if (!LockMouse()) return PP_ERROR_FAILED; } @@ -3179,7 +3140,7 @@ return PP_ERROR_FAILED; } web_request.SetSiteForCookies(document.SiteForCookies()); - if (IsProcessingUserGesture()) + if (HasTransientUserActivation()) web_request.SetHasUserGesture(true); GURL gurl(web_request.Url()); @@ -3193,7 +3154,6 @@ // TODO(viettrungluu): NPAPI sends the result back to the plugin -- do we // need that? - blink::WebScopedUserGesture user_gesture(CurrentUserGestureToken()); WebString result = container_->ExecuteScriptURL(gurl, false); return result.IsNull() ? PP_ERROR_FAILED : PP_OK; } @@ -3203,7 +3163,6 @@ return PP_ERROR_BADARGUMENT; WebString target_str = WebString::FromUTF8(target); - blink::WebScopedUserGesture user_gesture(CurrentUserGestureToken()); container_->LoadFrameRequest(web_request, target_str); return PP_OK; } @@ -3301,7 +3260,7 @@ return false; } - if (!IsProcessingUserGesture()) + if (!HasTransientUserActivation()) return false; } return true;
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h index cb17be7d..a7d2742 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.h +++ b/content/renderer/pepper/pepper_plugin_instance_impl.h
@@ -61,7 +61,6 @@ #include "third_party/blink/public/platform/web_url_response.h" #include "third_party/blink/public/web/web_associated_url_loader_client.h" #include "third_party/blink/public/web/web_plugin.h" -#include "third_party/blink/public/web/web_user_gesture_token.h" #include "ui/base/ime/text_input_type.h" #include "ui/gfx/geometry/rect.h" #include "url/gurl.h" @@ -328,10 +327,10 @@ bool flash_fullscreen() const { return flash_fullscreen_; } // Switches between fullscreen and normal mode. The transition is - // asynchronous. WebKit will trigger corresponding VewChanged calls. - // Returns true on success, false on failure (e.g. trying to enter fullscreen - // when not processing a user gesture or trying to set fullscreen when - // already in fullscreen mode). + // asynchronous. WebKit will trigger corresponding ViewChanged calls. Returns + // true on success, false on failure (e.g. trying to enter fullscreen without + // user activation or trying to set fullscreen when already in fullscreen + // mode). bool SetFullscreen(bool fullscreen); // Send the message on to the plugin. @@ -343,12 +342,8 @@ bool HandleBlockingMessage(ppapi::ScopedPPVar message, ppapi::ScopedPPVar* result); - // Returns true if the plugin is processing a user gesture. - bool IsProcessingUserGesture() const; - - // Returns the user gesture token to use for creating a WebScopedUserGesture, - // if IsProcessingUserGesture returned true. - blink::WebUserGestureToken CurrentUserGestureToken(); + // Returns true if the plugin has transient user activation. + bool HasTransientUserActivation() const; // A mouse lock request was pending and this reports success or failure. void OnLockMouseACK(bool succeeded); @@ -870,11 +865,6 @@ scoped_refptr<ppapi::TrackedCallback> lock_mouse_callback_; - // Track pending user gestures so out-of-process plugins can respond to - // a user gesture after it has been processed. - PP_TimeTicks pending_user_gesture_; - blink::WebUserGestureToken pending_user_gesture_token_; - // We store the arguments so we can re-send them if we are reset to talk to // NaCl via the IPC NaCl proxy. std::vector<std::string> argn_;
diff --git a/content/renderer/pepper/ppb_var_deprecated_impl.cc b/content/renderer/pepper/ppb_var_deprecated_impl.cc index 43a7bcc..2f899e6 100644 --- a/content/renderer/pepper/ppb_var_deprecated_impl.cc +++ b/content/renderer/pepper/ppb_var_deprecated_impl.cc
@@ -23,7 +23,6 @@ #include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_plugin_container.h" #include "third_party/blink/public/web/web_plugin_script_forbidden_scope.h" -#include "third_party/blink/public/web/web_scoped_user_gesture.h" using ppapi::V8ObjectVar; using ppapi::PpapiGlobals; @@ -328,9 +327,8 @@ PP_Var* argv, PP_Var* exception) { ObjectAccessor accessor(var); - if (accessor.instance() && accessor.instance()->IsProcessingUserGesture()) { - blink::WebScopedUserGesture user_gesture( - accessor.instance()->CurrentUserGestureToken()); + if (accessor.instance() && + accessor.instance()->HasTransientUserActivation()) { return CallDeprecatedInternal(var, method_name, argc, argv, exception); } return CallDeprecatedInternal(var, method_name, argc, argv, exception);
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.cc b/content/renderer/pepper/renderer_ppapi_host_impl.cc index 465cdf58..2e13e64 100644 --- a/content/renderer/pepper/renderer_ppapi_host_impl.cc +++ b/content/renderer/pepper/renderer_ppapi_host_impl.cc
@@ -185,7 +185,7 @@ if (instance_object->module()->permissions().HasPermission( ppapi::PERMISSION_BYPASS_USER_GESTURE)) return true; - return instance_object->IsProcessingUserGesture(); + return instance_object->HasTransientUserActivation(); } int RendererPpapiHostImpl::GetRoutingIDForWidget(PP_Instance instance) {
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index f03ce01d8..ef1b6af 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -475,8 +475,6 @@ navigation_params->previews_state = static_cast<WebURLRequest::PreviewsState>(common_params.previews_state); - navigation_params->origin_policy = - WebString::FromUTF8(common_params.origin_policy); // Set the request initiator origin, which is supplied by the browser // process. It is present in cases such as navigating a frame in a different @@ -1052,6 +1050,34 @@ commit_params.appcache_host_id.value_or(base::UnguessableToken()); } +// Fills in the origin policy associated with this response, if any is present. +// Converts it into a format that blink understands: WebOriginPolicy. +void FillNavigationParamsOriginPolicy( + const network::ResourceResponseHead& head, + blink::WebNavigationParams* navigation_params) { + if (head.origin_policy.has_value() && head.origin_policy.value().contents) { + navigation_params->origin_policy = blink::WebOriginPolicy(); + + for (const auto& feature : head.origin_policy.value().contents->features) { + navigation_params->origin_policy->features.emplace_back( + WebString::FromUTF8(feature)); + } + + for (const auto& csp : + head.origin_policy.value().contents->content_security_policies) { + navigation_params->origin_policy->content_security_policies.emplace_back( + WebString::FromUTF8(csp)); + } + + for (const auto& csp_report_only : + head.origin_policy.value() + .contents->content_security_policies_report_only) { + navigation_params->origin_policy->content_security_policies_report_only + .emplace_back(WebString::FromUTF8(csp_report_only)); + } + } +} + } // namespace // This class uses existing WebNavigationBodyLoader to read the whole response @@ -3500,6 +3526,8 @@ !frame_->Parent(), navigation_params.get()); } + FillNavigationParamsOriginPolicy(response_head, navigation_params.get()); + // The MHTML mime type should be same as the one we check in the browser // process's download_utils::MustDownload. bool is_mhtml_archive =
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt index 9d6a10d5..2cc1e71 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -161,6 +161,9 @@ crbug.com/728670 [ win10 nvidia-0x1cb3 ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ RetryOnFailure ] crbug.com/728670 [ win10 nvidia-0x1cb3 ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ RetryOnFailure ] +# Win7 / NVIDIA Quadro P400 failures +crbug.com/979444 [ win7 nvidia-0x1cb3 ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ] + # Win7 / NVIDIA D3D9 failures crbug.com/690248 [ win7 nvidia d3d9 ] conformance/canvas/canvas-test.html [ RetryOnFailure ] @@ -362,6 +365,7 @@ # Mac Intel crbug.com/886970 [ mac intel-0xa2e ] conformance/rendering/canvas-alpha-bug.html [ Failure ] crbug.com/782317 [ mac intel ] conformance/rendering/rendering-stencil-large-viewport.html [ Failure ] +crbug.com/979444 [ mac intel ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ] # Mac Retina NVidia failures crbug.com/635081 [ mac nvidia-0xfe9 ] conformance/attribs/gl-disabled-vertex-attrib.html [ Failure ] @@ -391,6 +395,7 @@ crbug.com/703779 [ linux nvidia-0x1cb3 opengl ] conformance/textures/misc/texture-size.html [ Failure ] crbug.com/913969 [ linux nvidia-0x1cb3 ] conformance/extensions/oes-texture-float-with-video.html [ RetryOnFailure ] crbug.com/913969 [ linux nvidia-0x1cb3 ] conformance/extensions/oes-texture-half-float-with-video.html [ RetryOnFailure ] +crbug.com/979444 [ linux nvidia-0x1cb3 ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ] # NVIDIA P400 OpenGL, Debug crbug.com/918995 [ linux debug nvidia-0x1cb3 ] conformance/canvas/draw-webgl-to-canvas-test.html [ RetryOnFailure ] @@ -515,6 +520,7 @@ crbug.com/610951 [ android qualcomm-adreno-(tm)-418 ] conformance/uniforms/uniform-samplers-test.html [ Skip ] crbug.com/610951 [ android qualcomm-adreno-(tm)-418 ] WebglExtension_EXT_sRGB [ Failure ] crbug.com/914631 [ android qualcomm-adreno-(tm)-418 passthrough ] conformance/limits/gl-max-texture-dimensions.html [ RetryOnFailure ] +crbug.com/979444 [ android qualcomm-adreno-(tm)-418 ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ] # Nexus 6 (Adreno 420) and 6P (Adreno 430) crbug.com/499555 [ android qualcomm-adreno-(tm)-420 ] conformance/context/context-attributes-alpha-depth-stencil-antialias.html [ Failure ]
diff --git a/docs/sync/model_api.md b/docs/sync/model_api.md index 4d193695..68a53cca 100644 --- a/docs/sync/model_api.md +++ b/docs/sync/model_api.md
@@ -6,9 +6,11 @@ guide is for developers interested in syncing data for their model type to the cloud using Chrome Sync. It describes the newest version of the API, known as Unified Sync and Storage (USS). There is also the deprecated [SyncableService -API] (aka Directory), which as of early 2016 is still used by most model types. +API] (aka Directory), which as of mid-2019 is still used by several legacy model +types, but "wrapped into" USS (see [SyncableServiceBasedBridge]). [SyncableService API]: https://www.chromium.org/developers/design-documents/sync/syncable-service-api +[SyncableServiceBasedBridge]: https://cs.chromium.org/chromium/src/components/sync/model_impl/syncable_service_based_bridge.h [TOC] @@ -23,17 +25,19 @@ due to being committed more than once. [`ModelTypeSyncBridge`][Bridge] is the interface the model code must implement. -The bridge tends to be either a [`KeyedService`][KeyedService] or owned by one. +The bridge is usually owned by a [`KeyedService`][KeyedService]. The correct place for the bridge generally lies as close to where your model data is stored as possible, as the bridge needs to be able to inject metadata updates into any local data changes that occur. -The bridge has access to a [`ModelTypeChangeProcessor`][MTCP] object, which it -uses to communicate local changes to sync using the `Put` and `Delete` methods. +The bridge owns a [`ModelTypeChangeProcessor`][MTCP] object, which it uses to +communicate local changes to sync using the `Put` and `Delete` methods. The processor will communicate remote changes from sync to the bridge using the -`ApplySyncChanges` method. [`MetadataChangeList`][MCL] is the way sync will -communicate metadata changes to the storage mechanism. Note that it is typically -implemented on a per-storage basis, not a per-type basis. +`MergeSyncData` and `ApplySyncChanges` methods, respectively for the initial +merge of remote and local data, and for incremental changes coming from sync. +[`MetadataChangeList`][MCL] is the way sync communicates metadata changes to the +storage mechanism. Note that it is typically implemented on a per-storage basis, +not a per-type basis. [Bridge]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_sync_bridge.h [KeyedService]: https://cs.chromium.org/chromium/src/components/keyed_service/core/keyed_service.h @@ -62,7 +66,7 @@ non-legacy types without significant performance concerns, these will generally be the same. -The storage key is used to uniquely identify entities locally within a client. +The storage key is meant to be the primary key in the local model/database. It’s what’s used to refer to entities most of the time and, as its name implies, the bridge needs to be able to look up local data and metadata entries in the store using it. Because it is a local identifier, it can change as part of @@ -112,13 +116,12 @@ for the type’s data, so multiple `ModelTypeStore` objects for different types can share the same LevelDB backend just by specifying the same path and task runner. Sync already has a backend it uses for DeviceInfo that can be shared by -other types via the -[`ProfileSyncService::GetModelTypeStoreFactory`][StoreFactory] method. +other types via the [`ModelTypeStoreService`][StoreService]. [Store]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_store.h -[LevelDB]: http://leveldb.org/ -[WriteBatch]: https://cs.chromium.org/search/?q="class+WriteBatch"+file:model_type_store.h -[StoreFactory]: https://cs.chromium.org/search/?q=GetModelTypeStoreFactory+file:profile_sync_service.h +[LevelDB]: https://github.com/google/leveldb/blob/master/doc/index.md +[WriteBatch]: https://cs.chromium.org/search/?q="class+WriteBatch"+file:model_type_store_base.h +[StoreService]: https://cs.chromium.org/chromium/src/components/sync/model/model_type_store_service.h ## Implementing ModelTypeSyncBridge @@ -242,10 +245,10 @@ This will inform sync of the error, which will stop all communications with the server so bad data doesn’t get synced. Since the metadata might no longer be -valid, the bridge will asynchronously receive a `DisableSync` call (this is -implemented by the abstract base class; subclasses don’t need to do anything). -All the metadata will be cleared from the store (if possible), and the type will -be started again from scratch on the next client restart. +valid, the bridge will asynchronously receive an `ApplyStopSyncChanges` call +with a non-null `MetadataChangeList` parameter. All the metadata will be cleared +from the store (if possible), and the type will be started again from scratch on +the next client restart. [ReportError]: https://cs.chromium.org/search/?q=ReportError+file:/model_type_change_processor.h [ModelError]: https://cs.chromium.org/chromium/src/components/sync/model/model_error.h @@ -258,20 +261,23 @@ [`kModelTypeInfoMap`][info_map]. * Add it to the [proto value conversions][conversions] files. * Register a [`ModelTypeController`][ModelTypeController] for your type in - [`ProfileSyncComponentsFactoryImpl::RegisterDataTypes`][RegisterDataTypes]. -* Tell sync how to access your `ModelTypeSyncBridge` in - [`ChromeSyncClient::GetSyncBridgeForModelType`][GetSyncBridge]. + [`ProfileSyncComponentsFactoryImpl::CreateCommonDataTypeControllers`][CreateCommonDataTypeControllers] or platform-specific equivalent in + [`ChromeSyncClient::CreateDataTypeControllers`][CreateDataTypeControllers]. * Add your KeyedService dependency to [`ProfileSyncServiceFactory`][ProfileSyncServiceFactory]. * Add to the [start order list][kStartOrder]. * Add an field for encrypted data to [`NigoriSpecifics`][NigoriSpecifics]. * Add to two encrypted types translation functions in [`nigori_util.cc`][nigori_util]. -* Add a [preference][pref_names] for tracking whether your type is enabled. -* Map your type to the pref in [`GetPrefNameForDataType`][GetPrefName]. -* Check whether you should be part of a [pref group][RegisterPrefGroup]. -* Add to the `SyncModelTypes` enum and `SyncModelType` suffix in - [`histograms.xml`][histograms]. +* If your type should have its own toggle in sync settings, add an entry to + the [`UserSelectableType`][UserSelectableType] enum, add a + [preference][pref_names] for tracking whether your type is enabled, and + map your type to the pref in [`GetPrefNameForType`][GetPrefName]. +* Otherwise, if your type should be included in an existing toggle in sync + settings, add it in [`GetUserSelectableTypeInfo`] + [GetUserSelectableTypeInfo]. +* Add to the `SyncModelTypes` enum in [`enums.xml`][enums] and to the + `SyncModelType` suffix in [`histograms.xml`][histograms]. * Add to the [`SYNC_DATA_TYPE_HISTOGRAM`][DataTypeHistogram] macro. [protocol]: https://cs.chromium.org/chromium/src/components/sync/protocol/ @@ -279,22 +285,24 @@ [info_map]: https://cs.chromium.org/search/?q="kModelTypeInfoMap%5B%5D"+file:model_type.cc [conversions]: https://cs.chromium.org/chromium/src/components/sync/protocol/proto_value_conversions.h [ModelTypeController]: https://cs.chromium.org/chromium/src/components/sync/driver/model_type_controller.h -[RegisterDataTypes]: https://cs.chromium.org/search/?q="ProfileSyncComponentsFactoryImpl::RegisterDataTypes" -[GetSyncBridge]: https://cs.chromium.org/search/?q=GetSyncBridgeForModelType+file:chrome_sync_client.cc +[CreateCommonDataTypeControllers]: https://cs.chromium.org/search/?q="ProfileSyncComponentsFactoryImpl::CreateCommonDataTypeControllers" +[CreateDataTypeControllers]: https://cs.chromium.org/search/?q="ChromeSyncClient::CreateDataTypeControllers" [ProfileSyncServiceFactory]: https://cs.chromium.org/search/?q=:ProfileSyncServiceFactory%5C(%5C) [kStartOrder]: https://cs.chromium.org/search/?q="kStartOrder[]" [NigoriSpecifics]: https://cs.chromium.org/chromium/src/components/sync/protocol/nigori_specifics.proto [nigori_util]: https://cs.chromium.org/chromium/src/components/sync/syncable/nigori_util.cc +[UserSelectableType]: https://cs.chromium.org/chromium/src/components/sync/base/user_selectable_type.h?type=cs&q="enum+class+UserSelectableType" [pref_names]: https://cs.chromium.org/chromium/src/components/sync/base/pref_names.h -[GetPrefName]: https://cs.chromium.org/search/?q=::GetPrefNameForDataType+file:sync_prefs.cc -[RegisterPrefGroup]: https://cs.chromium.org/search/?q=::RegisterPrefGroups+file:sync_prefs.cc +[GetPrefName]: https://cs.chromium.org/search/?q=GetPrefNameForType+file:sync_prefs.cc +[GetUserSelectableTypeInfo]: https://cs.chromium.org/chromium/src/components/sync/base/user_selectable_type.cc?type=cs&q="UserSelectableTypeInfo+GetUserSelectableTypeInfo"+f:components/sync/base/user_selectable_type.cc +[enums]: https://cs.chromium.org/chromium/src/tools/metrics/histograms/enums.xml [histograms]: https://cs.chromium.org/chromium/src/tools/metrics/histograms/histograms.xml [DataTypeHistogram]: https://cs.chromium.org/chromium/src/components/sync/base/data_type_histogram.h ## Testing -The [`TwoClientUssSyncTest`][UssTest] suite is probably a good place to start +The [`TwoClientTypedUrlsSyncTest`][UssTest] suite is probably a good place to start for integration testing. Especially note the use of a `StatusChangeChecker` to wait for events to happen. -[UssTest]: https://cs.chromium.org/chromium/src/chrome/browser/sync/test/integration/two_client_uss_sync_test.cc +[UssTest]: https://cs.chromium.org/chromium/src/chrome/browser/sync/test/integration/two_client_typed_urls_sync_test.cc
diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS index 26f3cc44..b9b9c3d 100644 --- a/extensions/browser/DEPS +++ b/extensions/browser/DEPS
@@ -3,12 +3,13 @@ "+components/guest_view", "+components/keyed_service", "+components/pref_registry", + "+components/services/unzip/public", "+components/sessions", + "+components/signin/public", "+components/storage_monitor", "+components/sync", "+components/sync_preferences", "+components/update_client", - "+components/services/unzip/public", "+components/variations", "+components/version_info", "+components/web_cache", @@ -25,7 +26,6 @@ "+ppapi/buildflags", "+services/data_decoder/public", "+services/device/public", - "+services/identity/public/cpp", "+services/network/public/cpp", "+services/network/public/mojom", "+services/network",
diff --git a/extensions/browser/updater/BUILD.gn b/extensions/browser/updater/BUILD.gn index f8835f7..ec393d3 100644 --- a/extensions/browser/updater/BUILD.gn +++ b/extensions/browser/updater/BUILD.gn
@@ -41,9 +41,9 @@ ] deps = [ + "//components/signin/public/identity_manager", "//extensions/common", "//extensions/strings", "//services/data_decoder/public/cpp", - "//services/identity/public/cpp", ] }
diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc index ebb3617..144e89db 100644 --- a/extensions/browser/updater/extension_downloader.cc +++ b/extensions/browser/updater/extension_downloader.cc
@@ -24,6 +24,9 @@ #include "base/time/time.h" #include "base/version.h" #include "components/crx_file/crx_verifier.h" +#include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/update_client/update_query_params.h" #include "content/public/browser/file_url_loader.h" #include "content/public/browser/notification_details.h" @@ -44,9 +47,6 @@ #include "net/base/net_errors.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/identity/public/cpp/access_token_info.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_access_token_fetcher.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h"
diff --git a/google_apis/drive/BUILD.gn b/google_apis/drive/BUILD.gn index 0f87c31..77d6bdb32 100644 --- a/google_apis/drive/BUILD.gn +++ b/google_apis/drive/BUILD.gn
@@ -40,10 +40,10 @@ deps = [ "//base", "//base/third_party/dynamic_annotations", + "//components/signin/public/identity_manager", "//crypto", "//google_apis:google_apis", "//net", - "//services/identity/public/cpp:cpp", "//services/network/public/cpp", ] }
diff --git a/google_apis/drive/DEPS b/google_apis/drive/DEPS index 2214f519..e704a471 100644 --- a/google_apis/drive/DEPS +++ b/google_apis/drive/DEPS
@@ -1,3 +1,3 @@ include_rules = [ - "+services/identity/public", + "+components/signin/public", ]
diff --git a/google_apis/drive/auth_service.cc b/google_apis/drive/auth_service.cc index a91a47f..067c155a 100644 --- a/google_apis/drive/auth_service.cc +++ b/google_apis/drive/auth_service.cc
@@ -13,10 +13,10 @@ #include "base/metrics/histogram_macros.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" +#include "components/signin/public/identity_manager/access_token_fetcher.h" +#include "components/signin/public/identity_manager/access_token_info.h" #include "google_apis/drive/auth_service_observer.h" #include "google_apis/gaia/google_service_auth_error.h" -#include "services/identity/public/cpp/access_token_fetcher.h" -#include "services/identity/public/cpp/access_token_info.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace google_apis {
diff --git a/google_apis/drive/auth_service.h b/google_apis/drive/auth_service.h index 4cd0a50..9a4f451 100644 --- a/google_apis/drive/auth_service.h +++ b/google_apis/drive/auth_service.h
@@ -13,8 +13,8 @@ #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/threading/thread_checker.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/drive/auth_service_interface.h" -#include "services/identity/public/cpp/identity_manager.h" namespace network { class SharedURLLoaderFactory;
diff --git a/google_apis/gaia/oauth2_access_token_manager.cc b/google_apis/gaia/oauth2_access_token_manager.cc index 3b932c0..f21e8d1 100644 --- a/google_apis/gaia/oauth2_access_token_manager.cc +++ b/google_apis/gaia/oauth2_access_token_manager.cc
@@ -681,9 +681,7 @@ OAuth2AccessTokenManager::Fetcher* fetcher) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Update the auth error state so auth errors are appropriately communicated - // to the user. - token_service_->UpdateAuthError(fetcher->GetAccountId(), fetcher->error()); + delegate_->OnAccessTokenFetched(fetcher->GetAccountId(), fetcher->error()); // Note |fetcher| is recorded in |pending_fetcher_| mapped from its // combination of client ID, account ID, and scope set. This is guaranteed as
diff --git a/google_apis/gaia/oauth2_access_token_manager.h b/google_apis/gaia/oauth2_access_token_manager.h index 36cdbed..6894c6d 100644 --- a/google_apis/gaia/oauth2_access_token_manager.h +++ b/google_apis/gaia/oauth2_access_token_manager.h
@@ -54,6 +54,10 @@ const std::string& client_id, const std::set<std::string>& scopes, const std::string& access_token) {} + + // Called when an access token is fetched. + virtual void OnAccessTokenFetched(const CoreAccountId& account_id, + const GoogleServiceAuthError& error) {} }; // Class representing a request that fetches an OAuth2 access token.
diff --git a/google_apis/gaia/oauth2_token_service.cc b/google_apis/gaia/oauth2_token_service.cc index b8ef24b..f5a3909 100644 --- a/google_apis/gaia/oauth2_token_service.cc +++ b/google_apis/gaia/oauth2_token_service.cc
@@ -88,6 +88,14 @@ access_token); } +void OAuth2TokenService::OnAccessTokenFetched( + const CoreAccountId& account_id, + const GoogleServiceAuthError& error) { + // Update the auth error state so auth errors are appropriately communicated + // to the user. + delegate_->UpdateAuthError(account_id, error); +} + bool OAuth2TokenService::HasRefreshToken( const CoreAccountId& account_id) const { return RefreshTokenIsAvailable(account_id); @@ -242,11 +250,6 @@ all_credentials_loaded_ = true; } -void OAuth2TokenService::UpdateAuthError(const CoreAccountId& account_id, - const GoogleServiceAuthError& error) { - delegate_->UpdateAuthError(account_id, error); -} - void OAuth2TokenService::RegisterTokenResponse( const std::string& client_id, const CoreAccountId& account_id,
diff --git a/google_apis/gaia/oauth2_token_service.h b/google_apis/gaia/oauth2_token_service.h index 14b3b042..c388985 100644 --- a/google_apis/gaia/oauth2_token_service.h +++ b/google_apis/gaia/oauth2_token_service.h
@@ -68,6 +68,7 @@ const CoreAccountId& account_id, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, OAuth2AccessTokenConsumer* consumer) override; + bool HasRefreshToken(const CoreAccountId& account_id) const override; bool FixRequestErrorIfPossible() override; scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() const override; @@ -75,7 +76,8 @@ const std::string& client_id, const std::set<std::string>& scopes, const std::string& access_token) override; - bool HasRefreshToken(const CoreAccountId& account_id) const override; + void OnAccessTokenFetched(const CoreAccountId& account_id, + const GoogleServiceAuthError& error) override; // Add or remove observers of this token service. void AddObserver(OAuth2TokenServiceObserver* observer); @@ -208,10 +210,6 @@ // OAuth2TokenServiceObserver: void OnRefreshTokensLoaded() override; - // Implement it in delegates if they want to report errors to the user. - void UpdateAuthError(const CoreAccountId& account_id, - const GoogleServiceAuthError& error); - // Add a new entry to the cache. // Subclasses can override if there are implementation-specific reasons // that an access token should ever not be cached.
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn index 1d2dc2e6..eeade498 100644 --- a/ios/chrome/app/BUILD.gn +++ b/ios/chrome/app/BUILD.gn
@@ -158,6 +158,7 @@ "//components/prefs", "//components/prefs/ios", "//components/proxy_config", + "//components/signin/public/identity_manager", "//components/suggestions", "//components/sync", "//components/ukm/ios:features", @@ -250,7 +251,6 @@ "//ios/web/public/webui", "//mojo/core/embedder", "//net", - "//services/identity/public/cpp:cpp", "//skia", "//ui/base", "//ui/gfx",
diff --git a/ios/chrome/app/DEPS b/ios/chrome/app/DEPS index 90ebb2b4..34dbe2a2 100644 --- a/ios/chrome/app/DEPS +++ b/ios/chrome/app/DEPS
@@ -28,7 +28,7 @@ "+ios/net", "+ios/public/provider/chrome", "+mojo/core/embedder/embedder.h", - "+services/identity/public/cpp/identity_manager.h", + "+components/signin/public/identity_manager/identity_manager.h", "+third_party/breakpad/breakpad/src/client/ios", # Strings and resources.
diff --git a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm index 8f6a2d6..01ac611 100644 --- a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm +++ b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
@@ -136,7 +136,6 @@ WebStateList* web_state_list = web_state_list_.get(); [[[mainTabModel stub] andReturnValue:OCMOCK_VALUE(web_state_list)] webStateList]; - StubBrowserInterfaceProvider* concreteProvider = [[StubBrowserInterfaceProvider alloc] init]; concreteProvider.mainInterface.tabModel = mainTabModel;
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index faad283..745107f 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -36,6 +36,7 @@ #include "components/prefs/ios/pref_observer_bridge.h" #include "components/prefs/pref_change_registrar.h" #include "components/search_engines/template_url_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/ukm/ios/features.h" #include "components/unified_consent/feature.h" #include "components/url_formatter/url_formatter.h" @@ -162,7 +163,6 @@ #include "ios/web/public/webui/web_ui_ios_controller_factory.h" #include "mojo/core/embedder/embedder.h" #import "net/base/mac/url_conversions.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS index 09a6955..c98d510 100644 --- a/ios/chrome/browser/DEPS +++ b/ios/chrome/browser/DEPS
@@ -89,6 +89,7 @@ "-components/signin/core/browser/profile_oauth2_token_service.h", "-components/signin/core/browser/profile_oauth2_token_service_delegate_chromeos.h", "-components/signin/core/browser/ubertoken_fetcher_impl.h", + "+components/signin/public", "+components/signin/ios/browser", "+components/ssl_errors",
diff --git a/ios/chrome/browser/autocomplete/BUILD.gn b/ios/chrome/browser/autocomplete/BUILD.gn index dc1e9ad..073fe82 100644 --- a/ios/chrome/browser/autocomplete/BUILD.gn +++ b/ios/chrome/browser/autocomplete/BUILD.gn
@@ -28,6 +28,7 @@ "//components/omnibox/browser", "//components/prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/sync", "//components/unified_consent", "//ios/chrome/browser", @@ -41,7 +42,6 @@ "//ios/chrome/browser/web_state_list", "//ios/public/provider/chrome/browser", "//ios/web", - "//services/identity/public/cpp", "//url", ] }
diff --git a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm index 71e5924..5ef2dbe 100644 --- a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm +++ b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
@@ -11,6 +11,7 @@ #include "components/language/core/browser/pref_names.h" #include "components/omnibox/browser/autocomplete_classifier.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "components/unified_consent/url_keyed_data_collection_consent_helper.h" #include "ios/chrome/browser/application_context.h" @@ -30,7 +31,6 @@ #import "ios/chrome/browser/tabs/tab_model_list.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/web/public/web_state/web_state.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/browser_state/BUILD.gn b/ios/chrome/browser/browser_state/BUILD.gn index b811fe821..2667d7e4 100644 --- a/ios/chrome/browser/browser_state/BUILD.gn +++ b/ios/chrome/browser/browser_state/BUILD.gn
@@ -85,6 +85,7 @@ "//components/proxy_config/ios", "//components/signin/core/browser", "//components/signin/ios/browser:active_state_manager", + "//components/signin/public/identity_manager", "//components/sync_preferences", "//components/user_prefs", "//google_apis", @@ -132,7 +133,6 @@ "//ios/web/net/cookies", "//net", "//net:extras", - "//services/identity/public/cpp", "//services/identity/public/mojom", ] allow_circular_includes_from = [
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc index 1d84c98a..989e6f93 100644 --- a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc +++ b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
@@ -19,6 +19,7 @@ #include "components/password_manager/core/browser/password_store.h" #include "components/prefs/pref_service.h" #include "components/signin/ios/browser/active_state_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/browser_state_info_cache.h" #include "ios/chrome/browser/browser_state/chrome_browser_state_impl.h" @@ -31,7 +32,6 @@ #include "ios/chrome/browser/signin/account_reconcilor_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/unified_consent/unified_consent_service_factory.h" -#include "services/identity/public/cpp/identity_manager.h" namespace {
diff --git a/ios/chrome/browser/ntp_snippets/BUILD.gn b/ios/chrome/browser/ntp_snippets/BUILD.gn index 928431f6..a69d5f0 100644 --- a/ios/chrome/browser/ntp_snippets/BUILD.gn +++ b/ios/chrome/browser/ntp_snippets/BUILD.gn
@@ -19,6 +19,7 @@ "//components/ntp_snippets", "//components/pref_registry", "//components/reading_list/core", + "//components/signin/public/identity_manager", "//components/version_info", "//google_apis", "//ios/chrome/app:tests_hook", @@ -35,6 +36,5 @@ "//ios/chrome/common", "//ios/web", "//net", - "//services/identity/public/cpp", ] }
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc index 0b4eea9..6c03c22d 100644 --- a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc +++ b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.cc
@@ -34,6 +34,7 @@ #include "components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h" #include "components/ntp_snippets/remote/remote_suggestions_status_service_impl.h" #include "components/ntp_snippets/user_classifier.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/version_info/version_info.h" #include "google_apis/google_api_keys.h" #include "ios/chrome/browser/application_context.h"
diff --git a/ios/chrome/browser/payments/BUILD.gn b/ios/chrome/browser/payments/BUILD.gn index 865ef2c..381f789 100644 --- a/ios/chrome/browser/payments/BUILD.gn +++ b/ios/chrome/browser/payments/BUILD.gn
@@ -41,6 +41,7 @@ "//components/prefs", "//components/security_state/core", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/strings:components_strings_grit", "//ios/chrome/browser", "//ios/chrome/browser/autofill", @@ -50,7 +51,6 @@ "//ios/web", "//ios/web/public/security", "//net", - "//services/identity/public/cpp:cpp", "//ui/base", "//url", ] @@ -118,12 +118,12 @@ "//components/payments/core:test_support", "//components/prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/signin", "//ios/chrome/browser/signin:test_support", "//ios/web", "//ios/web/public/test", "//ios/web/public/test/fakes", - "//services/identity/public/cpp:cpp", ] }
diff --git a/ios/chrome/browser/payments/payment_request.mm b/ios/chrome/browser/payments/payment_request.mm index ff623e01..03edef6 100644 --- a/ios/chrome/browser/payments/payment_request.mm +++ b/ios/chrome/browser/payments/payment_request.mm
@@ -27,6 +27,7 @@ #include "components/payments/core/payment_shipping_option.h" #include "components/payments/core/web_payment_request.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/autofill/address_normalizer_factory.h" #include "ios/chrome/browser/autofill/validation_rules_storage_factory.h" @@ -36,7 +37,6 @@ #import "ios/chrome/browser/payments/payment_request_util.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/web/public/web_state/web_state.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "third_party/libaddressinput/chromium/chrome_metadata_source.h" #include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h"
diff --git a/ios/chrome/browser/payments/payment_request_unittest_base.mm b/ios/chrome/browser/payments/payment_request_unittest_base.mm index 32d0544..fc9d7f3 100644 --- a/ios/chrome/browser/payments/payment_request_unittest_base.mm +++ b/ios/chrome/browser/payments/payment_request_unittest_base.mm
@@ -6,9 +6,9 @@ #include "components/payments/core/payment_prefs.h" #include "components/payments/core/payments_test_util.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/payments/payment_request_test_util.h" #include "ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.h" -#include "services/identity/public/cpp/identity_manager.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/prefs/BUILD.gn b/ios/chrome/browser/prefs/BUILD.gn index e2c496b..fa10ba8 100644 --- a/ios/chrome/browser/prefs/BUILD.gn +++ b/ios/chrome/browser/prefs/BUILD.gn
@@ -53,6 +53,7 @@ "//components/search_engines", "//components/sessions", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/strings", "//components/sync", "//components/sync_sessions", @@ -76,7 +77,6 @@ "//ios/chrome/browser/voice:prefs", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/user", - "//services/identity/public/cpp:cpp", "//ui/base", ] }
diff --git a/ios/chrome/browser/prefs/browser_prefs.mm b/ios/chrome/browser/prefs/browser_prefs.mm index c89bd0e..1152433 100644 --- a/ios/chrome/browser/prefs/browser_prefs.mm +++ b/ios/chrome/browser/prefs/browser_prefs.mm
@@ -36,6 +36,7 @@ #include "components/search_engines/template_url_prepopulate_data.h" #include "components/sessions/core/session_id_generator.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_locale_settings.h" #include "components/sync/base/sync_prefs.h" #include "components/sync_sessions/session_sync_prefs.h" @@ -60,7 +61,6 @@ #include "ios/chrome/browser/voice/voice_search_prefs_registration.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #include "ios/public/provider/chrome/browser/user/special_user_prefs.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/signin/BUILD.gn b/ios/chrome/browser/signin/BUILD.gn index 84cd425..9fccecb 100644 --- a/ios/chrome/browser/signin/BUILD.gn +++ b/ios/chrome/browser/signin/BUILD.gn
@@ -63,8 +63,10 @@ "//components/pref_registry", "//components/prefs", "//components/signin/core/browser", + "//components/signin/internal/identity_manager", # TODO(crbug.com/974198): remove once closed "//components/signin/ios/browser", "//components/signin/ios/browser:active_state_manager", + "//components/signin/public/identity_manager", "//components/sync", "//components/unified_consent", "//google_apis", @@ -82,8 +84,6 @@ "//ios/web/common", "//net", "//services/identity:lib", - "//services/identity/public/cpp", - "//services/identity/public/mojom", "//services/service_manager/public/mojom", "//url", ] @@ -120,12 +120,12 @@ "//components/signin/core/browser", "//components/signin/core/browser:internals_test_support", "//components/signin/ios/browser", + "//components/signin/public/identity_manager:test_support", "//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/sync", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/signin", - "//services/identity/public/cpp:test_support", ] } @@ -150,6 +150,8 @@ "//components/signin/core/browser:internals_test_support", "//components/signin/ios/browser", "//components/signin/ios/browser:test_support", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support", "//components/sync_preferences", "//components/sync_preferences:test_support", @@ -172,7 +174,6 @@ "//ios/web/public/test", "//ios/web/public/test/fakes", "//net:test_support", - "//services/identity/public/cpp:test_support", "//testing/gmock", "//testing/gtest", "//third_party/ocmock",
diff --git a/ios/chrome/browser/signin/DEPS b/ios/chrome/browser/signin/DEPS index 91fd789..9107af08 100644 --- a/ios/chrome/browser/signin/DEPS +++ b/ios/chrome/browser/signin/DEPS
@@ -9,6 +9,7 @@ "+components/signin/core/browser/primary_account_manager.h", "+components/signin/core/browser/primary_account_policy_manager.h", "+components/signin/core/browser/profile_oauth2_token_service.h", + "+components/signin/internal/identity_manager", # TODO(crbug.com/974198): remove once closed ], # The dependence on the Identity Service implementation should be used *only*
diff --git a/ios/chrome/browser/signin/account_reconcilor_factory.cc b/ios/chrome/browser/signin/account_reconcilor_factory.cc index 8e0dbdd..e15f441 100644 --- a/ios/chrome/browser/signin/account_reconcilor_factory.cc +++ b/ios/chrome/browser/signin/account_reconcilor_factory.cc
@@ -11,11 +11,11 @@ #include "components/keyed_service/ios/browser_state_dependency_manager.h" #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/mirror_account_reconcilor_delegate.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/signin/signin_client_factory.h" #include "ios/web/common/features.h" -#include "services/identity/public/cpp/identity_manager.h" namespace ios {
diff --git a/ios/chrome/browser/signin/authentication_service.h b/ios/chrome/browser/signin/authentication_service.h index b03fc85..d7d8b410 100644 --- a/ios/chrome/browser/signin/authentication_service.h +++ b/ios/chrome/browser/signin/authentication_service.h
@@ -14,8 +14,8 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" -#include "services/identity/public/cpp/identity_manager.h" namespace syncer { class SyncService;
diff --git a/ios/chrome/browser/signin/authentication_service.mm b/ios/chrome/browser/signin/authentication_service.mm index b049ba5c..c2b57819 100644 --- a/ios/chrome/browser/signin/authentication_service.mm +++ b/ios/chrome/browser/signin/authentication_service.mm
@@ -14,6 +14,7 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_info.h" +#import "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" #include "components/unified_consent/feature.h" @@ -28,7 +29,6 @@ #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" -#import "services/identity/public/cpp/primary_account_mutator.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/signin/authentication_service_unittest.mm b/ios/chrome/browser/signin/authentication_service_unittest.mm index 1b35bc92..804115e5 100644 --- a/ios/chrome/browser/signin/authentication_service_unittest.mm +++ b/ios/chrome/browser/signin/authentication_service_unittest.mm
@@ -11,6 +11,8 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_registry_simple.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#import "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/mock_sync_service.h" #include "components/sync_preferences/pref_service_mock_factory.h" #include "components/sync_preferences/pref_service_syncable.h" @@ -37,8 +39,6 @@ #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" -#import "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/signin/identity_manager_factory.cc b/ios/chrome/browser/signin/identity_manager_factory.cc index fde725a..924b5e4 100644 --- a/ios/chrome/browser/signin/identity_manager_factory.cc +++ b/ios/chrome/browser/signin/identity_manager_factory.cc
@@ -13,23 +13,24 @@ #include "components/pref_registry/pref_registry_syncable.h" #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/account_fetcher_service.h" +#include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/identity_manager_wrapper.h" #include "components/signin/core/browser/primary_account_manager.h" #include "components/signin/core/browser/primary_account_policy_manager_impl.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/signin/core/browser/signin_client.h" +#include "components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" +#include "components/signin/internal/identity_manager/primary_account_mutator_impl.h" #include "components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/device_accounts_provider_impl.h" #include "ios/chrome/browser/signin/identity_manager_factory_observer.h" #include "ios/chrome/browser/signin/signin_client_factory.h" -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider_impl.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator_impl.h" namespace {
diff --git a/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.h b/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.h index 303ece0..16d5658 100644 --- a/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.h +++ b/ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.h
@@ -7,8 +7,8 @@ #include <memory> +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" -#include "services/identity/public/cpp/identity_test_environment.h" // Adaptor that supports identity::IdentityTestEnvironment's usage in testing // contexts where the relevant fake objects must be injected via the
diff --git a/ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.cc b/ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.cc index 988cc72..a01e528a 100644 --- a/ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.cc +++ b/ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.cc
@@ -5,11 +5,11 @@ #include "ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.h" #include "components/signin/core/browser/signin_status_metrics_provider.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" -#include "services/identity/public/cpp/identity_manager.h" IOSChromeSigninStatusMetricsProviderDelegate:: IOSChromeSigninStatusMetricsProviderDelegate() {}
diff --git a/ios/chrome/browser/signin/signin_browser_state_info_updater.h b/ios/chrome/browser/signin/signin_browser_state_info_updater.h index 1dc1c1a..1571a5c 100644 --- a/ios/chrome/browser/signin/signin_browser_state_info_updater.h +++ b/ios/chrome/browser/signin/signin_browser_state_info_updater.h
@@ -11,7 +11,7 @@ #include "build/build_config.h" #include "components/keyed_service/core/keyed_service.h" #include "components/signin/core/browser/signin_error_controller.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" // This class listens to various signin events and updates the signin-related // fields of BrowserStateInfoCache.
diff --git a/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm b/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm index 80ffb48e..57db6a4 100644 --- a/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm +++ b/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm
@@ -16,6 +16,7 @@ #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "google_apis/gaia/google_service_auth_error.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/browser_state_info_cache.h" @@ -25,7 +26,6 @@ #include "ios/chrome/browser/signin/identity_test_environment_chrome_browser_state_adaptor.h" #include "ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_state_manager.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/suggestions/BUILD.gn b/ios/chrome/browser/suggestions/BUILD.gn index a3784b3..5ec806bdf 100644 --- a/ios/chrome/browser/suggestions/BUILD.gn +++ b/ios/chrome/browser/suggestions/BUILD.gn
@@ -12,12 +12,12 @@ "//base", "//components/browser_sync", "//components/keyed_service/ios", + "//components/signin/public/identity_manager", "//components/suggestions", "//ios/chrome/browser/browser_state", "//ios/chrome/browser/signin", "//ios/chrome/browser/sync", "//ios/web", "//net", - "//services/identity/public/cpp", ] }
diff --git a/ios/chrome/browser/suggestions/suggestions_service_factory.mm b/ios/chrome/browser/suggestions/suggestions_service_factory.mm index 2640aa1..9d107e10 100644 --- a/ios/chrome/browser/suggestions/suggestions_service_factory.mm +++ b/ios/chrome/browser/suggestions/suggestions_service_factory.mm
@@ -12,6 +12,7 @@ #include "base/task/post_task.h" #include "base/time/default_tick_clock.h" #include "components/keyed_service/ios/browser_state_dependency_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/suggestions/blacklist_store.h" #include "components/suggestions/suggestions_service_impl.h" #include "components/suggestions/suggestions_store.h" @@ -21,7 +22,6 @@ #include "ios/chrome/browser/sync/profile_sync_service_factory.h" #include "ios/web/public/browser_state.h" #include "ios/web/public/thread/web_thread.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm b/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm index c2d5468..614218ef 100644 --- a/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm
@@ -110,12 +110,12 @@ [NSMutableArray arrayWithCapacity:[_sendTabToSelfTargets count]]; for (NSString* key in _sendTabToSelfTargets) { - NSString* deviceId = _sendTabToSelfTargets[key]; + NSString* deviceID = _sendTabToSelfTargets[key]; // Retain |self| here since a |weakSelf| would be deallocated when // displaying the target device sheet, as the ActivitySheet will be gone. ProceduralBlock action = ^{ SendTabToSelfCommand* command = - [[SendTabToSelfCommand alloc] initWithTargetDeviceId:deviceId]; + [[SendTabToSelfCommand alloc] initWithTargetDeviceID:deviceID]; base::UmaHistogramEnumeration(kClickResultHistogramName, SendTabToSelfClickResult::kClickItem); [self.dispatcher sendTabToSelf:command];
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_legacy_coordinator.mm b/ios/chrome/browser/ui/activity_services/activity_service_legacy_coordinator.mm index 35fa6ee3..401c8e1b 100644 --- a/ios/chrome/browser/ui/activity_services/activity_service_legacy_coordinator.mm +++ b/ios/chrome/browser/ui/activity_services/activity_service_legacy_coordinator.mm
@@ -103,8 +103,8 @@ #pragma mark - Private Methods - (void)sharePageWithCanonicalURL:(const GURL&)canonicalURL { - ShareToData* data = activity_services::ShareToDataForTab( - [self.tabModel currentTab], canonicalURL); + ShareToData* data = activity_services::ShareToDataForWebState( + self.tabModel.webStateList->GetActiveWebState(), canonicalURL); if (!data) return;
diff --git a/ios/chrome/browser/ui/activity_services/share_to_data_builder.h b/ios/chrome/browser/ui/activity_services/share_to_data_builder.h index 448dea0..3d7dbb7 100644 --- a/ios/chrome/browser/ui/activity_services/share_to_data_builder.h +++ b/ios/chrome/browser/ui/activity_services/share_to_data_builder.h
@@ -10,13 +10,17 @@ @class ShareToData; @class Tab; +namespace web { +class WebState; +} namespace activity_services { -// Returns a ShareToData object using data from |tab|. |shareURL| is the URL to -// be shared with share extensions (excluding password managers). If |shareURL| -// is empty, the visible URL associated with |tab| will be used instead. |tab| -// must not be nil. Function may return nil. -ShareToData* ShareToDataForTab(Tab* tab, const GURL& shareURL); +// Returns a ShareToData object using data from |web_state|. |share_url| is the +// URL to be shared with share extensions (excluding password managers). If +// |share_url| is empty, the visible URL associated with |web_state| will be +// used instead. |web_state| must not be nil. Function may return nil. +ShareToData* ShareToDataForWebState(web::WebState* web_state, + const GURL& share_url); } // namespace activity_services
diff --git a/ios/chrome/browser/ui/activity_services/share_to_data_builder.mm b/ios/chrome/browser/ui/activity_services/share_to_data_builder.mm index 2dc2bc6..186f9ce 100644 --- a/ios/chrome/browser/ui/activity_services/share_to_data_builder.mm +++ b/ios/chrome/browser/ui/activity_services/share_to_data_builder.mm
@@ -7,7 +7,7 @@ #include "base/logging.h" #import "base/strings/sys_string_conversions.h" #import "ios/chrome/browser/find_in_page/find_tab_helper.h" -#include "ios/chrome/browser/tabs/tab.h" +#import "ios/chrome/browser/tabs/legacy_tab_helper.h" #import "ios/chrome/browser/tabs/tab_title_util.h" #include "ios/chrome/browser/ui/activity_services/chrome_activity_item_thumbnail_generator.h" #include "ios/chrome/browser/ui/activity_services/share_to_data.h" @@ -22,20 +22,19 @@ namespace activity_services { -ShareToData* ShareToDataForTab(Tab* tab, const GURL& shareURL) { - DCHECK(tab); +ShareToData* ShareToDataForWebState(web::WebState* web_state, + const GURL& share_url) { // For crash documented in crbug.com/503955, tab.url which is being passed // as a reference parameter caused a crash due to invalid address which - // which suggests that |tab| may be deallocated along the way. Check that - // tab is still valid by checking webState which would be deallocated if - // tab is being closed. - if (!tab.webState) + // suggests that tab may get closed along the way. Check that web_state + // is still valid. + if (!web_state) return nil; BOOL is_original_title = NO; - DCHECK(tab.webState->GetNavigationManager()); + DCHECK(web_state->GetNavigationManager()); web::NavigationItem* last_committed_item = - tab.webState->GetNavigationManager()->GetLastCommittedItem(); + web_state->GetNavigationManager()->GetLastCommittedItem(); if (last_committed_item) { // Do not use WebState::GetTitle() as it returns the display title, not the // original page title. @@ -44,31 +43,32 @@ // If the original page title exists, it is expected to match the Tab's // title. If this ever changes, then a decision has to be made on which // one should be used for sharing. - DCHECK([tab_util::GetTabTitle(tab.webState) + DCHECK([tab_util::GetTabTitle(web_state) isEqual:base::SysUTF16ToNSString(original_title)]); is_original_title = YES; } } - BOOL is_page_printable = [tab.webState->GetView() viewPrintFormatter] != nil; + BOOL is_page_printable = [web_state->GetView() viewPrintFormatter] != nil; + Tab* tab = LegacyTabHelper::GetTabForWebState(web_state); ThumbnailGeneratorBlock thumbnail_generator = activity_services::ThumbnailGeneratorForTab(tab); const GURL& finalURLToShare = - !shareURL.is_empty() ? shareURL : tab.webState->GetVisibleURL(); + !share_url.is_empty() ? share_url : web_state->GetVisibleURL(); web::NavigationItem* visibleItem = - tab.webState->GetNavigationManager()->GetVisibleItem(); + web_state->GetNavigationManager()->GetVisibleItem(); web::UserAgentType userAgent = web::UserAgentType::NONE; if (visibleItem) userAgent = visibleItem->GetUserAgentType(); - auto* helper = FindTabHelper::FromWebState(tab.webState); + FindTabHelper* helper = FindTabHelper::FromWebState(web_state); BOOL is_page_searchable = (helper && helper->CurrentPageSupportsFindInPage() && !helper->IsFindUIActive()); - NSString* tab_title = tab_util::GetTabTitle(tab.webState); + NSString* tab_title = tab_util::GetTabTitle(web_state); return [[ShareToData alloc] initWithShareURL:finalURLToShare - visibleURL:tab.webState->GetVisibleURL() + visibleURL:web_state->GetVisibleURL() title:tab_title isOriginalTitle:is_original_title isPagePrintable:is_page_printable
diff --git a/ios/chrome/browser/ui/activity_services/share_to_data_builder_unittest.mm b/ios/chrome/browser/ui/activity_services/share_to_data_builder_unittest.mm index f32bae3d..7c943f6 100644 --- a/ios/chrome/browser/ui/activity_services/share_to_data_builder_unittest.mm +++ b/ios/chrome/browser/ui/activity_services/share_to_data_builder_unittest.mm
@@ -13,7 +13,7 @@ #import "ios/chrome/browser/download/download_manager_tab_helper.h" #import "ios/chrome/browser/snapshots/fake_snapshot_generator_delegate.h" #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" -#import "ios/chrome/browser/tabs/tab.h" +#import "ios/chrome/browser/tabs/legacy_tab_helper.h" #import "ios/chrome/browser/ui/activity_services/share_to_data.h" #import "ios/testing/ocmock_complex_type_helper.h" #import "ios/web/public/test/fakes/test_navigation_manager.h" @@ -38,33 +38,6 @@ const char kExpectedTitle[] = "title"; } // namespace -@interface ShareToDataBuilderTestTabMock : OCMockComplexTypeHelper { - std::unique_ptr<web::TestWebState> _webState; -} - -@property(nonatomic, readonly) web::WebState* webState; - -@end - -@implementation ShareToDataBuilderTestTabMock - -- (web::WebState*)webState { - return _webState.get(); -} - -- (instancetype)initWithWebState:(std::unique_ptr<web::TestWebState>)webState { - id representedObject = [OCMockObject niceMockForClass:[Tab class]]; - if ((self = [super initWithRepresentedObject:representedObject])) { - _webState = std::move(webState); - } - return self; -} - -- (void)close { - _webState.reset(); -} - -@end class ShareToDataBuilderTest : public PlatformTest { public: @@ -78,47 +51,38 @@ navigation_manager->GetLastCommittedItem()->SetTitle( base::UTF8ToUTF16(kExpectedTitle)); - auto web_state = std::make_unique<web::TestWebState>(); - web_state->SetNavigationManager(std::move(navigation_manager)); - web_state->SetBrowserState(chrome_browser_state_.get()); - web_state->SetVisibleURL(GURL(kExpectedUrl)); + web_state_ = std::make_unique<web::TestWebState>(); + web_state_->SetNavigationManager(std::move(navigation_manager)); + web_state_->SetBrowserState(chrome_browser_state_.get()); + web_state_->SetVisibleURL(GURL(kExpectedUrl)); // Attach SnapshotTabHelper to allow snapshot generation. - SnapshotTabHelper::CreateForWebState(web_state.get(), + SnapshotTabHelper::CreateForWebState(web_state_.get(), [[NSUUID UUID] UUIDString]); delegate_ = [[FakeSnapshotGeneratorDelegate alloc] init]; - SnapshotTabHelper::FromWebState(web_state.get())->SetDelegate(delegate_); + SnapshotTabHelper::FromWebState(web_state_.get())->SetDelegate(delegate_); + LegacyTabHelper::CreateForWebState(web_state_.get()); - // Needed by the ShareToDataForTab to get the tab title. - DownloadManagerTabHelper::CreateForWebState(web_state.get(), + // Needed by the ShareToDataForWebState to get the tab title. + DownloadManagerTabHelper::CreateForWebState(web_state_.get(), /*delegate=*/nullptr); - web_state->SetTitle(base::UTF8ToUTF16(kExpectedTitle)); + web_state_->SetTitle(base::UTF8ToUTF16(kExpectedTitle)); // Add a fake view to the TestWebState. This will be used to capture the // snapshot. By default the WebState is not ready for taking snapshot. CGRect frame = {CGPointZero, CGSizeMake(300, 400)}; delegate_.view = [[UIView alloc] initWithFrame:frame]; delegate_.view.backgroundColor = [UIColor blueColor]; - - tab_ = [[ShareToDataBuilderTestTabMock alloc] - initWithWebState:std::move(web_state)]; } - void TearDown() override { - [tab_ close]; - tab_ = nil; - PlatformTest::TearDown(); - } - - Tab* tab() { return static_cast<Tab*>(tab_); } - - ShareToDataBuilderTestTabMock* tab_mock() { return tab_; } + web::WebState* web_state() { return web_state_.get(); } private: FakeSnapshotGeneratorDelegate* delegate_ = nil; web::TestWebThreadBundle thread_bundle_; std::unique_ptr<ios::ChromeBrowserState> chrome_browser_state_; - ShareToDataBuilderTestTabMock* tab_; + std::unique_ptr<web::TestWebState> web_state_; + DISALLOW_COPY_AND_ASSIGN(ShareToDataBuilderTest); }; @@ -126,8 +90,8 @@ // is a URL provided for share extensions. TEST_F(ShareToDataBuilderTest, TestSharePageCommandHandlingNpShareUrl) { const char* kExpectedShareUrl = "http://www.testurl.com/"; - ShareToData* actual_data = - activity_services::ShareToDataForTab(tab(), GURL(kExpectedShareUrl)); + ShareToData* actual_data = activity_services::ShareToDataForWebState( + web_state(), GURL(kExpectedShareUrl)); ASSERT_TRUE(actual_data); EXPECT_EQ(kExpectedShareUrl, actual_data.shareURL); @@ -146,7 +110,7 @@ // URL designated for share extensions is empty. TEST_F(ShareToDataBuilderTest, TestSharePageCommandHandlingNoShareUrl) { ShareToData* actual_data = - activity_services::ShareToDataForTab(tab(), GURL()); + activity_services::ShareToDataForWebState(web_state(), GURL()); ASSERT_TRUE(actual_data); EXPECT_EQ(kExpectedUrl, actual_data.shareURL); @@ -161,10 +125,8 @@ UIImageWithSizeAndSolidColor(size, [UIColor blueColor]))); } -// Verifies that |ShareToDataForTab()| returns nil if the Tab is in the process -// of being closed. +// Verifies that |ShareToDataForWebState()| returns nil if the WebState passed +// is nullptr. TEST_F(ShareToDataBuilderTest, TestReturnsNilWhenClosing) { - [tab_mock() close]; - - EXPECT_EQ(nil, activity_services::ShareToDataForTab(tab(), GURL())); + EXPECT_EQ(nil, activity_services::ShareToDataForWebState(nullptr, GURL())); }
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn index 4ca622b..5a9cd96 100644 --- a/ios/chrome/browser/ui/authentication/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -40,6 +40,8 @@ "//components/prefs", "//components/signin/core/browser", "//components/signin/ios/browser", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", "//components/strings", "//components/unified_consent", "//google_apis", @@ -65,8 +67,6 @@ "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/images", "//ios/public/provider/chrome/browser/signin", - "//services/identity/public/cpp", - "//services/identity/public/objc", "//ui/base", "//ui/gfx", "//url", @@ -114,6 +114,7 @@ "//components/consent_auditor:test_support", "//components/pref_registry", "//components/signin/core/browser:browser", + "//components/signin/public/identity_manager", "//components/sync_preferences", "//components/sync_preferences:test_support", "//components/unified_consent", @@ -138,7 +139,6 @@ "//ios/chrome/test:test_support", "//ios/public/provider/chrome/browser/signin:test_support", "//ios/web/public/test", - "//services/identity/public/cpp", "//testing/gtest", "//third_party/ocmock", "//ui/base", @@ -162,6 +162,7 @@ "unified_consent", "//components/signin/core/browser", "//components/signin/core/browser:shared", + "//components/signin/public/identity_manager", "//components/unified_consent", "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/browser_state", @@ -176,6 +177,5 @@ "//ios/public/provider/chrome/browser/signin:test_support", "//ios/testing/earl_grey:earl_grey_support", "//ios/third_party/earl_grey:earl_grey+link", - "//services/identity/public/cpp", ] }
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm b/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm index e368358..c12fdec9 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm +++ b/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm
@@ -15,6 +15,7 @@ #include "base/timer/timer.h" #include "components/prefs/pref_service.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/unified_consent/feature.h" #include "google_apis/gaia/gaia_auth_util.h" @@ -35,7 +36,6 @@ #include "ios/chrome/grit/ios_strings.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller_unittest.mm b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller_unittest.mm index 937c8d2..85f5f218 100644 --- a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller_unittest.mm
@@ -14,6 +14,7 @@ #include "components/consent_auditor/consent_auditor.h" #include "components/consent_auditor/fake_consent_auditor.h" #include "components/signin/core/browser/account_consistency_method.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/unified_consent/feature.h" #include "components/unified_consent/scoped_unified_consent.h" #include "components/version_info/version_info.h" @@ -30,7 +31,6 @@ #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h" #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" #import "testing/platform_test.h" #import "third_party/ocmock/OCMock/OCMock.h" #include "third_party/ocmock/gtest_support.h"
diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm index f6b7eeb..76aef036 100644 --- a/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm +++ b/ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.mm
@@ -5,6 +5,8 @@ #import "ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.h" #import "base/mac/foundation_util.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/authentication_service.h" #include "ios/chrome/browser/signin/authentication_service_factory.h" @@ -27,8 +29,6 @@ #import "ios/third_party/material_components_ios/src/components/Dialogs/src/MaterialDialogs.h" #import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h" #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" -#include "services/identity/public/cpp/identity_manager.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util_mac.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm index a3a7538..f4b92a41 100644 --- a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm +++ b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.mm
@@ -6,11 +6,11 @@ #include "base/strings/sys_string_conversions.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/test/app/chrome_test_util.h" #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h" -#include "services/identity/public/cpp/identity_manager.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/bookmarks/BUILD.gn b/ios/chrome/browser/ui/bookmarks/BUILD.gn index 69d1c27..795202f 100644 --- a/ios/chrome/browser/ui/bookmarks/BUILD.gn +++ b/ios/chrome/browser/ui/bookmarks/BUILD.gn
@@ -61,6 +61,8 @@ "//components/prefs", "//components/query_parser", "//components/signin/core/browser", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", "//components/strings", "//components/undo", "//components/url_formatter", @@ -102,8 +104,6 @@ "//ios/public/provider/chrome/browser/ui", "//ios/third_party/material_roboto_font_loader_ios", "//ios/web", - "//services/identity/public/cpp", - "//services/identity/public/objc", "//ui/base", "//ui/gfx", "//url",
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h index 945da25..7e00e3c 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h +++ b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h
@@ -18,6 +18,10 @@ class ChromeBrowserState; } +namespace web { +class WebState; +} + class WebStateList; // The BookmarkInteractionController abstracts the management of the various @@ -35,8 +39,8 @@ - (instancetype)init NS_UNAVAILABLE; // Presents the bookmark UI for a single bookmark. -- (void)presentBookmarkEditorForTab:(Tab*)tab - currentlyBookmarked:(BOOL)bookmarked; +- (void)presentBookmarkEditorForWebState:(web::WebState*)webState + currentlyBookmarked:(BOOL)bookmarked; // Presents the bookmarks browser modally. - (void)presentBookmarks;
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm index 5004398..78308da 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm
@@ -122,7 +122,7 @@ BookmarkTransitioningDelegate* bookmarkTransitioningDelegate; // Builds a controller and brings it on screen. -- (void)presentBookmarkEditorForBookmarkedTab:(Tab*)tab; +- (void)presentBookmarkEditorForBookmarkedURL:(const GURL&)URL; // Dismisses the bookmark browser. If |urlsToOpen| is not empty, then the user // has selected to navigate to those URLs with specified tab mode. @@ -181,37 +181,32 @@ _bookmarkEditor.delegate = nil; } -- (void)presentBookmarkEditorForBookmarkedTab:(Tab*)tab { - DCHECK(tab && tab.webState); - +- (void)presentBookmarkEditorForBookmarkedURL:(const GURL&)URL { const BookmarkNode* bookmark = - self.bookmarkModel->GetMostRecentlyAddedUserNodeForURL( - tab.webState->GetLastCommittedURL()); + self.bookmarkModel->GetMostRecentlyAddedUserNodeForURL(URL); if (!bookmark) return; [self presentEditorForNode:bookmark]; } -- (void)presentBookmarkEditorForTab:(Tab*)tab - currentlyBookmarked:(BOOL)bookmarked { +- (void)presentBookmarkEditorForWebState:(web::WebState*)webState + currentlyBookmarked:(BOOL)bookmarked { if (!self.bookmarkModel->loaded()) return; - if (!tab || !tab.webState) + if (!webState) return; + GURL bookmarkedURL = webState->GetLastCommittedURL(); + if (bookmarked) { - [self presentBookmarkEditorForBookmarkedTab:tab]; + [self presentBookmarkEditorForBookmarkedURL:bookmarkedURL]; } else { __weak BookmarkInteractionController* weakSelf = self; - __weak Tab* weakTab = tab; void (^editAction)() = ^{ - BookmarkInteractionController* strongSelf = weakSelf; - if (!strongSelf || !weakTab || !weakTab.webState) - return; - [strongSelf presentBookmarkEditorForBookmarkedTab:weakTab]; + [weakSelf presentBookmarkEditorForBookmarkedURL:bookmarkedURL]; }; - [self.mediator addBookmarkWithTitle:tab_util::GetTabTitle(tab.webState) - URL:tab.webState->GetLastCommittedURL() + [self.mediator addBookmarkWithTitle:tab_util::GetTabTitle(webState) + URL:bookmarkedURL editAction:editAction]; } }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm index b873697..553fbb9 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm
@@ -7,13 +7,13 @@ #include <memory> #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" #import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/objc/identity_manager_observer_bridge.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/bookmarks/synced_bookmarks_bridge.mm b/ios/chrome/browser/ui/bookmarks/synced_bookmarks_bridge.mm index 4454757..c4291f3f 100644 --- a/ios/chrome/browser/ui/bookmarks/synced_bookmarks_bridge.mm +++ b/ios/chrome/browser/ui/bookmarks/synced_bookmarks_bridge.mm
@@ -4,13 +4,13 @@ #import "ios/chrome/browser/ui/bookmarks/synced_bookmarks_bridge.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/driver/sync_service.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/sync/profile_sync_service_factory.h" #include "ios/chrome/browser/sync/sync_setup_service.h" #include "ios/chrome/browser/sync/sync_setup_service_factory.h" -#include "services/identity/public/cpp/identity_manager.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index e922ed9..63b2492 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -746,7 +746,7 @@ // Send Tab To Self // ---------------- // Sends the current tab to the target device. -- (void)sendTabToSelfTargetDeviceId:(NSString*)targetDeviceId; +- (void)sendTabToSelfTargetDeviceID:(NSString*)targetDeviceID; @end @@ -2895,8 +2895,8 @@ #pragma mark - Private Methods: Send Tab To Self -- (void)sendTabToSelfTargetDeviceId:(NSString*)targetDeviceId { - send_tab_to_self::CreateNewEntry(_browserState, targetDeviceId); +- (void)sendTabToSelfTargetDeviceID:(NSString*)targetDeviceID { + send_tab_to_self::CreateNewEntry(_browserState, targetDeviceID); [self.dispatcher triggerToolsMenuButtonAnimation]; @@ -4184,9 +4184,9 @@ - (void)bookmarkPage { [self initializeBookmarkInteractionController]; [_bookmarkInteractionController - presentBookmarkEditorForTab:self.tabModel.currentTab - currentlyBookmarked:[self.helper isWebStateBookmarkedByUser: - self.currentWebState]]; + presentBookmarkEditorForWebState:self.currentWebState + currentlyBookmarked:[self.helper isWebStateBookmarkedByUser: + self.currentWebState]]; } - (void)addToReadingList:(ReadingListAddCommand*)command { @@ -4329,6 +4329,7 @@ self.sendTabToSelfCoordinator = [[SendTabToSelfCoordinator alloc] initWithBaseViewController:self browserState:self.browserState]; + self.sendTabToSelfCoordinator.dispatcher = self.dispatcher; [self.sendTabToSelfCoordinator start]; } @@ -4390,7 +4391,7 @@ } - (void)sendTabToSelf:(SendTabToSelfCommand*)command { - [self sendTabToSelfTargetDeviceId:[command targetDeviceId]]; + [self sendTabToSelfTargetDeviceID:[command targetDeviceID]]; } #pragma mark - FindInPageResponseDelegate
diff --git a/ios/chrome/browser/ui/commands/send_tab_to_self_command.h b/ios/chrome/browser/ui/commands/send_tab_to_self_command.h index 6b5c2adf..497f4b4 100644 --- a/ios/chrome/browser/ui/commands/send_tab_to_self_command.h +++ b/ios/chrome/browser/ui/commands/send_tab_to_self_command.h
@@ -9,11 +9,11 @@ @interface SendTabToSelfCommand : NSObject -@property(copy, nonatomic, readonly) NSString* targetDeviceId; +@property(copy, nonatomic, readonly) NSString* targetDeviceID; - (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithTargetDeviceId:(NSString*)targetDeviceId +- (instancetype)initWithTargetDeviceID:(NSString*)targetDeviceID NS_DESIGNATED_INITIALIZER; @end
diff --git a/ios/chrome/browser/ui/commands/send_tab_to_self_command.mm b/ios/chrome/browser/ui/commands/send_tab_to_self_command.mm index cb4d210..6929c38 100644 --- a/ios/chrome/browser/ui/commands/send_tab_to_self_command.mm +++ b/ios/chrome/browser/ui/commands/send_tab_to_self_command.mm
@@ -10,11 +10,11 @@ @implementation SendTabToSelfCommand -@synthesize targetDeviceId = _targetDeviceId; +@synthesize targetDeviceID = _targetDeviceID; -- (instancetype)initWithTargetDeviceId:(NSString*)targetDeviceId { +- (instancetype)initWithTargetDeviceID:(NSString*)targetDeviceID { if (self = [super init]) { - _targetDeviceId = [targetDeviceId copy]; + _targetDeviceID = [targetDeviceID copy]; } return self; }
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index 477063e..97130a3 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -34,6 +34,8 @@ "//components/ntp_tiles", "//components/reading_list/core", "//components/reading_list/ios:ios", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser", @@ -77,7 +79,6 @@ "//ios/public/provider/chrome/browser/signin", "//ios/public/provider/chrome/browser/ui", "//ios/public/provider/chrome/browser/voice", - "//services/identity/public/objc", "//ui/base", "//ui/strings", ] @@ -195,6 +196,7 @@ ":content_suggestions_ui_util", "//base", "//components/ntp_snippets", + "//components/signin/public/identity_manager", "//ios/chrome/browser", "//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/ntp_snippets", @@ -218,7 +220,6 @@ "//ios/public/provider/chrome/browser/ui", "//ios/web/public/test", "//ios/web/public/test/fakes", - "//services/identity/public/objc", "//testing/gtest", "//testing/gtest", "//third_party/ocmock",
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm index 7de59d3..3ee96983 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm
@@ -11,6 +11,7 @@ #include "base/metrics/user_metrics_action.h" #include "components/ntp_snippets/content_suggestions_service.h" #include "components/ntp_snippets/features.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/chrome_url_constants.h" #import "ios/chrome/browser/metrics/new_tab_page_uma.h" @@ -57,7 +58,6 @@ #include "ios/web/public/referrer.h" #import "ios/web/public/web_state/web_state.h" #import "ios/web/public/web_state/web_state_observer_bridge.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm index 38d66e3..5f487128 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator_unittest.mm
@@ -6,6 +6,7 @@ #include <memory> +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h" @@ -33,7 +34,6 @@ #import "ios/public/provider/chrome/browser/ui/logo_vendor.h" #import "ios/web/public/test/fakes/test_web_state.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" #import "testing/platform_test.h" #import "third_party/ocmock/OCMock/OCMock.h" #include "third_party/ocmock/gtest_support.h"
diff --git a/ios/chrome/browser/ui/first_run/BUILD.gn b/ios/chrome/browser/ui/first_run/BUILD.gn index 791019e..deee874 100644 --- a/ios/chrome/browser/ui/first_run/BUILD.gn +++ b/ios/chrome/browser/ui/first_run/BUILD.gn
@@ -27,6 +27,7 @@ "//components/metrics", "//components/prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//components/unified_consent", "//ios/chrome/app/strings", "//ios/chrome/browser", @@ -53,7 +54,6 @@ "//ios/third_party/material_components_ios", "//ios/third_party/material_roboto_font_loader_ios", "//ios/web", - "//services/identity/public/cpp:cpp", "//ui/base", "//ui/gfx", "//url",
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.mm b/ios/chrome/browser/ui/first_run/first_run_util.mm index 06b053e5..51b823f 100644 --- a/ios/chrome/browser/ui/first_run/first_run_util.mm +++ b/ios/chrome/browser/ui/first_run/first_run_util.mm
@@ -11,6 +11,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/task/post_task.h" #include "base/time/time.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/crash_report/breakpad_helper.h" #include "ios/chrome/browser/first_run/first_run.h" @@ -23,7 +24,6 @@ #include "ios/chrome/browser/ui/util/ui_util.h" #include "ios/web/public/thread/web_thread.h" #import "ios/web/public/web_state/web_state.h" -#include "services/identity/public/cpp/identity_manager.h" #import "ui/gfx/ios/NSString+CrStringDrawing.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm index bd12175..c432174 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm +++ b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
@@ -62,7 +62,7 @@ const char* const kOmniboxQueryLocationAuthorizationStatusHistogram = "Omnibox.QueryIosLocationAuthorizationStatus"; // The number of possible CLAuthorizationStatus values to report. -const int kLocationAuthorizationStatusCount = 4; +const int kLocationAuthorizationStatusCount = 5; } // namespace @interface LocationBarCoordinator ()<LoadQueryCommands,
diff --git a/ios/chrome/browser/ui/payments/BUILD.gn b/ios/chrome/browser/ui/payments/BUILD.gn index e4cf8e75..5b687c7 100644 --- a/ios/chrome/browser/ui/payments/BUILD.gn +++ b/ios/chrome/browser/ui/payments/BUILD.gn
@@ -224,6 +224,8 @@ "//components/payments/mojom", "//components/prefs:prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager:test_support", "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser", @@ -248,8 +250,6 @@ "//ios/web/public/deprecated:test_doubles", "//ios/web/public/js_messaging", "//ios/web/public/test", - "//services/identity/public/cpp:cpp", - "//services/identity/public/cpp:test_support", "//testing/gmock", "//testing/gtest", "//third_party/libaddressinput:strings_grit",
diff --git a/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm b/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm index c5cf4b9..bef497ee 100644 --- a/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm +++ b/ios/chrome/browser/ui/payments/payment_request_mediator_unittest.mm
@@ -16,6 +16,8 @@ #include "components/payments/core/payment_shipping_option.h" #include "components/payments/core/strings_util.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/strings/grit/components_strings.h" #import "ios/chrome/browser/payments/payment_request_unittest_base.h" #include "ios/chrome/browser/payments/payment_request_util.h" @@ -25,8 +27,6 @@ #import "ios/chrome/browser/ui/payments/cells/payment_method_item.h" #import "ios/chrome/browser/ui/payments/cells/payments_text_item.h" #import "ios/chrome/browser/ui/payments/cells/price_item.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/platform_test.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/recent_tabs/BUILD.gn b/ios/chrome/browser/ui/recent_tabs/BUILD.gn index aa5c206..8d37336 100644 --- a/ios/chrome/browser/ui/recent_tabs/BUILD.gn +++ b/ios/chrome/browser/ui/recent_tabs/BUILD.gn
@@ -19,6 +19,7 @@ "resources:show_history", "//base", "//components/sessions", + "//components/signin/public/identity_manager", "//components/sync", "//ios/chrome/app/strings", "//ios/chrome/browser/browser_state", @@ -32,7 +33,6 @@ "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/util", "//ios/chrome/browser/url_loading", - "//services/identity/public/cpp", "//ui/base", ] public_deps = [ @@ -99,6 +99,8 @@ ":recent_tabs_ui", "//base", "//components/browser_sync", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support_model", "//components/sync_sessions", "//components/sync_user_events", @@ -109,8 +111,6 @@ "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/test:test_support", "//ios/web/public/test", - "//services/identity/public/cpp", - "//services/identity/public/cpp:test_support", "//testing/gtest", "//third_party/ocmock", ]
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm index d73328a..c95418c 100644 --- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm
@@ -9,6 +9,9 @@ #include <memory> #include "base/bind.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/driver/sync_service.h" #include "components/sync/model/fake_model_type_controller_delegate.h" #include "components/sync_sessions/open_tabs_ui_delegate.h" @@ -24,9 +27,6 @@ #include "ios/chrome/test/block_cleanup_test.h" #include "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/identity_test_environment.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #include "testing/gtest/include/gtest/gtest.h" #import "third_party/ocmock/OCMock/OCMock.h" #import "third_party/ocmock/gtest_support.h"
diff --git a/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h b/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h index 56e96a1..67726ed 100644 --- a/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h +++ b/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h
@@ -11,7 +11,7 @@ #include "base/callback_list.h" #include "base/macros.h" -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" namespace ios { class ChromeBrowserState;
diff --git a/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.mm b/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.mm index 04c3b04..82c3bfa 100644 --- a/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.mm +++ b/ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.mm
@@ -5,11 +5,11 @@ #import "ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h" #include "base/bind.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync_sessions/session_sync_service.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/sync/session_sync_service_factory.h" -#include "services/identity/public/cpp/identity_manager.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/send_tab_to_self/BUILD.gn b/ios/chrome/browser/ui/send_tab_to_self/BUILD.gn index 4b2eb24..2742829 100644 --- a/ios/chrome/browser/ui/send_tab_to_self/BUILD.gn +++ b/ios/chrome/browser/ui/send_tab_to_self/BUILD.gn
@@ -44,6 +44,7 @@ "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view:styler", "//ios/chrome/browser/ui/table_view/cells", + "//ios/chrome/common/colors", "//ui/base", ] }
diff --git a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.h b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.h index cdf39e48..911dbc22 100644 --- a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.h +++ b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.h
@@ -7,11 +7,16 @@ #import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h" +@protocol BrowserCommands; + // Displays the send tab to self UI for all device form factors. Will show a // modal dialog popup on both platforms. Once this coordinator is stopped, the // underlying dialog is dismissed. @interface SendTabToSelfCoordinator : ChromeCoordinator +// Dispatcher +@property(nonatomic, weak) id<BrowserCommands> dispatcher; + @end #endif // IOS_CHROME_BROWSER_UI_SEND_TAB_TO_SELF_SEND_TAB_TO_SELF_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.mm b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.mm index 842319d8..c19f2d5 100644 --- a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.mm +++ b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_coordinator.mm
@@ -101,10 +101,11 @@ completion:completion]; } -- (void)sendTabToTargetDeviceCacheGUID:(NSString*)cacheGuid { - // TODO(crbug.com/970284) Add a dispatcher property in the .h file of this - // coordinator, and set it to BVC's self.dispatcher. +- (void)sendTabToTargetDeviceCacheGUID:(NSString*)cacheGUID { + SendTabToSelfCommand* command = + [[SendTabToSelfCommand alloc] initWithTargetDeviceID:cacheGUID]; + [self.dispatcher sendTabToSelf:command]; // TODO(crbug.com/970284) log histogram of send event. }
diff --git a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm index 65aa1c3..52e2e765 100644 --- a/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm +++ b/ios/chrome/browser/ui/send_tab_to_self/send_tab_to_self_table_view_controller.mm
@@ -19,6 +19,8 @@ #include "ios/chrome/browser/ui/table_view/cells/table_view_url_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" +#import "ios/chrome/common/colors/UIColor+cr_semantic_colors.h" +#import "ios/chrome/common/colors/semantic_color_names.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -27,8 +29,6 @@ #endif namespace { -// Text color for the Cancel button. -const CGFloat kSendButtonBackgroundColorBlue = 0x1A73E8; // Accessibility identifier of the Modal Cancel Button. NSString* const kSendTabToSelfModalCancelButton = @@ -84,8 +84,8 @@ - (void)viewDidLoad { [super viewDidLoad]; - self.view.backgroundColor = [UIColor whiteColor]; - self.styler.cellBackgroundColor = [UIColor whiteColor]; + self.view.backgroundColor = UIColor.cr_systemBackgroundColor; + self.styler.cellBackgroundColor = UIColor.cr_systemBackgroundColor; self.tableView.sectionHeaderHeight = 0; self.tableView.sectionFooterHeight = 0; [self.tableView @@ -158,9 +158,7 @@ self.sendToDevice.buttonText = l10n_util::GetNSString(IDS_IOS_SEND_TAB_TO_SELF_TARGET_DEVICE_ACTION); self.sendToDevice.buttonTextColor = [UIColor whiteColor]; - ; - self.sendToDevice.buttonBackgroundColor = - UIColorFromRGB(kSendButtonBackgroundColorBlue); + self.sendToDevice.buttonBackgroundColor = [UIColor colorNamed:kTintColor]; self.sendToDevice.boldButtonText = NO; self.sendToDevice.accessibilityIdentifier = kSendTabToSelfModalSendButton; [model addItem:self.sendToDevice
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn index 94fd0fb..e3f18e7 100644 --- a/ios/chrome/browser/ui/settings/BUILD.gn +++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -116,6 +116,8 @@ "//components/resources", "//components/search_engines", "//components/signin/core/browser", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", "//components/strings", "//components/translate/core/browser", "//components/translate/core/common", @@ -188,8 +190,6 @@ "//ios/third_party/material_components_ios", "//ios/third_party/material_roboto_font_loader_ios", "//net", - "//services/identity/public/cpp", - "//services/identity/public/objc", "//ui/base", "//url", ] @@ -318,7 +318,6 @@ "//ios/web/public/test", "//net", "//net:test_support", - "//services/identity/public/cpp:test_support", "//testing/gmock", "//testing/gtest", "//third_party/ocmock",
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/BUILD.gn b/ios/chrome/browser/ui/settings/clear_browsing_data/BUILD.gn index 1fe6f1de..3f81334 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/BUILD.gn +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/BUILD.gn
@@ -30,6 +30,7 @@ "//components/feature_engagement/public", "//components/history/core/browser", "//components/prefs/ios", + "//components/signin/public/identity_manager", "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser", @@ -55,9 +56,9 @@ "//ios/chrome/browser/ui/table_view:styler", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/common", + "//ios/chrome/common/colors", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/images", - "//services/identity/public/cpp", "//ui/base", ] } @@ -78,6 +79,7 @@ "//components/browsing_data/core", "//components/pref_registry", "//components/prefs", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support", "//components/sync_preferences", "//components/sync_preferences:test_support", @@ -97,7 +99,6 @@ "//ios/chrome/browser/ui/table_view:test_support", "//ios/chrome/common", "//ios/web/public/test", - "//services/identity/public/cpp:test_support", "//testing/gtest", "//third_party/ocmock", "//ui/base",
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_collection_view_controller_unittest.mm index 97d72af..834ac58a 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_collection_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_collection_view_controller_unittest.mm
@@ -13,6 +13,7 @@ #include "components/browsing_data/core/browsing_data_utils.h" #include "components/browsing_data/core/pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/test_sync_service.h" #include "components/sync_preferences/pref_service_mock_factory.h" #include "components/sync_preferences/pref_service_syncable.h" @@ -32,7 +33,6 @@ #import "ios/chrome/common/string_util.h" #include "ios/chrome/grit/ios_strings.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" #import "testing/gtest_mac.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm index 0a7f4885..9fbea8d 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
@@ -17,6 +17,7 @@ #include "components/prefs/ios/pref_observer_bridge.h" #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "ios/chrome/browser/application_context.h" @@ -57,7 +58,6 @@ #include "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/public/provider/chrome/browser/images/branded_image_provider.h" -#include "services/identity/public/cpp/identity_manager.h" #include "ui/base/l10n/l10n_util_mac.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm index 19c20fa..f5d912f 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm
@@ -7,6 +7,7 @@ #include "base/bind.h" #include "components/browsing_data/core/pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/test_sync_service.h" #include "components/sync_preferences/pref_service_mock_factory.h" #include "components/sync_preferences/pref_service_syncable.h" @@ -24,7 +25,6 @@ #import "ios/chrome/browser/ui/table_view/table_view_model.h" #include "ios/chrome/grit/ios_strings.h" #include "ios/web/public/test/test_web_thread_bundle.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" #import "testing/gtest_mac.h" #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_table_view_controller.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_table_view_controller.mm index 2a3ce89d..929464a 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_table_view_controller.mm
@@ -28,6 +28,7 @@ #import "ios/chrome/browser/ui/table_view/cells/table_view_text_button_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h" +#import "ios/chrome/common/colors/UIColor+cr_semantic_colors.h" #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -129,7 +130,8 @@ if (IsNewClearBrowsingDataUIEnabled()) { self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; } - self.styler.tableViewBackgroundColor = UIColor.whiteColor; + self.styler.cellBackgroundColor = UIColor.cr_systemBackgroundColor; + self.styler.tableViewBackgroundColor = UIColor.cr_systemBackgroundColor; self.tableView.accessibilityIdentifier = kClearBrowsingDataViewAccessibilityIdentifier; self.tableView.backgroundColor = self.styler.tableViewBackgroundColor;
diff --git a/ios/chrome/browser/ui/settings/google_services/BUILD.gn b/ios/chrome/browser/ui/settings/google_services/BUILD.gn index 71c6f02a..fd996a3 100644 --- a/ios/chrome/browser/ui/settings/google_services/BUILD.gn +++ b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
@@ -42,6 +42,8 @@ "//components/google/core/common", "//components/metrics", "//components/prefs", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", "//components/strings", "//components/sync", "//components/ukm/ios:features", @@ -70,7 +72,6 @@ "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/images", "//ios/public/provider/chrome/browser/signin", - "//services/identity/public/objc", "//ui/base", ] allow_circular_includes_from =
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm index 15b3f1a..17d5368 100644 --- a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
@@ -8,6 +8,8 @@ #include "base/metrics/user_metrics.h" #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" +#import "components/signin/public/identity_manager/identity_manager.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "components/unified_consent/feature.h" @@ -43,8 +45,6 @@ #import "ios/public/provider/chrome/browser/signin/chrome_identity_browser_opener.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" #import "net/base/mac/url_conversions.h" -#import "services/identity/public/cpp/identity_manager.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util_mac.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm index 41ad9e3..ca593143f 100644 --- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm +++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
@@ -8,6 +8,7 @@ #include "base/mac/foundation_util.h" #include "components/metrics/metrics_pref_names.h" #include "components/prefs/pref_service.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/sync/driver/sync_service.h" #include "components/ukm/ios/features.h" #include "components/unified_consent/pref_names.h" @@ -32,7 +33,6 @@ #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm index 0998b9e9..0830a407 100644 --- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -17,6 +17,8 @@ #include "components/prefs/pref_service.h" #include "components/search_engines/util.h" #include "components/signin/core/browser/signin_metrics.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "components/unified_consent/feature.h" @@ -76,8 +78,6 @@ #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" #import "ios/public/provider/chrome/browser/signin/signin_resources_provider.h" #include "ios/public/provider/chrome/browser/voice/voice_search_prefs.h" -#include "services/identity/public/cpp/identity_manager.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util_mac.h" #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/settings/sync/BUILD.gn b/ios/chrome/browser/ui/settings/sync/BUILD.gn index 5f17b99..94d8f90 100644 --- a/ios/chrome/browser/ui/settings/sync/BUILD.gn +++ b/ios/chrome/browser/ui/settings/sync/BUILD.gn
@@ -20,6 +20,7 @@ "//components/browser_sync", "//components/google/core/common", "//components/prefs", + "//components/signin/public/identity_manager/objc", "//components/strings", "//components/sync", "//components/unified_consent", @@ -45,9 +46,9 @@ "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/browser/ui/util", + "//ios/chrome/common/colors", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/signin", - "//services/identity/public/objc", "//ui/base", "//url", ]
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm index 039e03c..ef4a355f 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm
@@ -10,6 +10,7 @@ #include "base/mac/foundation_util.h" #include "base/strings/sys_string_conversions.h" #include "components/google/core/common/google_util.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/strings/grit/components_strings.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" @@ -33,7 +34,6 @@ #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util_mac.h" #include "url/gurl.h"
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm index bfff3d3..fac5e35 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm
@@ -29,6 +29,7 @@ #import "ios/chrome/browser/ui/table_view/table_view_model.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" +#import "ios/chrome/common/colors/UIColor+cr_semantic_colors.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util_mac.h" #include "url/gurl.h" @@ -215,8 +216,7 @@ item.accessoryType = checked ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; item.textColor = - enabled ? [UIColor blackColor] - : UIColorFromRGB(kTableViewSecondaryLabelLightGrayTextColor); + enabled ? UIColor.cr_labelColor : UIColor.cr_secondaryLabelColor; item.enabled = enabled; return item; }
diff --git a/ios/chrome/browser/ui/settings/sync/sync_settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_settings_table_view_controller.mm index 62d4de5..f775f55 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_settings_table_view_controller.mm
@@ -11,6 +11,7 @@ #include "components/autofill/core/common/autofill_prefs.h" #include "components/google/core/common/google_util.h" #include "components/prefs/pref_service.h" +#import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/strings/grit/components_strings.h" #include "components/sync/base/model_type.h" #include "components/sync/driver/sync_service.h" @@ -50,7 +51,6 @@ #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" -#import "services/identity/public/objc/identity_manager_observer_bridge.h" #include "ui/base/l10n/l10n_util_mac.h" #include "url/gurl.h"
diff --git a/ios/chrome/browser/ui/side_swipe/card_side_swipe_view.mm b/ios/chrome/browser/ui/side_swipe/card_side_swipe_view.mm index daf2e48..84127db 100644 --- a/ios/chrome/browser/ui/side_swipe/card_side_swipe_view.mm +++ b/ios/chrome/browser/ui/side_swipe/card_side_swipe_view.mm
@@ -11,7 +11,6 @@ #include "base/metrics/user_metrics_action.h" #include "base/strings/sys_string_conversions.h" #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" -#import "ios/chrome/browser/tabs/tab.h" #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/ui/side_swipe/side_swipe_gesture_recognizer.h" #import "ios/chrome/browser/ui/side_swipe/side_swipe_util.h" @@ -22,8 +21,10 @@ #include "ios/chrome/browser/ui/util/ui_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/web/page_placeholder_tab_helper.h" +#import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/common/ui_util/constraints_ui_util.h" #include "ios/chrome/grit/ios_theme_resources.h" +#import "ios/web/public/web_state/web_state.h" #include "url/gurl.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -52,8 +53,8 @@ - (void)finishPan; // Is the current card is an edge card based on swipe direction. - (BOOL)isEdgeSwipe; -// Initialize card based on model_ index. -- (void)setupCard:(SwipeView*)card withIndex:(NSInteger)index; +// Initialize card based on model_'s webstatelist index. +- (void)setupCard:(SwipeView*)card withIndex:(int)index; // Build a |kResizeFactor| sized greyscaled version of |image|. - (UIImage*)smallGreyImage:(UIImage*)image; @@ -137,11 +138,11 @@ return CGRectGetWidth(self.bounds); } -// Set up left and right card views depending on current tab and swipe +// Set up left and right card views depending on current WebState and swipe // direction. - (void)updateViewsForDirection:(UISwipeGestureRecognizerDirection)direction { _direction = direction; - NSUInteger currentIndex = [model_ indexOfTab:model_.currentTab]; + int currentIndex = model_.webStateList->active_index(); CGFloat offset = UseRTLLayout() ? -1 : 1; if (_direction == UISwipeGestureRecognizerDirectionRight) { [self setupCard:_rightCard withIndex:currentIndex]; @@ -164,20 +165,20 @@ return greyImage; } -// Create card view based on TabModel index. -- (void)setupCard:(SwipeView*)card withIndex:(NSInteger)index { +// Create card view based on TabModel's WebStateList index. +- (void)setupCard:(SwipeView*)card withIndex:(int)index { if (index < 0 || index >= (NSInteger)[model_ count]) { [card setHidden:YES]; return; } [card setHidden:NO]; - Tab* tab = [model_ tabAtIndex:index]; + web::WebState* webState = model_.webStateList->GetWebStateAt(index); UIImage* topToolbarSnapshot = [self.topToolbarSnapshotProvider - toolbarSideSwipeSnapshotForWebState:tab.webState]; + toolbarSideSwipeSnapshotForWebState:webState]; [card setTopToolbarImage:topToolbarSnapshot]; UIImage* bottomToolbarSnapshot = [self.bottomToolbarSnapshotProvider - toolbarSideSwipeSnapshotForWebState:tab.webState]; + toolbarSideSwipeSnapshotForWebState:webState]; [card setBottomToolbarImage:bottomToolbarSnapshot]; // Converting snapshotted images to grey takes too much time for single core @@ -185,9 +186,9 @@ // grey image for multi core devices. dispatch_queue_t priorityQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); - SnapshotTabHelper::FromWebState(tab.webState) - ->RetrieveColorSnapshot(^(UIImage* image) { - if (PagePlaceholderTabHelper::FromWebState(tab.webState) + SnapshotTabHelper::FromWebState(webState)->RetrieveColorSnapshot( + ^(UIImage* image) { + if (PagePlaceholderTabHelper::FromWebState(webState) ->will_add_placeholder_for_next_navigation() && !ios::device_util::IsSingleCoreDevice()) { [card setImage:nil]; @@ -259,24 +260,26 @@ } - (BOOL)isEdgeSwipe { - NSUInteger currentIndex = [model_ indexOfTab:model_.currentTab]; + int currentIndex = model_.webStateList->active_index(); return (IsSwipingBack(_direction) && currentIndex == 0) || - (IsSwipingForward(_direction) && currentIndex == [model_ count] - 1); + (IsSwipingForward(_direction) && + currentIndex == model_.webStateList->count() - 1); } -// Update the current tab and animate the proper card view if the +// Update the current WebState and animate the proper card view if the // |currentPoint_| is past the center of |bounds|. - (void)finishPan { - NSUInteger currentIndex = [model_ indexOfTab:model_.currentTab]; - // Something happened and now currentTab is gone. End card side swipe and let - // BVC show no tabs UI. - if (currentIndex == NSNotFound) + WebStateList* webStateList = model_.webStateList; + int currentIndex = webStateList->active_index(); + // Something happened and now there is not active WebState. End card side let + // swipe and BVC show no tabs UI. + if (currentIndex == WebStateList::kInvalidIndex) return [_delegate sideSwipeViewDismissAnimationDidEnd:self]; CGFloat width = [self cardWidth]; CGAffineTransform rightTransform, leftTransform; SwipeView* dominantCard; - Tab* destinationTab = model_.currentTab; + int destinationWebStateIndex = currentIndex; CGFloat offset = UseRTLLayout() ? -1 : 1; if (_direction == UISwipeGestureRecognizerDirectionRight) { // If swipe is right and |currentPoint_.x| is over the first 1/3, move left. @@ -284,7 +287,7 @@ rightTransform = CGAffineTransformMakeTranslation(width + kCardHorizontalSpacing, 0); leftTransform = CGAffineTransformIdentity; - destinationTab = [model_ tabAtIndex:currentIndex - offset]; + destinationWebStateIndex = currentIndex - offset; dominantCard = _leftCard; base::RecordAction(UserMetricsAction("MobileStackSwipeCompleted")); } else { @@ -300,7 +303,7 @@ leftTransform = CGAffineTransformMakeTranslation(-width - kCardHorizontalSpacing, 0); rightTransform = CGAffineTransformIdentity; - destinationTab = [model_ tabAtIndex:currentIndex + offset]; + destinationWebStateIndex = currentIndex + offset; dominantCard = _rightCard; base::RecordAction(UserMetricsAction("MobileStackSwipeCompleted")); } else { @@ -312,10 +315,10 @@ } } - if (destinationTab != model_.currentTab) { - // The old tab is now hidden. The new tab will be inserted once the - // animation is complete. - model_.currentTab.webState->WasHidden(); + if (destinationWebStateIndex != currentIndex) { + // The old webstate is now hidden. The new WebState will be inserted once + // the animation is complete. + webStateList->GetActiveWebState()->WasHidden(); } // Make sure the dominant card animates on top. @@ -334,12 +337,12 @@ [_leftCard setBottomToolbarImage:nil]; [_rightCard setBottomToolbarImage:nil]; [_delegate sideSwipeViewDismissAnimationDidEnd:self]; - // Changing the model even when the tab is the same at the end of the - // animation allows the UI to recover. This call must come last, - // because setCurrentTab triggers behavior that depends on the view + // Changing the model even when the webstate is the same at the end of + // the animation allows the UI to recover. This call must come last, + // because ActivateWebStateAt triggers behavior that depends on the view // hierarchy being reassembled, which happens in // sideSwipeViewDismissAnimationDidEnd. - [model_ setCurrentTab:destinationTab]; + webStateList->ActivateWebStateAt(destinationWebStateIndex); }]; }
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 50f6203..1baa1e9 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
@@ -13,7 +13,6 @@ #import "ios/chrome/browser/snapshots/snapshot_cache.h" #import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" -#import "ios/chrome/browser/tabs/tab.h" #import "ios/chrome/browser/ui/fullscreen/animated_scoped_fullscreen_disabler.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_factory.h" #import "ios/chrome/browser/ui/fullscreen/scoped_fullscreen_disabler.h" @@ -80,7 +79,7 @@ SideSwipeGestureRecognizer* panGestureRecognizer_; // Used in iPad side swipe gesture, tracks the starting tab index. - NSUInteger startingTabIndex_; + unsigned int startingTabIndex_; // If the swipe is for a page change or a tab change. SwipeType swipeType_; @@ -309,11 +308,10 @@ if (index == (NSInteger)startingTabIndex_) break; - Tab* tab = [model_ tabAtIndex:index]; - if (tab && PagePlaceholderTabHelper::FromWebState(tab.webState) - ->will_add_placeholder_for_next_navigation()) { - [sessionIDs - addObject:TabIdTabHelper::FromWebState(tab.webState)->tab_id()]; + web::WebState* webState = model_.webStateList->GetWebStateAt(index); + if (webState && PagePlaceholderTabHelper::FromWebState(webState) + ->will_add_placeholder_for_next_navigation()) { + [sessionIDs addObject:TabIdTabHelper::FromWebState(webState)->tab_id()]; } index = index + dx; } @@ -365,7 +363,7 @@ postNotificationName:kSideSwipeWillStartNotification object:nil]; [self.tabStripDelegate setHighlightsSelectedTab:YES]; - startingTabIndex_ = [model_ indexOfTab:[model_ currentTab]]; + startingTabIndex_ = model_.webStateList->active_index(); [self createGreyCache:gesture.direction]; } else if (gesture.state == UIGestureRecognizerStateChanged) { // Side swipe for iPad involves changing the selected tab as the swipe moves @@ -379,41 +377,43 @@ distance -= gesture.startPoint.x; } - NSInteger indexDelta = std::floor(distance / kIpadTabSwipeDistance); + int indexDelta = std::floor(distance / kIpadTabSwipeDistance); // Don't wrap past the first tab. if (indexDelta < count) { // Flip delta when swiping forward. if (IsSwipingForward(gesture.direction)) indexDelta = 0 - indexDelta; - Tab* currentTab = [model_ currentTab]; - NSInteger currentIndex = [model_ indexOfTab:currentTab]; - + web::WebState* currentWebState = self.activeWebState; + int currentIndex = + model_.webStateList->GetIndexOfWebState(currentWebState); + DCHECK_GE(currentIndex, 0); // Wrap around edges. - NSInteger newIndex = (NSInteger)(startingTabIndex_ + indexDelta) % count; + int newIndex = (int)(startingTabIndex_ + indexDelta) % count; // C99 defines the modulo result as negative if our offset is negative. if (newIndex < 0) newIndex += count; if (newIndex != currentIndex) { - Tab* tab = [model_ tabAtIndex:newIndex]; + web::WebState* webState = model_.webStateList->GetWebStateAt(newIndex); // Toggle overlay preview mode for selected tab. - PagePlaceholderTabHelper::FromWebState(tab.webState) + PagePlaceholderTabHelper::FromWebState(webState) ->AddPlaceholderForNextNavigation(); - [model_ setCurrentTab:tab]; + model_.webStateList->ActivateWebStateAt(newIndex); // And disable overlay preview mode for last selected tab. - PagePlaceholderTabHelper::FromWebState(currentTab.webState) + PagePlaceholderTabHelper::FromWebState(currentWebState) ->CancelPlaceholderForNextNavigation(); } } } else { if (gesture.state == UIGestureRecognizerStateCancelled) { - Tab* tab = [model_ tabAtIndex:startingTabIndex_]; - PagePlaceholderTabHelper::FromWebState(tab.webState) + web::WebState* webState = + model_.webStateList->GetWebStateAt(startingTabIndex_); + PagePlaceholderTabHelper::FromWebState(webState) ->CancelPlaceholderForNextNavigation(); - [model_ setCurrentTab:tab]; + model_.webStateList->ActivateWebStateAt(startingTabIndex_); } PagePlaceholderTabHelper::FromWebState(self.activeWebState) ->CancelPlaceholderForNextNavigation();
diff --git a/ios/chrome/browser/ui/signin_interaction/BUILD.gn b/ios/chrome/browser/ui/signin_interaction/BUILD.gn index a617a6c36..30cc7eb 100644 --- a/ios/chrome/browser/ui/signin_interaction/BUILD.gn +++ b/ios/chrome/browser/ui/signin_interaction/BUILD.gn
@@ -16,6 +16,7 @@ "//components//unified_consent", "//components/prefs", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//ios/chrome/browser", "//ios/chrome/browser/browser_state", "//ios/chrome/browser/signin", @@ -25,7 +26,6 @@ "//ios/chrome/browser/unified_consent", "//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser/signin", - "//services/identity/public/cpp:cpp", ] }
diff --git a/ios/chrome/browser/ui/signin_interaction/signin_interaction_controller.mm b/ios/chrome/browser/ui/signin_interaction/signin_interaction_controller.mm index 5119968d..6105784 100644 --- a/ios/chrome/browser/ui/signin_interaction/signin_interaction_controller.mm +++ b/ios/chrome/browser/ui/signin_interaction/signin_interaction_controller.mm
@@ -10,6 +10,7 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/unified_consent/feature.h" #import "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/signin/authentication_service.h" @@ -23,7 +24,6 @@ #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity_interaction_manager.h" #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" -#include "services/identity/public/cpp/identity_manager.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h index f1c847d0..7990deb 100644 --- a/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h +++ b/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h
@@ -15,9 +15,6 @@ // The filename for the leading icon. If empty, no icon will be shown. @property(nonatomic, copy) NSString* iconImageName; -// The background color of the cell. -@property(nonatomic, strong) UIColor* cellBackgroundColor; - // The main text string. @property(nonatomic, copy) NSString* text;
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.mm index 8beacf1..eb8bc58 100644 --- a/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.mm +++ b/ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.mm
@@ -35,7 +35,6 @@ self = [super initWithType:type]; if (self) { self.cellClass = [TableViewDetailIconCell class]; - _cellBackgroundColor = UIColor.cr_secondarySystemGroupedBackgroundColor; } return self; } @@ -47,7 +46,6 @@ [super configureCell:cell withStyler:styler]; cell.textLabel.text = self.text; cell.detailTextLabel.text = self.detailText; - cell.backgroundColor = self.cellBackgroundColor; // Update the icon image, if one is present. UIImage* iconImage = nil;
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.mm index 7841d43..28e8c79 100644 --- a/ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.mm +++ b/ios/chrome/browser/ui/table_view/cells/table_view_text_link_item.mm
@@ -42,7 +42,6 @@ TableViewTextLinkCell* cell = base::mac::ObjCCastStrict<TableViewTextLinkCell>(tableCell); cell.textLabel.text = self.text; - cell.textLabel.backgroundColor = styler.tableViewBackgroundColor; cell.selectionStyle = UITableViewCellSelectionStyleNone; [cell setLinkURL:self.linkURL]; }
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm index 7063bb3..3c7ab1e 100644 --- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm +++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
@@ -22,7 +22,6 @@ #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" #include "ios/chrome/browser/system_flags.h" #import "ios/chrome/browser/tabs/legacy_tab_helper.h" -#import "ios/chrome/browser/tabs/tab.h" #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_title_util.h" #import "ios/chrome/browser/ui/bubble/bubble_util.h" @@ -779,10 +778,9 @@ // Install the dimming view, hide the new tab button, and select the tab so it // appears highlighted. - Tab* tab = [_tabModel tabAtIndex:index]; self.highlightsSelectedTab = YES; _buttonNewTab.hidden = YES; - [_tabModel setCurrentTab:tab]; + _tabModel.webStateList->ActivateWebStateAt(index); // Set up initial drag state. _lastDragLocation = [gesture locationInView:[_tabStripView superview]]; @@ -842,15 +840,14 @@ return; } - Tab* tab = [_tabModel tabAtIndex:fromIndex]; NSUInteger toIndex = _placeholderGapModelIndex; DCHECK_NE(NSNotFound, static_cast<NSInteger>(toIndex)); DCHECK_LT(toIndex, [_tabModel count]); // Reset drag state variables before notifying the model that the tab moved. [self resetDragState]; - - [_tabModel moveTab:tab toIndex:toIndex]; + _tabModel.webStateList->MoveWebStateAt(static_cast<int>(fromIndex), + static_cast<int>(toIndex)); [self setNeedsLayoutWithAnimation]; } @@ -1470,7 +1467,8 @@ : [self tabStripVisibleSpace]; // The array and model indexes of the selected tab. - NSUInteger selectedModelIndex = [_tabModel indexOfTab:[_tabModel currentTab]]; + NSUInteger selectedModelIndex = + static_cast<NSUInteger>(_tabModel.webStateList->active_index()); NSUInteger selectedArrayIndex = [self indexForModelIndex:selectedModelIndex]; // This method lays out tabs in two coordinate systems. The first, the
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller_unittest.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller_unittest.mm index ffa2987..11dec9e 100644 --- a/ios/chrome/browser/ui/tabs/tab_strip_controller_unittest.mm +++ b/ios/chrome/browser/ui/tabs/tab_strip_controller_unittest.mm
@@ -10,7 +10,6 @@ #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/sessions/test_session_service.h" #import "ios/chrome/browser/tabs/legacy_tab_helper.h" -#import "ios/chrome/browser/tabs/tab.h" #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/ui/tabs/tab_strip_controller.h" #import "ios/chrome/browser/ui/tabs/tab_strip_view.h" @@ -106,25 +105,6 @@ return tab; } -- (Tab*)currentTab { - web::WebState* activeWebState = _webStateList->GetActiveWebState(); - return activeWebState ? LegacyTabHelper::GetTabForWebState(activeWebState) - : nil; -} - -- (Tab*)tabAtIndex:(NSUInteger)index { - DCHECK(index < static_cast<NSUInteger>(INT_MAX)); - DCHECK(static_cast<int>(index) < _webStateList->count()); - return LegacyTabHelper::GetTabForWebState( - _webStateList->GetWebStateAt(static_cast<int>(index))); -} - -- (NSUInteger)indexOfTab:(Tab*)tab { - const int index = _webStateList->GetIndexOfWebState(tab.webState); - return index == WebStateList::kInvalidIndex ? NSNotFound - : static_cast<NSUInteger>(index); -} - - (BOOL)isEmpty { return _webStateList->empty(); }
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn index 5e0e3a3..38c866e 100644 --- a/ios/chrome/browser/ui/webui/BUILD.gn +++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -94,6 +94,7 @@ "//base", "//components/resources", "//components/signin/core/browser", + "//components/signin/public/identity_manager", "//ios/chrome/app/resources:ios_resources", "//ios/chrome/browser", "//ios/chrome/browser/browser_state", @@ -104,7 +105,6 @@ "//ios/chrome/browser/ui/webui/sync_internals", "//ios/chrome/browser/ui/webui/translate_internals", "//ios/web/public/webui", - "//services/identity/public/cpp", "//url", ] }
diff --git a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc index a555b347..eabc948 100644 --- a/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc +++ b/ios/chrome/browser/ui/webui/signin_internals_ui_ios.cc
@@ -7,14 +7,14 @@ #include "base/hash/hash.h" #include "components/grit/components_resources.h" #include "components/signin/core/browser/about_signin_internals.h" +#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/browser/signin/about_signin_internals_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/web/public/webui/web_ui_ios.h" #include "ios/web/public/webui/web_ui_ios_data_source.h" -#include "services/identity/public/cpp/accounts_in_cookie_jar_info.h" -#include "services/identity/public/cpp/identity_manager.h" namespace {
diff --git a/ios/chrome/common/colors/UIColor+cr_semantic_colors.h b/ios/chrome/common/colors/UIColor+cr_semantic_colors.h index 458c365..65a3619 100644 --- a/ios/chrome/common/colors/UIColor+cr_semantic_colors.h +++ b/ios/chrome/common/colors/UIColor+cr_semantic_colors.h
@@ -14,6 +14,8 @@ // System Background Color @property(class, nonatomic, readonly) UIColor* cr_systemBackgroundColor; +@property(class, nonatomic, readonly) + UIColor* cr_secondarySystemBackgroundColor; // System Grouped Background Colors @property(class, nonatomic, readonly) UIColor* cr_systemGroupedBackgroundColor;
diff --git a/ios/chrome/common/colors/UIColor+cr_semantic_colors.mm b/ios/chrome/common/colors/UIColor+cr_semantic_colors.mm index 0731791..2b8abcf 100644 --- a/ios/chrome/common/colors/UIColor+cr_semantic_colors.mm +++ b/ios/chrome/common/colors/UIColor+cr_semantic_colors.mm
@@ -21,6 +21,15 @@ return UIColor.whiteColor; } ++ (UIColor*)cr_secondarySystemBackgroundColor { +#if defined(__IPHONE_13_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0) + if (@available(iOS 13, *)) { + return UIColor.secondarySystemBackgroundColor; + } +#endif + return UIColor.whiteColor; +} + #pragma mark - System Grouped Background Colors + (UIColor*)cr_systemGroupedBackgroundColor {
diff --git a/ios/web/navigation/crw_wk_navigation_handler.mm b/ios/web/navigation/crw_wk_navigation_handler.mm index a4581854..a63ddbf7 100644 --- a/ios/web/navigation/crw_wk_navigation_handler.mm +++ b/ios/web/navigation/crw_wk_navigation_handler.mm
@@ -1670,9 +1670,10 @@ [self handleCancelledError:error forNavigation:navigation provisionalLoad:provisionalLoad]; - // TODO(crbug.com/957032): This might get fixed at some point. Check if - // there is a iOS version for which we don't need it any more. - if (@available(iOS 12.2, *)) { + if (@available(iOS 13, *)) { + // The bug has been fixed on iOS 13. The workaround is only needed for + // other versions. + } else if (@available(iOS 12.2, *)) { if (![webView.backForwardList.currentItem.URL isEqual:webView.URL] && [self isCurrentNavigationItemPOST]) { UMA_HISTOGRAM_BOOLEAN("WebController.BackForwardListOutOfSync", true);
diff --git a/ios/web_view/BUILD.gn b/ios/web_view/BUILD.gn index 7d6b1cb..2ce30f89 100644 --- a/ios/web_view/BUILD.gn +++ b/ios/web_view/BUILD.gn
@@ -284,8 +284,10 @@ "//components/proxy_config", "//components/signin/core/browser", "//components/signin/core/browser/webdata", + "//components/signin/internal/identity_manager", # TODO(crbug.com/974198): remove once closed "//components/signin/ios/browser", "//components/signin/ios/browser:active_state_manager", + "//components/signin/public/identity_manager", "//components/strings:components_strings_grit", "//components/sync", "//components/sync_device_info", @@ -313,7 +315,6 @@ "//ios/web/public/js_messaging", "//net", "//net:extras", - "//services/identity/public/cpp", "//services/metrics/public/cpp:metrics_cpp", "//ui/base", "//url", @@ -430,12 +431,12 @@ "//components/prefs:test_support", "//components/signin/core/browser:internals_test_support", "//components/signin/ios/browser:test_support", + "//components/signin/public/identity_manager:test_support", "//components/sync:test_support", "//ios/web/public/deprecated:test_doubles", "//ios/web/public/js_messaging", "//ios/web/public/security", "//ios/web/public/test", - "//services/identity/public/cpp:test_support", "//testing/gtest", "//third_party/ocmock", ]
diff --git a/ios/web_view/internal/DEPS b/ios/web_view/internal/DEPS index 3bdfe0bb..15126f8 100644 --- a/ios/web_view/internal/DEPS +++ b/ios/web_view/internal/DEPS
@@ -39,6 +39,7 @@ "-components/signin/core/browser/ubertoken_fetcher_impl.h", "+components/signin/ios", + "+components/signin/public", "+components/ssl_errors", "+components/strings/grit", "+components/sync", @@ -59,7 +60,6 @@ "+ios/web/public", "+ios/web_view", "+net", - "+services/identity/public/cpp", "+services/network/network_change_manager.h", "+services/network/public/cpp", "+services/network/public/mojom",
diff --git a/ios/web_view/internal/app/application_context.mm b/ios/web_view/internal/app/application_context.mm index a4917cb..c4349553 100644 --- a/ios/web_view/internal/app/application_context.mm +++ b/ios/web_view/internal/app/application_context.mm
@@ -29,7 +29,7 @@ #include "ui/base/l10n/l10n_util_mac.h" #if BUILDFLAG(IOS_WEB_VIEW_ENABLE_SYNC) -#include "services/identity/public/cpp/identity_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #endif #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/web_view/internal/signin/DEPS b/ios/web_view/internal/signin/DEPS index dbd2379..f26ed4ae 100644 --- a/ios/web_view/internal/signin/DEPS +++ b/ios/web_view/internal/signin/DEPS
@@ -9,5 +9,6 @@ "+components/signin/core/browser/primary_account_manager.h", "+components/signin/core/browser/primary_account_policy_manager.h", "+components/signin/core/browser/profile_oauth2_token_service.h", + "+components/signin/internal/identity_manager", # TODO(crbug.com/974198): remove once closed ], }
diff --git a/ios/web_view/internal/signin/web_view_identity_manager_factory.mm b/ios/web_view/internal/signin/web_view_identity_manager_factory.mm index 53554b6..5f7464a 100644 --- a/ios/web_view/internal/signin/web_view_identity_manager_factory.mm +++ b/ios/web_view/internal/signin/web_view_identity_manager_factory.mm
@@ -13,6 +13,7 @@ #include "components/prefs/pref_service.h" #include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/account_fetcher_service.h" +#include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/identity_manager_wrapper.h" #include "components/signin/core/browser/primary_account_manager.h" @@ -20,17 +21,17 @@ #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/signin/core/browser/signin_client.h" #include "components/signin/core/browser/signin_pref_names.h" +#include "components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h" +#include "components/signin/internal/identity_manager/diagnostics_provider_impl.h" +#include "components/signin/internal/identity_manager/primary_account_mutator_impl.h" #include "components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h" +#include "components/signin/public/identity_manager/accounts_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "ios/web_view/internal/app/application_context.h" #include "ios/web_view/internal/signin/ios_web_view_signin_client.h" #include "ios/web_view/internal/signin/web_view_device_accounts_provider_impl.h" #include "ios/web_view/internal/signin/web_view_signin_client_factory.h" #include "ios/web_view/internal/web_view_browser_state.h" -#include "services/identity/public/cpp/accounts_cookie_mutator_impl.h" -#include "services/identity/public/cpp/accounts_mutator.h" -#include "services/identity/public/cpp/diagnostics_provider_impl.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator_impl.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/web_view/internal/sync/cwv_sync_controller.mm b/ios/web_view/internal/sync/cwv_sync_controller.mm index 75bb3090..20af6f24 100644 --- a/ios/web_view/internal/sync/cwv_sync_controller.mm +++ b/ios/web_view/internal/sync/cwv_sync_controller.mm
@@ -10,14 +10,14 @@ #include "base/strings/sys_string_conversions.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/signin_error_controller.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/primary_account_mutator.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" #include "ios/web/public/thread/web_thread.h" #import "ios/web_view/public/cwv_identity.h" #import "ios/web_view/public/cwv_sync_controller_data_source.h" #import "ios/web_view/public/cwv_sync_controller_delegate.h" -#include "services/identity/public/cpp/identity_manager.h" -#include "services/identity/public/cpp/primary_account_mutator.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/web_view/internal/sync/cwv_sync_controller_unittest.mm b/ios/web_view/internal/sync/cwv_sync_controller_unittest.mm index eeb9fe2..fce2b218 100644 --- a/ios/web_view/internal/sync/cwv_sync_controller_unittest.mm +++ b/ios/web_view/internal/sync/cwv_sync_controller_unittest.mm
@@ -13,6 +13,7 @@ #include "base/test/bind_test_util.h" #include "components/signin/core/browser/signin_error_controller.h" #include "components/signin/ios/browser/fake_device_accounts_provider.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/mock_sync_service.h" #include "components/sync/driver/sync_service_observer.h" #include "google_apis/gaia/google_service_auth_error.h" @@ -24,7 +25,6 @@ #import "ios/web_view/public/cwv_sync_controller_data_source.h" #import "ios/web_view/public/cwv_sync_controller_delegate.h" #include "ios/web_view/test/test_with_locale_and_resources.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/web_view/internal/sync/web_view_profile_sync_service_factory.mm b/ios/web_view/internal/sync/web_view_profile_sync_service_factory.mm index 1bd0466..c42f6eaa 100644 --- a/ios/web_view/internal/sync/web_view_profile_sync_service_factory.mm +++ b/ios/web_view/internal/sync/web_view_profile_sync_service_factory.mm
@@ -14,6 +14,7 @@ #include "components/autofill/core/common/autofill_features.h" #include "components/invalidation/impl/profile_invalidation_provider.h" #include "components/keyed_service/ios/browser_state_dependency_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "components/sync/base/model_type.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/driver/startup_controller.h" @@ -31,7 +32,6 @@ #import "ios/web_view/internal/sync/web_view_sync_client.h" #include "ios/web_view/internal/web_view_browser_state.h" #include "ios/web_view/internal/webdata_services/web_view_web_data_service_wrapper_factory.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "url/gurl.h"
diff --git a/ipc/run_all_perftests.cc b/ipc/run_all_perftests.cc index b60415fd..3e1e45c 100644 --- a/ipc/run_all_perftests.cc +++ b/ipc/run_all_perftests.cc
@@ -12,10 +12,6 @@ #include "mojo/core/embedder/scoped_ipc_support.h" #include "mojo/core/test/test_support_impl.h" -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - int main(int argc, char** argv) { base::PerfTestSuite test(argc, argv); @@ -25,10 +21,6 @@ test_io_thread.task_runner(), mojo::core::ScopedIPCSupport::ShutdownPolicy::CLEAN); mojo::test::TestSupport::Init(new mojo::core::test::TestSupportImpl()); -#if defined(OS_MACOSX) && !defined(OS_IOS) - mojo::core::SetMachPortProvider( - mojo::core::DefaultMachBroker::Get()->port_provider()); -#endif return test.Run(); }
diff --git a/ipc/run_all_unittests.cc b/ipc/run_all_unittests.cc index 2dd746f..53e294f 100644 --- a/ipc/run_all_unittests.cc +++ b/ipc/run_all_unittests.cc
@@ -11,10 +11,6 @@ #include "mojo/core/embedder/embedder.h" #include "mojo/core/embedder/scoped_ipc_support.h" -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - int main(int argc, char** argv) { base::TestSuite test_suite(argc, argv); mojo::core::Init(); @@ -23,11 +19,6 @@ test_io_thread.task_runner(), mojo::core::ScopedIPCSupport::ShutdownPolicy::CLEAN); -#if defined(OS_MACOSX) && !defined(OS_IOS) - mojo::core::SetMachPortProvider( - mojo::core::DefaultMachBroker::Get()->port_provider()); -#endif - return base::LaunchUnitTests( argc, argv, base::Bind(&base::TestSuite::Run, base::Unretained(&test_suite)));
diff --git a/mojo/core/BUILD.gn b/mojo/core/BUILD.gn index e96989e..2d46dda 100644 --- a/mojo/core/BUILD.gn +++ b/mojo/core/BUILD.gn
@@ -128,12 +128,8 @@ } } - if (is_mac && !is_ios) { - sources += [ - "channel_mac.cc", - "mach_port_relay.cc", - "mach_port_relay.h", - ] + if (is_mac) { + sources += [ "channel_mac.cc" ] } if (!is_nacl || is_nacl_nonsfi) {
diff --git a/mojo/core/channel.cc b/mojo/core/channel.cc index 14ad9aa..4a6d17b 100644 --- a/mojo/core/channel.cc +++ b/mojo/core/channel.cc
@@ -19,7 +19,6 @@ #include "build/build_config.h" #include "mojo/core/configuration.h" #include "mojo/core/core.h" -#include "mojo/public/cpp/platform/features.h" #if defined(OS_MACOSX) && !defined(OS_IOS) #include "base/mac/mach_logging.h" @@ -154,12 +153,7 @@ mach_ports_header_->num_ports = 0; // Initialize all handles to invalid values. for (size_t i = 0; i < max_handles_; ++i) { - if (base::FeatureList::IsEnabled(features::kMojoChannelMac)) { - mach_ports_header_->entries[i].mach_entry.type = {0}; - } else { - mach_ports_header_->entries[i].posix_entry = { - 0, static_cast<uint32_t>(MACH_PORT_NULL)}; - } + mach_ports_header_->entries[i] = {0}; } #endif } @@ -449,56 +443,20 @@ #endif // defined(OS_WIN) #if defined(OS_MACOSX) && !defined(OS_IOS) - size_t mach_port_index = 0; - const bool use_channel_mac = - base::FeatureList::IsEnabled(features::kMojoChannelMac); if (mach_ports_header_) { for (size_t i = 0; i < max_handles_; ++i) { - if (use_channel_mac) { - mach_ports_header_->entries[i].mach_entry.type = {0}; - } else { - mach_ports_header_->entries[i].posix_entry = { - 0, static_cast<uint32_t>(MACH_PORT_NULL)}; - } + mach_ports_header_->entries[i] = {0}; } for (size_t i = 0; i < handle_vector_.size(); i++) { - if (use_channel_mac) { - mach_ports_header_->entries[i].mach_entry.type = - static_cast<uint8_t>(handle_vector_[i].handle().type()); - } else { - if (!handle_vector_[i].is_mach_port_name() && - !handle_vector_[i].handle().is_mach_port()) { - DCHECK(handle_vector_[i].handle().is_valid_fd()); - continue; - } - - mach_port_t port = handle_vector_[i].is_mach_port_name() - ? handle_vector_[i].mach_port_name() - : handle_vector_[i].handle().GetMachPort().get(); - mach_ports_header_->entries[mach_port_index].posix_entry.index = i; - mach_ports_header_->entries[mach_port_index].posix_entry.mach_port = - port; - mach_port_index++; - } + mach_ports_header_->entries[i].type = + static_cast<uint8_t>(handle_vector_[i].handle().type()); } - mach_ports_header_->num_ports = - use_channel_mac ? handle_vector_.size() - : static_cast<uint16_t>(mach_port_index); + mach_ports_header_->num_ports = handle_vector_.size(); } #endif } std::vector<PlatformHandleInTransit> Channel::Message::TakeHandles() { -#if defined(OS_MACOSX) && !defined(OS_IOS) - if (mach_ports_header_ && - !base::FeatureList::IsEnabled(features::kMojoChannelMac)) { - for (size_t i = 0; i < max_handles_; ++i) { - mach_ports_header_->entries[i].posix_entry = { - 0, static_cast<uint32_t>(MACH_PORT_NULL)}; - } - mach_ports_header_->num_ports = 0; - } -#endif return std::move(handle_vector_); } @@ -508,23 +466,6 @@ // Not necessary on Windows. NOTREACHED(); return std::vector<PlatformHandleInTransit>(); -#elif defined(OS_MACOSX) && !defined(OS_IOS) - if (base::FeatureList::IsEnabled(features::kMojoChannelMac)) { - return std::move(handle_vector_); - } else { - std::vector<PlatformHandleInTransit> non_mach_handles; - for (auto& handle : handle_vector_) { - if (handle.is_mach_port_name() || handle.handle().is_mach_port()) { - // Ownership is effectively transferred to the receiving process - // out-of-band via MachPortRelay. - handle.CompleteTransit(); - } else { - non_mach_handles.emplace_back(std::move(handle)); - } - } - handle_vector_.clear(); - return non_mach_handles; - } #else return std::move(handle_vector_); #endif
diff --git a/mojo/core/channel.h b/mojo/core/channel.h index e06ce1a..5a8747d 100644 --- a/mojo/core/channel.h +++ b/mojo/core/channel.h
@@ -66,7 +66,7 @@ // TODO(https://crbug.com/695645): remove legacy support when Arc++ has // updated to Mojo with normal versioned messages. NORMAL_LEGACY = 0, -#if defined(OS_MACOSX) +#if defined(OS_IOS) // A control message containing handles to echo back. HANDLES_SENT, // A control message containing handles that can now be closed. @@ -111,27 +111,12 @@ }; #if defined(OS_MACOSX) && !defined(OS_IOS) - union MachPortsEntry { - // Used with ChannelPosix. - struct { - // Index of Mach port in the original vector of - // PlatformHandleInTransits. - uint16_t index; - - // Mach port name. - uint32_t mach_port; - } posix_entry; - - // Used with ChannelMac. - struct { - // The PlatformHandle::Type. - uint8_t type; - } mach_entry; - static_assert(sizeof(mach_port_t) <= sizeof(uint32_t), - "mach_port_t must be no larger than uint32_t"); + struct MachPortsEntry { + // The PlatformHandle::Type. + uint8_t type; }; - static_assert(sizeof(MachPortsEntry) == 6, - "sizeof(MachPortsEntry) must be 6 bytes"); + static_assert(sizeof(MachPortsEntry) == 1, + "sizeof(MachPortsEntry) must be 1 byte"); // Structure of the extra header field when present on OSX. struct MachPortsExtraHeader {
diff --git a/mojo/core/channel_mac.cc b/mojo/core/channel_mac.cc index 379115e..582b056d 100644 --- a/mojo/core/channel_mac.cc +++ b/mojo/core/channel_mac.cc
@@ -133,8 +133,8 @@ } for (uint16_t i = 0; i < mach_ports_header->num_ports; ++i) { - auto type = static_cast<PlatformHandle::Type>( - mach_ports_header->entries[i].mach_entry.type); + auto type = + static_cast<PlatformHandle::Type>(mach_ports_header->entries[i].type); if (type == PlatformHandle::Type::kNone) { return false; } else if (type == PlatformHandle::Type::kFd &&
diff --git a/mojo/core/channel_posix.cc b/mojo/core/channel_posix.cc index 80fb834..24818bdf 100644 --- a/mojo/core/channel_posix.cc +++ b/mojo/core/channel_posix.cc
@@ -28,10 +28,6 @@ #include <sys/uio.h> #endif -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/mach_port_relay.h" -#endif - namespace mojo { namespace core { @@ -96,9 +92,6 @@ }; class ChannelPosix : public Channel, -#if defined(OS_MACOSX) && !defined(OS_IOS) - public MachPortRelay::Observer, -#endif public base::MessageLoopCurrent::DestructionObserver, public base::MessagePumpForIO::FdWatcher { public: @@ -118,15 +111,6 @@ } void Start() override { -#if defined(OS_MACOSX) && !defined(OS_IOS) - auto* relay = Core::Get()->GetMachPortRelay(); - if (relay) { - // We should only have a relay if we know the remote process handle, - // because that means we're in the broker process. - relay->AddObserver(this); - } -#endif - if (io_task_runner_->RunsTasksInCurrentSequence()) { StartOnIOThread(); } else { @@ -142,30 +126,6 @@ } void Write(MessagePtr message) override { -#if defined(OS_MACOSX) && !defined(OS_IOS) - // If this message has Mach ports and we have a MachPortRelay, use the relay - // to rewrite the ports as receive rights from which the send right can be - // read. See |MachPortRelay::SendPortsToProcess()|. - // - // Note that if we don't have a relay, the receiving process must, and they - // must also have the ability to extract a send right from the ports that - // are already attached. - MachPortRelay* relay = Core::Get()->GetMachPortRelay(); - if (relay && remote_process().is_valid() && message->has_mach_ports()) { - if (relay->port_provider()->TaskForPid(remote_process().get()) == - MACH_PORT_NULL) { - // We also need to have a task port for the remote process before we can - // send it any other ports. If we don't have one yet, queue the message - // until OnProcessReady() is invoked. - base::AutoLock lock(task_port_wait_lock_); - pending_outgoing_with_mach_ports_.emplace_back(std::move(message)); - return; - } - - relay->SendPortsToProcess(message.get(), remote_process().get()); - } -#endif - bool write_error = false; { base::AutoLock lock(write_lock_); @@ -201,82 +161,6 @@ bool* deferred) override { if (num_handles > std::numeric_limits<uint16_t>::max()) return false; -#if defined(OS_MACOSX) && !defined(OS_IOS) - // On OSX, we can have mach ports which are located in the extra header - // section. - using MachPortsEntry = Channel::Message::MachPortsEntry; - using MachPortsExtraHeader = Channel::Message::MachPortsExtraHeader; - if (extra_header_size < - sizeof(MachPortsExtraHeader) + num_handles * sizeof(MachPortsEntry)) { - return false; - } - const MachPortsExtraHeader* mach_ports_header = - reinterpret_cast<const MachPortsExtraHeader*>(extra_header); - size_t num_mach_ports = mach_ports_header->num_ports; - if (num_mach_ports > num_handles) - return false; - if (incoming_fds_.size() + num_mach_ports < num_handles) - return true; - - std::vector<PlatformHandleInTransit> handles_in_transit(num_handles); - const MachPortsEntry* mach_ports = mach_ports_header->entries; - - // If we know the remote process handle, we assume all incoming Mach ports - // are send right references owned by the remote process. Otherwise they're - // receive ports we can use to read a send right. - const bool extract_send_rights = remote_process().is_valid(); - for (size_t i = 0, mach_port_index = 0; i < num_handles; ++i) { - if (mach_port_index < num_mach_ports && - mach_ports[mach_port_index].posix_entry.index == i) { - mach_port_t port_name = static_cast<mach_port_t>( - mach_ports[mach_port_index].posix_entry.mach_port); - if (extract_send_rights) { - handles_in_transit[i] = - PlatformHandleInTransit::CreateForMachPortName(port_name); - } else { - handles_in_transit[i] = PlatformHandleInTransit( - PlatformHandle(MachPortRelay::ReceiveSendRight( - base::mac::ScopedMachReceiveRight(port_name)))); - } - mach_port_index++; - } else { - if (incoming_fds_.empty()) - return false; - handles_in_transit[i] = PlatformHandleInTransit( - PlatformHandle(std::move(incoming_fds_.front()))); - incoming_fds_.pop_front(); - } - } - if (extract_send_rights && num_mach_ports) { - MachPortRelay* relay = Core::Get()->GetMachPortRelay(); - DCHECK(relay); - // Extracting send rights requires that we have a task port for the - // remote process, which we may not yet have. - if (relay->port_provider()->TaskForPid(remote_process().get()) != - MACH_PORT_NULL) { - // We do have a task port, so extract the send rights immediately. - for (auto& handle : handles_in_transit) { - if (handle.is_mach_port_name()) { - handle = PlatformHandleInTransit(PlatformHandle(relay->ExtractPort( - handle.mach_port_name(), remote_process().get()))); - } - } - } else { - // No task port, we have to defer this message. - *deferred = true; - base::AutoLock lock(task_port_wait_lock_); - std::vector<uint8_t> data(payload_size); - memcpy(data.data(), payload, payload_size); - pending_incoming_with_mach_ports_.emplace_back( - std::move(data), std::move(handles_in_transit)); - return true; - } - } - - handles->resize(handles_in_transit.size()); - for (size_t i = 0; i < handles->size(); ++i) - handles->at(i) = handles_in_transit[i].TakeHandle(); -#else if (incoming_fds_.size() < num_handles) return true; @@ -285,7 +169,6 @@ handles->at(i) = PlatformHandle(std::move(incoming_fds_.front())); incoming_fds_.pop_front(); } -#endif return true; } @@ -351,74 +234,14 @@ socket_.reset(); ignore_result(server_.TakePlatformHandle()); } -#if defined(OS_MACOSX) +#if defined(OS_IOS) fds_to_close_.clear(); #endif -#if defined(OS_MACOSX) && !defined(OS_IOS) - auto* relay = Core::Get()->GetMachPortRelay(); - if (relay) - relay->RemoveObserver(this); -#endif - // May destroy the |this| if it was the last reference. self_ = nullptr; } -#if defined(OS_MACOSX) && !defined(OS_IOS) - // MachPortRelay::Observer: - void OnProcessReady(base::ProcessHandle process) override { - if (process != remote_process().get()) - return; - - io_task_runner_->PostTask( - FROM_HERE, - base::BindOnce( - &ChannelPosix::FlushPendingMessagesWithMachPortsOnIOThread, this)); - } - - void FlushPendingMessagesWithMachPortsOnIOThread() { - // We have a task port for the remote process. Now we can send or accept - // any pending messages with Mach ports. - std::vector<RawIncomingMessage> incoming; - std::vector<MessagePtr> outgoing; - { - base::AutoLock lock(task_port_wait_lock_); - if (reject_incoming_messages_with_mach_ports_) - return; - std::swap(pending_incoming_with_mach_ports_, incoming); - std::swap(pending_outgoing_with_mach_ports_, outgoing); - } - - DCHECK(remote_process().is_valid()); - base::ProcessHandle process = remote_process().get(); - MachPortRelay* relay = Core::Get()->GetMachPortRelay(); - DCHECK(relay); - for (auto& message : incoming) { - Channel::Delegate* d = delegate(); - if (!d) - break; - std::vector<PlatformHandle> handles(message.handles.size()); - for (size_t i = 0; i < message.handles.size(); ++i) { - if (message.handles[i].is_mach_port_name()) { - handles[i] = PlatformHandle( - relay->ExtractPort(message.handles[i].mach_port_name(), process)); - } else { - DCHECK(!message.handles[i].owning_process().is_valid()); - handles[i] = message.handles[i].TakeHandle(); - } - } - d->OnChannelMessage(message.data.data(), message.data.size(), - std::move(handles)); - } - - for (auto& message : outgoing) { - relay->SendPortsToProcess(message.get(), process); - Write(std::move(message)); - } - } -#endif - // base::MessageLoopCurrent::DestructionObserver: void WillDestroyCurrentMessageLoop() override { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); @@ -534,8 +357,8 @@ // TODO: Handle lots of handles. result = SendmsgWithHandles(socket_.get(), &iov, 1, fds); if (result >= 0) { -#if defined(OS_MACOSX) - // There is a bug on OSX which makes it dangerous to close +#if defined(OS_IOS) + // There is a bug in XNU which makes it dangerous to close // a file descriptor while it is in transit. So instead we // store the file descriptor in a set and send a message to // the recipient, which is queued AFTER the message that @@ -554,7 +377,7 @@ for (auto& fd : fds) fds_to_close_.emplace_back(std::move(fd)); } -#endif // defined(OS_MACOSX) +#endif // defined(OS_IOS) handles_written += num_handles_to_send; DCHECK_LE(handles_written, num_handles); message_view.set_num_handles_sent(handles_written); @@ -574,8 +397,8 @@ if (result < 0) { if (errno != EAGAIN && errno != EWOULDBLOCK -#if defined(OS_MACOSX) - // On OS X if sendmsg() is trying to send fds between processes and +#if defined(OS_IOS) + // On iOS if sendmsg() is trying to send fds between processes and // there isn't enough room in the output buffer to send the fd // structure over atomically then EMSGSIZE is returned. // @@ -590,7 +413,7 @@ // passing the FD over atomically. && errno != EMSGSIZE #endif - ) { + ) { return false; } message_view.SetHandles(std::move(handles)); @@ -633,7 +456,7 @@ return true; } -#if defined(OS_MACOSX) +#if defined(OS_IOS) bool OnControlMessage(Message::MessageType message_type, const void* payload, size_t payload_size, @@ -699,7 +522,7 @@ fds_to_close_.erase(start, it); return true; } -#endif // defined(OS_MACOSX) +#endif // defined(OS_IOS) void OnWriteError(Error error) { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); @@ -745,30 +568,10 @@ bool leak_handle_ = false; -#if defined(OS_MACOSX) +#if defined(OS_IOS) base::Lock fds_to_close_lock_; std::vector<base::ScopedFD> fds_to_close_; -#if !defined(OS_IOS) - // Guards access to the send/receive queues below. These are messages that - // can't be fully accepted from or dispatched to the Channel user yet because - // we're still waiting on a task port for the remote process. - struct RawIncomingMessage { - RawIncomingMessage(std::vector<uint8_t> data, - std::vector<PlatformHandleInTransit> handles) - : data(std::move(data)), handles(std::move(handles)) {} - RawIncomingMessage(RawIncomingMessage&&) = default; - ~RawIncomingMessage() = default; - - std::vector<uint8_t> data; - std::vector<PlatformHandleInTransit> handles; - }; - - base::Lock task_port_wait_lock_; - bool reject_incoming_messages_with_mach_ports_ = false; - std::vector<MessagePtr> pending_outgoing_with_mach_ports_; - std::vector<RawIncomingMessage> pending_incoming_with_mach_ports_; -#endif // !defined(OS_IOS) -#endif // defined(OS_MACOSX) +#endif // defined(OS_IOS) DISALLOW_COPY_AND_ASSIGN(ChannelPosix); };
diff --git a/mojo/core/core.cc b/mojo/core/core.cc index 32ecea3..bfd727a3 100644 --- a/mojo/core/core.cc +++ b/mojo/core/core.cc
@@ -213,18 +213,6 @@ connection_name); } -void Core::SetMachPortProvider(base::PortProvider* port_provider) { -#if defined(OS_MACOSX) && !defined(OS_IOS) - GetNodeController()->CreateMachPortRelay(port_provider); -#endif -} - -#if defined(OS_MACOSX) && !defined(OS_IOS) -MachPortRelay* Core::GetMachPortRelay() { - return GetNodeController()->GetMachPortRelay(); -} -#endif - MojoHandle Core::AddDispatcher(scoped_refptr<Dispatcher> dispatcher) { base::AutoLock lock(handles_->GetLock()); return handles_->AddDispatcher(dispatcher);
diff --git a/mojo/core/core.h b/mojo/core/core.h index 2840bc5..b3f557b 100644 --- a/mojo/core/core.h +++ b/mojo/core/core.h
@@ -30,14 +30,9 @@ #include "mojo/public/c/system/trap.h" #include "mojo/public/c/system/types.h" -namespace base { -class PortProvider; -} - namespace mojo { namespace core { -class MachPortRelay; class PlatformSharedMemoryMapping; // |Core| is an object that implements the Mojo system calls. All public methods @@ -112,13 +107,6 @@ const ports::PortRef& port, base::StringPiece connection_name); - // Sets the mach port provider for this process. - void SetMachPortProvider(base::PortProvider* port_provider); - -#if defined(OS_MACOSX) && !defined(OS_IOS) - MachPortRelay* GetMachPortRelay(); -#endif - MojoHandle AddDispatcher(scoped_refptr<Dispatcher> dispatcher); // Adds new dispatchers for non-message-pipe handles received in a message.
diff --git a/mojo/core/embedder/BUILD.gn b/mojo/core/embedder/BUILD.gn index 774afe4..47f1c390 100644 --- a/mojo/core/embedder/BUILD.gn +++ b/mojo/core/embedder/BUILD.gn
@@ -16,11 +16,6 @@ "scoped_ipc_support.cc", ] - if (is_mac && !is_ios) { - public += [ "default_mach_broker.h" ] - sources += [ "default_mach_broker.cc" ] - } - defines = [ "IS_MOJO_CORE_EMBEDDER_IMPL" ] public_deps = [
diff --git a/mojo/core/embedder/default_mach_broker.cc b/mojo/core/embedder/default_mach_broker.cc deleted file mode 100644 index 436917a7..0000000 --- a/mojo/core/embedder/default_mach_broker.cc +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/core/embedder/default_mach_broker.h" - -#include "base/logging.h" - -namespace mojo { -namespace core { - -namespace { -const char kBootstrapPortName[] = "mojo_default_mach_broker"; -} - -// static -void DefaultMachBroker::SendTaskPortToParent() { - bool result = - base::MachPortBroker::ChildSendTaskPortToParent(kBootstrapPortName); - DCHECK(result); -} - -// static -DefaultMachBroker* DefaultMachBroker::Get() { - static DefaultMachBroker* broker = new DefaultMachBroker; - return broker; -} - -DefaultMachBroker::DefaultMachBroker() : broker_(kBootstrapPortName) { - bool result = broker_.Init(); - DCHECK(result); -} - -DefaultMachBroker::~DefaultMachBroker() {} - -void DefaultMachBroker::ExpectPid(base::ProcessHandle pid) { - broker_.AddPlaceholderForPid(pid); -} - -void DefaultMachBroker::RemovePid(base::ProcessHandle pid) { - broker_.InvalidatePid(pid); -} - -} // namespace core -} // namespace mojo
diff --git a/mojo/core/embedder/default_mach_broker.h b/mojo/core/embedder/default_mach_broker.h deleted file mode 100644 index 2229ec1..0000000 --- a/mojo/core/embedder/default_mach_broker.h +++ /dev/null
@@ -1,53 +0,0 @@ -// 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 MOJO_CORE_EMBEDDER_DEFAULT_MACH_BROKER_H_ -#define MOJO_CORE_EMBEDDER_DEFAULT_MACH_BROKER_H_ - -#include "base/component_export.h" -#include "base/mac/mach_port_broker.h" -#include "base/macros.h" - -namespace mojo { -namespace core { - -// A singleton Mojo embedders can use to manage task port brokering among -// connected processes. -class COMPONENT_EXPORT(MOJO_CORE_EMBEDDER) DefaultMachBroker { - public: - // Sends the task port of the current process to the parent over Mach IPC. - // For use in child processes. - static void SendTaskPortToParent(); - - // Returns the global |DefaultMachBroker|. - static DefaultMachBroker* Get(); - - // Registers |pid| with a MACH_PORT_NULL task port in the port provider. A - // child's pid must be registered before the broker will accept a task port - // from that child. - // - // Callers MUST have the lock acquired (see |GetLock()) while calling this. - void ExpectPid(base::ProcessHandle pid); - - // Removes |pid| from the port provider. - // - // Callers MUST have the lock acquired (see |GetLock()) while calling this. - void RemovePid(base::ProcessHandle pid); - - base::Lock& GetLock() { return broker_.GetLock(); } - base::PortProvider* port_provider() { return &broker_; } - - private: - DefaultMachBroker(); - ~DefaultMachBroker(); - - base::MachPortBroker broker_; - - DISALLOW_COPY_AND_ASSIGN(DefaultMachBroker); -}; - -} // namespace core -} // namespace mojo - -#endif // MOJO_CORE_EMBEDDER_DEFAULT_MACH_BROKER_H_
diff --git a/mojo/core/embedder/embedder.cc b/mojo/core/embedder/embedder.cc index 4044de08..a25d5013 100644 --- a/mojo/core/embedder/embedder.cc +++ b/mojo/core/embedder/embedder.cc
@@ -39,12 +39,5 @@ return Core::Get()->GetNodeController()->io_task_runner(); } -#if defined(OS_MACOSX) && !defined(OS_IOS) -void SetMachPortProvider(base::PortProvider* port_provider) { - DCHECK(port_provider); - Core::Get()->SetMachPortProvider(port_provider); -} -#endif - } // namespace core } // namespace mojo
diff --git a/mojo/core/embedder/embedder.h b/mojo/core/embedder/embedder.h index feb7ca1b..2b7d7db 100644 --- a/mojo/core/embedder/embedder.h +++ b/mojo/core/embedder/embedder.h
@@ -18,10 +18,6 @@ #include "build/build_config.h" #include "mojo/core/embedder/configuration.h" -namespace base { -class PortProvider; -} - namespace mojo { namespace core { @@ -50,15 +46,6 @@ COMPONENT_EXPORT(MOJO_CORE_EMBEDDER) scoped_refptr<base::TaskRunner> GetIOTaskRunner(); -#if defined(OS_MACOSX) && !defined(OS_IOS) -// Set the |base::PortProvider| for this process. Can be called on any thread, -// but must be set in the root process before any Mach ports can be transferred. -// -// If called at all, this must be called while a ScopedIPCSupport exists. -COMPONENT_EXPORT(MOJO_CORE_EMBEDDER) -void SetMachPortProvider(base::PortProvider* port_provider); -#endif - } // namespace core } // namespace mojo
diff --git a/mojo/core/mach_port_relay.cc b/mojo/core/mach_port_relay.cc deleted file mode 100644 index 7d7a425..0000000 --- a/mojo/core/mach_port_relay.cc +++ /dev/null
@@ -1,200 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/core/mach_port_relay.h" - -#include <mach/mach.h> - -#include <utility> - -#include "base/logging.h" -#include "base/mac/mach_port_util.h" -#include "base/mac/scoped_mach_port.h" -#include "base/metrics/histogram_macros.h" -#include "base/process/process.h" - -namespace mojo { -namespace core { - -namespace { - -// Errors that can occur in the broker (privileged parent) process. -// These match tools/metrics/histograms.xml. -// This enum is append-only. -enum class BrokerUMAError : int { - SUCCESS = 0, - // Couldn't get a task port for the process with a given pid. - ERROR_TASK_FOR_PID = 1, - // Couldn't make a port with receive rights in the destination process. - ERROR_MAKE_RECEIVE_PORT = 2, - // Couldn't change the attributes of a Mach port. - ERROR_SET_ATTRIBUTES = 3, - // Couldn't extract a right from the destination. - ERROR_EXTRACT_DEST_RIGHT = 4, - // Couldn't send a Mach port in a call to mach_msg(). - ERROR_SEND_MACH_PORT = 5, - // Couldn't extract a right from the source. - ERROR_EXTRACT_SOURCE_RIGHT = 6, - ERROR_MAX -}; - -// Errors that can occur in a child process. -// These match tools/metrics/histograms.xml. -// This enum is append-only. -enum class ChildUMAError : int { - SUCCESS = 0, - // An error occurred while trying to receive a Mach port with mach_msg(). - ERROR_RECEIVE_MACH_MESSAGE = 1, - ERROR_MAX -}; - -void ReportBrokerError(BrokerUMAError error) { - UMA_HISTOGRAM_ENUMERATION("Mojo.MachPortRelay.BrokerError", - static_cast<int>(error), - static_cast<int>(BrokerUMAError::ERROR_MAX)); -} - -void ReportChildError(ChildUMAError error) { - UMA_HISTOGRAM_ENUMERATION("Mojo.MachPortRelay.ChildError", - static_cast<int>(error), - static_cast<int>(ChildUMAError::ERROR_MAX)); -} - -} // namespace - -// static -base::mac::ScopedMachSendRight MachPortRelay::ReceiveSendRight( - base::mac::ScopedMachReceiveRight port) { - // MACH_PORT_NULL doesn't need translation. - if (!port.is_valid()) - return base::mac::ScopedMachSendRight(); - - // Take ownership of the receive right. We only need it to read this single - // send right, then it can be closed. - base::mac::ScopedMachSendRight received_port( - base::ReceiveMachPort(port.get())); - if (!received_port.is_valid()) { - ReportChildError(ChildUMAError::ERROR_RECEIVE_MACH_MESSAGE); - DLOG(ERROR) << "Error receiving mach port"; - return base::mac::ScopedMachSendRight(); - } - - ReportChildError(ChildUMAError::SUCCESS); - return received_port; -} - -MachPortRelay::MachPortRelay(base::PortProvider* port_provider) - : port_provider_(port_provider) { - DCHECK(port_provider); - port_provider_->AddObserver(this); -} - -MachPortRelay::~MachPortRelay() { - port_provider_->RemoveObserver(this); -} - -void MachPortRelay::SendPortsToProcess(Channel::Message* message, - base::ProcessHandle process) { - DCHECK(message); - mach_port_t task_port = port_provider_->TaskForPid(process); - - std::vector<PlatformHandleInTransit> handles = message->TakeHandles(); - // Message should have handles, otherwise there's no point in calling this - // function. - DCHECK(!handles.empty()); - for (auto& handle : handles) { - if (!handle.handle().is_valid_mach_port()) - continue; - - if (task_port == MACH_PORT_NULL) { - // Callers check the port provider for the task port before calling this - // function, in order to queue pending messages. Therefore, if this fails, - // it should be considered a genuine, bona fide, electrified, six-car - // error. - ReportBrokerError(BrokerUMAError::ERROR_TASK_FOR_PID); - handle = PlatformHandleInTransit( - PlatformHandle(base::mac::ScopedMachSendRight())); - continue; - } - - mach_port_name_t intermediate_port; - base::MachCreateError error_code; - intermediate_port = base::CreateIntermediateMachPort( - task_port, handle.TakeHandle().TakeMachPort(), &error_code); - if (intermediate_port == MACH_PORT_NULL) { - BrokerUMAError uma_error; - switch (error_code) { - case base::MachCreateError::ERROR_MAKE_RECEIVE_PORT: - uma_error = BrokerUMAError::ERROR_MAKE_RECEIVE_PORT; - break; - case base::MachCreateError::ERROR_SET_ATTRIBUTES: - uma_error = BrokerUMAError::ERROR_SET_ATTRIBUTES; - break; - case base::MachCreateError::ERROR_EXTRACT_DEST_RIGHT: - uma_error = BrokerUMAError::ERROR_EXTRACT_DEST_RIGHT; - break; - case base::MachCreateError::ERROR_SEND_MACH_PORT: - uma_error = BrokerUMAError::ERROR_SEND_MACH_PORT; - break; - } - ReportBrokerError(uma_error); - handle = PlatformHandleInTransit( - PlatformHandle(base::mac::ScopedMachSendRight())); - continue; - } - - handle = PlatformHandleInTransit::CreateForMachPortName(intermediate_port); - ReportBrokerError(BrokerUMAError::SUCCESS); - } - message->SetHandles(std::move(handles)); -} - -base::mac::ScopedMachSendRight MachPortRelay::ExtractPort( - mach_port_t port_name, - base::ProcessHandle process) { - // No extraction necessary for MACH_PORT_NULL. - if (port_name == MACH_PORT_NULL) - return base::mac::ScopedMachSendRight(); - - mach_port_t task_port = port_provider_->TaskForPid(process); - if (task_port == MACH_PORT_NULL) { - ReportBrokerError(BrokerUMAError::ERROR_TASK_FOR_PID); - return base::mac::ScopedMachSendRight(); - } - - mach_port_t extracted_right = MACH_PORT_NULL; - mach_msg_type_name_t extracted_right_type; - kern_return_t kr = - mach_port_extract_right(task_port, port_name, MACH_MSG_TYPE_MOVE_SEND, - &extracted_right, &extracted_right_type); - if (kr != KERN_SUCCESS) { - ReportBrokerError(BrokerUMAError::ERROR_EXTRACT_SOURCE_RIGHT); - return base::mac::ScopedMachSendRight(); - } - - ReportBrokerError(BrokerUMAError::SUCCESS); - DCHECK_EQ(static_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_PORT_SEND), - extracted_right_type); - return base::mac::ScopedMachSendRight(extracted_right); -} - -void MachPortRelay::AddObserver(Observer* observer) { - base::AutoLock locker(observers_lock_); - bool inserted = observers_.insert(observer).second; - DCHECK(inserted); -} - -void MachPortRelay::RemoveObserver(Observer* observer) { - base::AutoLock locker(observers_lock_); - observers_.erase(observer); -} - -void MachPortRelay::OnReceivedTaskPort(base::ProcessHandle process) { - base::AutoLock locker(observers_lock_); - for (auto* observer : observers_) - observer->OnProcessReady(process); -} - -} // namespace core -} // namespace mojo
diff --git a/mojo/core/mach_port_relay.h b/mojo/core/mach_port_relay.h deleted file mode 100644 index 4cb6de4..0000000 --- a/mojo/core/mach_port_relay.h +++ /dev/null
@@ -1,90 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MOJO_CORE_MACH_PORT_RELAY_H_ -#define MOJO_CORE_MACH_PORT_RELAY_H_ - -#include <set> -#include <vector> - -#include "base/macros.h" -#include "base/process/port_provider_mac.h" -#include "base/synchronization/lock.h" -#include "mojo/core/channel.h" - -namespace mojo { -namespace core { - -// The MachPortRelay is used by a privileged process, usually the root process, -// to manipulate Mach ports in a child process. Ports can be added to and -// extracted from a child process that has registered itself with the -// |base::PortProvider| used by this class. -class MachPortRelay : public base::PortProvider::Observer { - public: - class Observer { - public: - // Called by the MachPortRelay to notify observers that a new process is - // ready for Mach ports to be sent/received. There are no guarantees about - // the thread this is called on, including the presence of a MessageLoop. - // Implementations must not call AddObserver() or RemoveObserver() during - // this function, as doing so will deadlock. - virtual void OnProcessReady(base::ProcessHandle process) = 0; - }; - - // Used by a child process to receive Mach ports from a sender (privileged) - // process. The Mach port in |port| is interpreted as an intermediate Mach - // port. It replaces each Mach port with the final Mach port received from the - // intermediate port. This method takes ownership of the intermediate Mach - // port and gives ownership of the final Mach port to the caller. - // - // On failure, returns a null send right. - // - // See SendPortsToProcess() for the definition of intermediate and final Mach - // ports. - static base::mac::ScopedMachSendRight ReceiveSendRight( - base::mac::ScopedMachReceiveRight port); - - explicit MachPortRelay(base::PortProvider* port_provider); - ~MachPortRelay() override; - - // Sends the Mach ports attached to |message| to |process|. - // For each Mach port attached to |message|, a new Mach port, the intermediate - // port, is created in |process|. The message's Mach port is then sent over - // this intermediate port and the message is modified to refer to the name of - // the intermediate port. The Mach port received over the intermediate port in - // the child is referred to as the final Mach port. - // - // All ports in |message|'s set of handles are reset by this call, and all - // port names in the message's header are replaced with the new receive right - // ports. - void SendPortsToProcess(Channel::Message* message, - base::ProcessHandle process); - - // Given the name of a Mach send right within |process|, extracts an owned - // send right ref and returns it. May return a null port on failure. - base::mac::ScopedMachSendRight ExtractPort(mach_port_t port_name, - base::ProcessHandle process); - - // Observer interface. - void AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); - - base::PortProvider* port_provider() const { return port_provider_; } - - private: - // base::PortProvider::Observer implementation. - void OnReceivedTaskPort(base::ProcessHandle process) override; - - base::PortProvider* const port_provider_; - - base::Lock observers_lock_; - std::set<Observer*> observers_; - - DISALLOW_COPY_AND_ASSIGN(MachPortRelay); -}; - -} // namespace core -} // namespace mojo - -#endif // MOJO_CORE_MACH_PORT_RELAY_H_
diff --git a/mojo/core/node_controller.cc b/mojo/core/node_controller.cc index 5a796e9..58c9adc 100644 --- a/mojo/core/node_controller.cc +++ b/mojo/core/node_controller.cc
@@ -32,10 +32,6 @@ #include <windows.h> #endif -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/mach_port_relay.h" -#endif - #if !defined(OS_NACL) #include "crypto/random.h" #endif @@ -158,14 +154,6 @@ DVLOG(1) << "Initializing node " << name_; } -#if defined(OS_MACOSX) && !defined(OS_IOS) -void NodeController::CreateMachPortRelay(base::PortProvider* port_provider) { - base::AutoLock lock(mach_port_relay_lock_); - DCHECK(!mach_port_relay_); - mach_port_relay_.reset(new MachPortRelay(port_provider)); -} -#endif - void NodeController::SetIOTaskRunner( scoped_refptr<base::TaskRunner> task_runner) { io_task_runner_ = task_runner; @@ -1221,20 +1209,6 @@ } } -#if defined(OS_MACOSX) && !defined(OS_IOS) -MachPortRelay* NodeController::GetMachPortRelay() { - { - base::AutoLock lock(inviter_lock_); - // Return null if we're not the root. - if (bootstrap_inviter_channel_ || inviter_name_ != ports::kInvalidNodeName) - return nullptr; - } - - base::AutoLock lock(mach_port_relay_lock_); - return mach_port_relay_.get(); -} -#endif - void NodeController::CancelPendingPortMerges() { std::vector<ports::PortRef> ports_to_close;
diff --git a/mojo/core/node_controller.h b/mojo/core/node_controller.h index 0b44a6a..395da0f 100644 --- a/mojo/core/node_controller.h +++ b/mojo/core/node_controller.h
@@ -31,16 +31,11 @@ #include "mojo/core/system_impl_export.h" #include "mojo/public/cpp/platform/platform_handle.h" -namespace base { -class PortProvider; -} - namespace mojo { namespace core { class Broker; class Core; -class MachPortRelay; // The owner of ports::Node which facilitates core EDK implementation. All // public interface methods are safe to call from any thread. @@ -66,11 +61,6 @@ return io_task_runner_; } -#if defined(OS_MACOSX) && !defined(OS_IOS) - // Create the relay used to transfer mach ports between processes. - void CreateMachPortRelay(base::PortProvider* port_provider); -#endif - // Called exactly once, shortly after construction, and before any other // methods are called on this object. void SetIOTaskRunner(scoped_refptr<base::TaskRunner> io_task_runner); @@ -233,10 +223,6 @@ void OnChannelError(const ports::NodeName& from_node, NodeChannel* channel) override; -#if defined(OS_MACOSX) && !defined(OS_IOS) - MachPortRelay* GetMachPortRelay(); -#endif - // Cancels all pending port merges. These are merges which are supposed to // be requested from the inviter ASAP, and they may be cancelled if the // connection to the inviter is broken or never established. @@ -335,12 +321,6 @@ std::unique_ptr<Broker> broker_; #endif -#if defined(OS_MACOSX) && !defined(OS_IOS) - base::Lock mach_port_relay_lock_; - // Relay for transferring mach ports to/from broker clients. - std::unique_ptr<MachPortRelay> mach_port_relay_; -#endif - DISALLOW_COPY_AND_ASSIGN(NodeController); };
diff --git a/mojo/core/ports/event.cc b/mojo/core/ports/event.cc index f3cf74e..a9bec67 100644 --- a/mojo/core/ports/event.cc +++ b/mojo/core/ports/event.cc
@@ -52,6 +52,14 @@ Event::PortDescriptor new_port_descriptor; }; +struct UserMessageReadAckRequestEventData { + uint64_t sequence_num_to_acknowledge; +}; + +struct UserMessageReadAckEventData { + uint64_t sequence_num_acknowledged; +}; + #pragma pack(pop) static_assert(sizeof(Event::PortDescriptor) % kPortsMessageAlignment == 0, @@ -75,6 +83,14 @@ static_assert(sizeof(MergePortEventData) % kPortsMessageAlignment == 0, "Invalid MergePortEventData size."); +static_assert(sizeof(UserMessageReadAckRequestEventData) % + kPortsMessageAlignment == + 0, + "Invalid UserMessageReadAckRequestEventData size."); + +static_assert(sizeof(UserMessageReadAckEventData) % kPortsMessageAlignment == 0, + "Invalid UserMessageReadAckEventData size."); + } // namespace Event::PortDescriptor::PortDescriptor() { @@ -378,6 +394,70 @@ data->new_port_descriptor = new_port_descriptor_; } +UserMessageReadAckRequestEvent::UserMessageReadAckRequestEvent( + const PortName& port_name, + uint64_t sequence_num_to_acknowledge) + : Event(Type::kUserMessageReadAckRequest, port_name), + sequence_num_to_acknowledge_(sequence_num_to_acknowledge) { + DCHECK(sequence_num_to_acknowledge); +} + +UserMessageReadAckRequestEvent::~UserMessageReadAckRequestEvent() = default; + +// static +ScopedEvent UserMessageReadAckRequestEvent::Deserialize( + const PortName& port_name, + const void* buffer, + size_t num_bytes) { + if (num_bytes < sizeof(UserMessageReadAckRequestEventData)) + return nullptr; + + const auto* data = + static_cast<const UserMessageReadAckRequestEventData*>(buffer); + return std::make_unique<UserMessageReadAckRequestEvent>( + port_name, data->sequence_num_to_acknowledge); +} + +size_t UserMessageReadAckRequestEvent::GetSerializedDataSize() const { + return sizeof(UserMessageReadAckRequestEventData); +} + +void UserMessageReadAckRequestEvent::SerializeData(void* buffer) const { + auto* data = static_cast<UserMessageReadAckRequestEventData*>(buffer); + data->sequence_num_to_acknowledge = sequence_num_to_acknowledge_; +} + +UserMessageReadAckEvent::UserMessageReadAckEvent( + const PortName& port_name, + uint64_t sequence_num_acknowledged) + : Event(Type::kUserMessageReadAck, port_name), + sequence_num_acknowledged_(sequence_num_acknowledged) { + DCHECK(sequence_num_acknowledged); +} + +UserMessageReadAckEvent::~UserMessageReadAckEvent() = default; + +// static +ScopedEvent UserMessageReadAckEvent::Deserialize(const PortName& port_name, + const void* buffer, + size_t num_bytes) { + if (num_bytes < sizeof(UserMessageReadAckEventData)) + return nullptr; + + const auto* data = static_cast<const UserMessageReadAckEventData*>(buffer); + return std::make_unique<UserMessageReadAckEvent>( + port_name, data->sequence_num_acknowledged); +} + +size_t UserMessageReadAckEvent::GetSerializedDataSize() const { + return sizeof(UserMessageReadAckEventData); +} + +void UserMessageReadAckEvent::SerializeData(void* buffer) const { + auto* data = static_cast<UserMessageReadAckEventData*>(buffer); + data->sequence_num_acknowledged = sequence_num_acknowledged_; +} + } // namespace ports } // namespace core } // namespace mojo
diff --git a/mojo/core/ports/event.h b/mojo/core/ports/event.h index c9a7d6a..55c081e3 100644 --- a/mojo/core/ports/event.h +++ b/mojo/core/ports/event.h
@@ -56,6 +56,13 @@ // Used to request the merging of two routes via two sacrificial receiving // ports, one from each route. kMergePort, + + // Used to request that the conjugate port acknowledges read messages by + // sending back a UserMessageReadAck. + kUserMessageReadAckRequest, + + // Used to acknowledge read messages to the conjugate. + kUserMessageReadAck, }; #pragma pack(push, 1) @@ -277,6 +284,49 @@ DISALLOW_COPY_AND_ASSIGN(MergePortEvent); }; +class COMPONENT_EXPORT(MOJO_CORE_PORTS) UserMessageReadAckRequestEvent + : public Event { + public: + UserMessageReadAckRequestEvent(const PortName& port_name, + uint64_t sequence_num_to_acknowledge); + ~UserMessageReadAckRequestEvent() override; + + uint64_t sequence_num_to_acknowledge() const { + return sequence_num_to_acknowledge_; + } + + static ScopedEvent Deserialize(const PortName& port_name, + const void* buffer, + size_t num_bytes); + + private: + size_t GetSerializedDataSize() const override; + void SerializeData(void* buffer) const override; + + uint64_t sequence_num_to_acknowledge_; +}; + +class COMPONENT_EXPORT(MOJO_CORE_PORTS) UserMessageReadAckEvent : public Event { + public: + UserMessageReadAckEvent(const PortName& port_name, + uint64_t sequence_num_acknowledged); + ~UserMessageReadAckEvent() override; + + uint64_t sequence_num_acknowledged() const { + return sequence_num_acknowledged_; + } + + static ScopedEvent Deserialize(const PortName& port_name, + const void* buffer, + size_t num_bytes); + + private: + size_t GetSerializedDataSize() const override; + void SerializeData(void* buffer) const override; + + uint64_t sequence_num_acknowledged_; +}; + } // namespace ports } // namespace core } // namespace mojo
diff --git a/mojo/core/ports/node.cc b/mojo/core/ports/node.cc index 3f24c97d..c895dee8 100644 --- a/mojo/core/ports/node.cc +++ b/mojo/core/ports/node.cc
@@ -313,6 +313,10 @@ port_status->queued_message_count = port->message_queue.queued_message_count(); port_status->queued_num_bytes = port->message_queue.queued_num_bytes(); + port_status->unacknowledged_message_count = + port->next_sequence_num_to_send - port->last_sequence_num_acknowledged - + 1; + return OK; } @@ -323,6 +327,8 @@ DVLOG(4) << "GetMessage for " << port_ref.name() << "@" << name_; + NodeName peer_node_name; + ScopedEvent ack_event; { SinglePortLocker locker(&port_ref); auto* port = locker.port(); @@ -338,8 +344,17 @@ return ERROR_PORT_PEER_CLOSED; port->message_queue.GetNextMessage(message, filter); + if (*message && + (*message)->sequence_num() == port->sequence_num_to_acknowledge) { + peer_node_name = port->peer_node_name; + ack_event = std::make_unique<UserMessageReadAckEvent>( + port->peer_port_name, port->sequence_num_to_acknowledge); + } } + if (ack_event) + delegate_->ForwardEvent(peer_node_name, std::move(ack_event)); + // Allow referenced ports to trigger PortStatusChanged calls. if (*message) { for (size_t i = 0; i < (*message)->num_ports(); ++i) { @@ -381,6 +396,35 @@ return rv; } +int Node::SetAcknowledgeRequestInterval( + const PortRef& port_ref, + uint64_t sequence_num_acknowledge_interval) { + NodeName peer_node_name; + PortName peer_port_name; + uint64_t sequence_num_to_request_ack = 0; + { + SinglePortLocker locker(&port_ref); + auto* port = locker.port(); + if (port->state != Port::kReceiving) + return ERROR_PORT_STATE_UNEXPECTED; + + port->sequence_num_acknowledge_interval = sequence_num_acknowledge_interval; + if (!sequence_num_acknowledge_interval) + return OK; + + peer_node_name = port->peer_node_name; + peer_port_name = port->peer_port_name; + + sequence_num_to_request_ack = port->last_sequence_num_acknowledged + + sequence_num_acknowledge_interval; + } + + delegate_->ForwardEvent(peer_node_name, + std::make_unique<UserMessageReadAckRequestEvent>( + peer_port_name, sequence_num_to_request_ack)); + return OK; +} + int Node::AcceptEvent(ScopedEvent event) { switch (event->type()) { case Event::Type::kUserMessage: @@ -395,6 +439,11 @@ return OnObserveClosure(Event::Cast<ObserveClosureEvent>(&event)); case Event::Type::kMergePort: return OnMergePort(Event::Cast<MergePortEvent>(&event)); + case Event::Type::kUserMessageReadAckRequest: + return OnUserMessageReadAckRequest( + Event::Cast<UserMessageReadAckRequestEvent>(&event)); + case Event::Type::kUserMessageReadAck: + return OnUserMessageReadAck(Event::Cast<UserMessageReadAckEvent>(&event)); } return OOPS(ERROR_NOT_IMPLEMENTED); } @@ -593,7 +642,7 @@ << event->proxy_target_port_name() << "@" << event->proxy_target_node_name(); - bool update_status = false; + bool peer_changed = false; ScopedEvent event_to_forward; NodeName event_target_node; { @@ -613,7 +662,7 @@ event_target_node = event->proxy_node_name(); event_to_forward = std::make_unique<ObserveProxyAckEvent>( event->proxy_port_name(), port->next_sequence_num_to_send - 1); - update_status = true; + peer_changed = true; DVLOG(2) << "Forwarding ObserveProxyAck from " << event->port_name() << "@" << name_ << " to " << event->proxy_port_name() << "@" << event_target_node; @@ -648,8 +697,14 @@ if (event_to_forward) delegate_->ForwardEvent(event_target_node, std::move(event_to_forward)); - if (update_status) + if (peer_changed) { + // Re-send ack and/or ack requests, as the previous peer proxy may not have + // forwarded the previous request before it died. + MaybeResendAck(port_ref); + MaybeResendAckRequest(port_ref); + delegate_->PortStatusChanged(port_ref); + } return OK; } @@ -732,6 +787,11 @@ // may be semantically confusing since the forwarding port is not actually // closed. Consider replacing this with a new event type. event->set_last_sequence_num(port->next_sequence_num_to_send - 1); + + // Treat the closure as an acknowledge that all sent messages have been + // read from the other end. + port->last_sequence_num_acknowledged = + port->next_sequence_num_to_send - 1; } else { // We haven't yet reached the receiving peer of the closed port, so we'll // forward the message along as-is. @@ -799,6 +859,114 @@ false /* allow_close_on_bad_state */); } +int Node::OnUserMessageReadAckRequest( + std::unique_ptr<UserMessageReadAckRequestEvent> event) { + PortRef port_ref; + GetPort(event->port_name(), &port_ref); + + DVLOG(1) << "AckRequest " << port_ref.name() << "@" << name_ << " sequence " + << event->sequence_num_to_acknowledge(); + + if (!port_ref.is_valid()) + return ERROR_PORT_UNKNOWN; + + NodeName peer_node_name; + std::unique_ptr<Event> event_to_send; + { + SinglePortLocker locker(&port_ref); + auto* port = locker.port(); + + peer_node_name = port->peer_node_name; + if (port->state == Port::kProxying) { + // Proxies simply forward the ack request to their peer. + event->set_port_name(port->peer_port_name); + event_to_send = std::move(event); + } else { + uint64_t current_sequence_num = + port->message_queue.next_sequence_num() - 1; + // Either this is requesting an ack for a sequence number already read, or + // else for a sequence number that is yet to be read. + if (current_sequence_num >= event->sequence_num_to_acknowledge()) { + // If the current sequence number to read already exceeds the ack + // request, send an ack immediately. + event_to_send = std::make_unique<UserMessageReadAckEvent>( + port->peer_port_name, current_sequence_num); + + // This might be a late or duplicate acknowledge request, that's + // requesting acknowledge for an already read message. There may already + // have been a request for future reads, so take care not to back up + // the requested acknowledge counter. + if (current_sequence_num > port->sequence_num_to_acknowledge) + port->sequence_num_to_acknowledge = current_sequence_num; + } else { + // This is request to ack a sequence number that hasn't been read yet. + // The state of the port can either be that it already has a + // future-requested ack, or not. Because ack requests aren't guaranteed + // to arrive in order, store the earlier of the current queued request + // and the new one, if one was already requested. + bool has_queued_ack_request = + port->sequence_num_to_acknowledge > current_sequence_num; + if (!has_queued_ack_request || + port->sequence_num_to_acknowledge > + event->sequence_num_to_acknowledge()) { + port->sequence_num_to_acknowledge = + event->sequence_num_to_acknowledge(); + } + return OK; + } + } + } + + delegate_->ForwardEvent(peer_node_name, std::move(event_to_send)); + + return OK; +} + +int Node::OnUserMessageReadAck(std::unique_ptr<UserMessageReadAckEvent> event) { + PortRef port_ref; + GetPort(event->port_name(), &port_ref); + + DVLOG(1) << "Acknowledge " << port_ref.name() << "@" << name_ << " sequence " + << event->sequence_num_acknowledged(); + + NodeName peer_node_name; + ScopedEvent ack_request_event; + if (port_ref.is_valid()) { + SinglePortLocker locker(&port_ref); + auto* port = locker.port(); + + if (event->sequence_num_acknowledged() >= port->next_sequence_num_to_send) { + // TODO(http://crbug.com/980952): This is a malformed event. + // This could return a new error "ERROR_MALFORMED_EVENT" which the + // delegate could use as a signal to drop the peer node. + return OK; + } + + // Keep the largest acknowledge seen. + if (event->sequence_num_acknowledged() <= + port->last_sequence_num_acknowledged) { + // The acknowledge was late or a duplicate, it's safe to ignore it. + return OK; + } + + port->last_sequence_num_acknowledged = event->sequence_num_acknowledged(); + // Send another ack request if the interval is non-zero and the peer has + // not been closed. + if (port->sequence_num_acknowledge_interval && !port->peer_closed) { + peer_node_name = port->peer_node_name; + ack_request_event = std::make_unique<UserMessageReadAckRequestEvent>( + port->peer_port_name, port->last_sequence_num_acknowledged + + port->sequence_num_acknowledge_interval); + } + } + if (ack_request_event) + delegate_->ForwardEvent(peer_node_name, std::move(ack_request_event)); + + delegate_->PortStatusChanged(port_ref); + + return OK; +} + int Node::AddPortWithName(const PortName& port_name, scoped_refptr<Port> port) { PortLocker::AssertNoPortsLockedOnCurrentThread(); base::AutoLock lock(ports_lock_); @@ -1207,6 +1375,9 @@ if (rv != OK) return rv; + // Forward any pending acknowledge request. + MaybeForwardAckRequest(port_ref); + bool try_remove_proxy_immediately; ScopedEvent closure_event; NodeName closure_target_node; @@ -1484,6 +1655,71 @@ std::swap(port0->peer_port_name, port1->peer_port_name); } +void Node::MaybeResendAckRequest(const PortRef& port_ref) { + NodeName peer_node_name; + ScopedEvent ack_request_event; + { + SinglePortLocker locker(&port_ref); + auto* port = locker.port(); + if (port->state != Port::kReceiving) + return; + + if (!port->sequence_num_acknowledge_interval) + return; + + peer_node_name = port->peer_node_name; + ack_request_event = std::make_unique<UserMessageReadAckRequestEvent>( + port->peer_port_name, port->last_sequence_num_acknowledged + + port->sequence_num_acknowledge_interval); + } + + delegate_->ForwardEvent(peer_node_name, std::move(ack_request_event)); +} + +void Node::MaybeForwardAckRequest(const PortRef& port_ref) { + NodeName peer_node_name; + ScopedEvent ack_request_event; + { + SinglePortLocker locker(&port_ref); + auto* port = locker.port(); + if (port->state != Port::kProxying) + return; + + if (!port->sequence_num_to_acknowledge) + return; + + peer_node_name = port->peer_node_name; + ack_request_event = std::make_unique<UserMessageReadAckRequestEvent>( + port->peer_port_name, port->sequence_num_to_acknowledge); + + port->sequence_num_to_acknowledge = 0; + } + + delegate_->ForwardEvent(peer_node_name, std::move(ack_request_event)); +} + +void Node::MaybeResendAck(const PortRef& port_ref) { + NodeName peer_node_name; + ScopedEvent ack_event; + { + SinglePortLocker locker(&port_ref); + auto* port = locker.port(); + if (port->state != Port::kReceiving) + return; + + uint64_t last_sequence_num_read = + port->message_queue.next_sequence_num() - 1; + if (!port->sequence_num_to_acknowledge || !last_sequence_num_read) + return; + + peer_node_name = port->peer_node_name; + ack_event = std::make_unique<UserMessageReadAckEvent>( + port->peer_port_name, last_sequence_num_read); + } + + delegate_->ForwardEvent(peer_node_name, std::move(ack_event)); +} + Node::DelegateHolder::DelegateHolder(Node* node, NodeDelegate* delegate) : node_(node), delegate_(delegate) { DCHECK(node_);
diff --git a/mojo/core/ports/node.h b/mojo/core/ports/node.h index 9c771eb2..e806e1d 100644 --- a/mojo/core/ports/node.h +++ b/mojo/core/ports/node.h
@@ -44,6 +44,7 @@ bool peer_remote; size_t queued_message_count; size_t queued_num_bytes; + size_t unacknowledged_message_count; }; class MessageFilter; @@ -140,6 +141,16 @@ int SendUserMessage(const PortRef& port_ref, std::unique_ptr<UserMessageEvent> message); + // Makes the port send acknowledge requests to its conjugate to acknowledge + // at least every |sequence_number_acknowledge_interval| messages as they're + // read from the conjugate. The number of unacknowledged messages is exposed + // in the |unacknowledged_message_count| field of PortStatus. This allows + // bounding the number of unread and/or in-transit messages from this port + // to its conjugate between zero and |unacknowledged_message_count|. + int SetAcknowledgeRequestInterval( + const PortRef& port_ref, + uint64_t sequence_number_acknowledge_interval); + // Corresponding to NodeDelegate::ForwardEvent. int AcceptEvent(ScopedEvent event); @@ -200,6 +211,9 @@ int OnObserveProxyAck(std::unique_ptr<ObserveProxyAckEvent> event); int OnObserveClosure(std::unique_ptr<ObserveClosureEvent> event); int OnMergePort(std::unique_ptr<MergePortEvent> event); + int OnUserMessageReadAckRequest( + std::unique_ptr<UserMessageReadAckRequestEvent> event); + int OnUserMessageReadAck(std::unique_ptr<UserMessageReadAckEvent> event); int AddPortWithName(const PortName& port_name, scoped_refptr<Port> port); void ErasePort(const PortName& port_name); @@ -249,6 +263,21 @@ const PortName& port1_name, Port* port1); + // Sends an acknowledge request to the peer if the port has a non-zero + // |sequence_num_acknowledge_interval|. This needs to be done when the port's + // peer changes, as the previous peer proxy may not have forwarded any prior + // acknowledge request before deleting itself. + void MaybeResendAckRequest(const PortRef& port_ref); + + // Forwards a stored acknowledge request to the peer if the proxy has a + // non-zero |sequence_num_acknowledge_interval|. + void MaybeForwardAckRequest(const PortRef& port_ref); + + // Sends an acknowledge of the most recently read sequence number to the peer + // if any messages have been read, and the port has a non-zero + // |sequence_num_to_acknowledge|. + void MaybeResendAck(const PortRef& port_ref); + const NodeName name_; const DelegateHolder delegate_;
diff --git a/mojo/core/ports/port.cc b/mojo/core/ports/port.cc index 7186979..c3ead1e 100644 --- a/mojo/core/ports/port.cc +++ b/mojo/core/ports/port.cc
@@ -12,7 +12,10 @@ uint64_t next_sequence_num_to_receive) : state(kUninitialized), next_sequence_num_to_send(next_sequence_num_to_send), + last_sequence_num_acknowledged(next_sequence_num_to_send - 1), + sequence_num_acknowledge_interval(0), last_sequence_num_to_receive(0), + sequence_num_to_acknowledge(0), message_queue(next_sequence_num_to_receive), remove_proxy_on_last_message(false), peer_closed(false) {}
diff --git a/mojo/core/ports/port.h b/mojo/core/ports/port.h index d1a825e2..cc36568 100644 --- a/mojo/core/ports/port.h +++ b/mojo/core/ports/port.h
@@ -110,12 +110,30 @@ // originating from this port. uint64_t next_sequence_num_to_send; + // The largest acknowledged user message event sequence number. + uint64_t last_sequence_num_acknowledged; + + // The interval for which acknowledge requests will be sent. A value of N will + // cause an acknowledge request for |last_sequence_num_acknowledged| + N when + // initially set and on received acknowledge. This means that the lower bound + // for unread or in-transit messages is |next_sequence_num_to_send| - + // |last_sequence_num_acknowledged| + |sequence_number_acknowledge_interval|. + // If zero, no acknowledge requests are sent. + uint64_t sequence_num_acknowledge_interval; + // The sequence number of the last message this Port should ever expect to // receive in its lifetime. May be used to determine that a proxying port is // ready to be destroyed or that a receiving port's conjugate has been closed // and we know the sequence number of the last message it sent. uint64_t last_sequence_num_to_receive; + // The sequence number of the message for which this Port should send an + // acknowledge message. In the buffering state, holds the acknowledge request + // value that is forwarded to the peer on transition to proxying. + // This is zero in any port that's never received an acknowledge request, and + // in proxies that have forwarded a stored acknowledge. + uint64_t sequence_num_to_acknowledge; + // The queue of incoming user messages received by this Port. Only non-empty // for buffering or receiving Ports. When a buffering port enters the proxying // state, it flushes its queue and the proxy then bypasses the queue
diff --git a/mojo/core/ports/ports_unittest.cc b/mojo/core/ports/ports_unittest.cc index e3a2a085..40c278b 100644 --- a/mojo/core/ports/ports_unittest.cc +++ b/mojo/core/ports/ports_unittest.cc
@@ -139,6 +139,15 @@ return node_.SendUserMessage(port, NewUserMessageEvent(s, 0)); } + int SendMultipleMessages(const PortRef& port, size_t num_messages) { + for (size_t i = 0; i < num_messages; ++i) { + int result = SendStringMessage(port, ""); + if (result != OK) + return result; + } + return OK; + } + int SendStringMessageWithPort(const PortRef& port, const std::string& s, const PortName& sent_port_name) { @@ -167,6 +176,15 @@ return node_.GetMessage(port, message, nullptr) == OK && *message; } + bool ReadMultipleMessages(const PortRef& port, size_t num_messages) { + for (size_t i = 0; i < num_messages; ++i) { + ScopedMessage message; + if (!ReadMessage(port, &message)) + return false; + } + return true; + } + bool GetSavedMessage(ScopedMessage* message) { base::AutoLock lock(lock_); if (saved_messages_.empty()) { @@ -240,6 +258,14 @@ } } + uint64_t GetUnacknowledgedMessageCount(const PortRef& port_ref) { + PortStatus status; + if (node_.GetStatus(port_ref, &status) != OK) + return 0; + + return status.unacknowledged_message_count; + } + private: void ProcessEvents() { for (;;) { @@ -1638,6 +1664,72 @@ EXPECT_EQ(OK, node0.node().ClosePort(b)); } +TEST_F(PortsTest, SetAcknowledgeRequestInterval) { + TestNode node0(0); + AddNode(&node0); + + PortRef a0, a1; + EXPECT_EQ(OK, node0.node().CreatePortPair(&a0, &a1)); + EXPECT_EQ(0u, node0.GetUnacknowledgedMessageCount(a0)); + + // Send a batch of messages. + EXPECT_EQ(OK, node0.SendMultipleMessages(a0, 15)); + EXPECT_EQ(15u, node0.GetUnacknowledgedMessageCount(a0)); + EXPECT_TRUE(node0.ReadMultipleMessages(a1, 5)); + WaitForIdle(); + EXPECT_EQ(15u, node0.GetUnacknowledgedMessageCount(a0)); + + // Set to acknowledge every read message, and validate that already-read + // messages are acknowledged. + EXPECT_EQ(OK, node0.node().SetAcknowledgeRequestInterval(a0, 1)); + WaitForIdle(); + EXPECT_EQ(10u, node0.GetUnacknowledgedMessageCount(a0)); + + // Read a third of the messages from the other end. + EXPECT_TRUE(node0.ReadMultipleMessages(a1, 5)); + WaitForIdle(); + + EXPECT_EQ(5u, node0.GetUnacknowledgedMessageCount(a0)); + + TestNode node1(1); + AddNode(&node1); + + // Transfer a1 across to node1. + PortRef x0, x1; + CreatePortPair(&node0, &x0, &node1, &x1); + EXPECT_EQ(OK, node0.SendStringMessageWithPort(x0, "foo", a1)); + WaitForIdle(); + + ScopedMessage message; + ASSERT_TRUE(node1.ReadMessage(x1, &message)); + ASSERT_EQ(1u, message->num_ports()); + ASSERT_EQ(OK, node1.node().GetPort(message->ports()[0], &a1)); + + // Read the last third of the messages from the transferred node, and + // validate that the unacknowledge message count updates correctly. + EXPECT_TRUE(node1.ReadMultipleMessages(a1, 5)); + WaitForIdle(); + EXPECT_EQ(0u, node0.GetUnacknowledgedMessageCount(a0)); + + // Turn the acknowledges down and validate that they don't go on indefinitely. + EXPECT_EQ(OK, node0.node().SetAcknowledgeRequestInterval(a0, 0)); + EXPECT_EQ(OK, node0.SendMultipleMessages(a0, 10)); + WaitForIdle(); + EXPECT_TRUE(node1.ReadMultipleMessages(a1, 10)); + WaitForIdle(); + EXPECT_NE(0u, node0.GetUnacknowledgedMessageCount(a0)); + + // Close the far port and validate that the closure updates the unacknowledged + // count. + EXPECT_EQ(OK, node1.node().ClosePort(a1)); + WaitForIdle(); + EXPECT_EQ(0u, node0.GetUnacknowledgedMessageCount(a0)); + + EXPECT_EQ(OK, node0.node().ClosePort(a0)); + EXPECT_EQ(OK, node0.node().ClosePort(x0)); + EXPECT_EQ(OK, node1.node().ClosePort(x1)); +} + } // namespace test } // namespace ports } // namespace core
diff --git a/mojo/core/test/multiprocess_test_helper.cc b/mojo/core/test/multiprocess_test_helper.cc index f5723dc0..8784353 100644 --- a/mojo/core/test/multiprocess_test_helper.cc +++ b/mojo/core/test/multiprocess_test_helper.cc
@@ -35,10 +35,6 @@ #include "mojo/public/cpp/system/platform_handle.h" #include "testing/gtest/include/gtest/gtest.h" -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - #if !defined(OS_FUCHSIA) #include "mojo/public/cpp/platform/named_platform_channel.h" #endif @@ -212,26 +208,9 @@ break; } -#if defined(OS_MACOSX) && !defined(OS_IOS) - // This lock needs to be held while launching the child because the Mach port - // broker only allows task ports to be received from known child processes. - // However, it can only know the child process's pid after the child has - // launched. To prevent a race where the child process sends its task port - // before the pid has been registered, the lock needs to be held over both - // launch and child pid registration. - auto* mach_broker = mojo::core::DefaultMachBroker::Get(); - mach_broker->GetLock().Acquire(); -#endif - test_child_ = base::SpawnMultiProcessTestChild(test_child_main, command_line, options); -#if defined(OS_MACOSX) && !defined(OS_IOS) - if (test_child_.IsValid()) - mach_broker->ExpectPid(test_child_.Pid()); - mach_broker->GetLock().Release(); -#endif - if (launch_type == LaunchType::CHILD || launch_type == LaunchType::PEER) channel.RemoteProcessLaunchAttempted(); @@ -260,13 +239,6 @@ int rv = -1; WaitForMultiprocessTestChildExit(test_child_, TestTimeouts::action_timeout(), &rv); - -#if defined(OS_MACOSX) && !defined(OS_IOS) - auto* mach_broker = mojo::core::DefaultMachBroker::Get(); - base::AutoLock lock(mach_broker->GetLock()); - mach_broker->RemovePid(test_child_.Pid()); -#endif - test_child_.Close(); return rv; } @@ -282,10 +254,6 @@ auto& command_line = *base::CommandLine::ForCurrentProcess(); bool run_as_broker_client = command_line.HasSwitch(kRunAsBrokerClient); -#if defined(OS_MACOSX) && !defined(OS_IOS) - if (run_as_broker_client) - DefaultMachBroker::SendTaskPortToParent(); -#endif PlatformChannelEndpoint endpoint; #if !defined(OS_FUCHSIA)
diff --git a/mojo/core/test/run_all_unittests.cc b/mojo/core/test/run_all_unittests.cc index 882cd25..e666d89 100644 --- a/mojo/core/test/run_all_unittests.cc +++ b/mojo/core/test/run_all_unittests.cc
@@ -20,10 +20,6 @@ #include "mojo/public/tests/test_support_private.h" #include "testing/gtest/include/gtest/gtest.h" -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - int main(int argc, char** argv) { #if !defined(OS_ANDROID) // Silence death test thread warnings on Linux. We can afford to run our death @@ -49,11 +45,6 @@ } mojo::core::Init(mojo_config); -#if defined(OS_MACOSX) && !defined(OS_IOS) - mojo::core::SetMachPortProvider( - mojo::core::DefaultMachBroker::Get()->port_provider()); -#endif - mojo::test::TestSupport::Init(new mojo::core::test::TestSupportImpl()); base::TestIOThread test_io_thread(base::TestIOThread::kAutoStart);
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json index 1c7e6eb9..4222ff28 100644 --- a/net/http/transport_security_state_static.json +++ b/net/http/transport_security_state_static.json
@@ -75865,6 +75865,7 @@ { "name": "zlvd7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zunlong0.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zunlong918.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glassrom.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, // END OF 1-YEAR BULK HSTS ENTRIES // Only eTLD+1 domains can be submitted automatically to hstspreload.org, @@ -75971,8 +75972,6 @@ { "name": "mysa.is", "policy": "custom", "mode": "force-https", "include_subdomains": true }, { "name": "vensl.org", "policy": "custom", "mode": "force-https", "include_subdomains": true }, { "name": "aaron-schaal.de", "policy": "custom", "mode": "force-https", "include_subdomains": true }, - // TLS 1.3 - { "name": "glassrom.pw", "policy": "custom", "mode": "force-https", "include_subdomains": true }, // Expect-CT { "name": "crt.sh", "policy": "custom", @@ -76264,6 +76263,28 @@ { "name": "flagriculture.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, { "name": "floridaconsumerhelp.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, { "name": "sheriffpawneecountyne.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "tnwildlandfire.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "tnusedoil.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "safeathomeohio.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "sflhidta.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "ohiobusinesscentral.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "schoolsafety.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "solarium.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "cavecreekaz.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "usidfc.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "idfc.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "pbrb.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "leavenworthcounty.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "trpa.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "hudsonwi.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "woodfordcountyky.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "franklincountyny.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "townofhulbertok.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "gilsum-nh.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "ahidta.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "pleasantonca.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "elonma.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, + { "name": "carrolcountyohioelections.gov", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, { "name": "bmoattachments.org", "policy": "public-suffix-requested", "mode": "force-https", "include_subdomains": true }, // END OF ETLD-OWNER REQUESTED ENTRIES
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 552b216..50599f61 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -12840,7 +12840,13 @@ EXPECT_EQ(6, req->GetRawBodyBytes()); } -TEST_F(URLRequestTestFTP, FtpAuthCancellation) { +// Flaky on Mac. See https://crbug.com/980821 +#if defined(OS_MACOSX) +#define MAYBE_FtpAuthCancellation DISABLED_FtpAuthCancellation +#else +#define MAYBE_FtpAuthCancellation FtpAuthCancellation +#endif +TEST_F(URLRequestTestFTP, MAYBE_FtpAuthCancellation) { ftp_test_server_.set_no_anonymous_ftp_user(true); ASSERT_TRUE(ftp_test_server_.Start()); TestDelegate d;
diff --git a/remoting/host/security_key/security_key_ipc_server_unittest.cc b/remoting/host/security_key/security_key_ipc_server_unittest.cc index 185416a..89a88638 100644 --- a/remoting/host/security_key/security_key_ipc_server_unittest.cc +++ b/remoting/host/security_key/security_key_ipc_server_unittest.cc
@@ -16,7 +16,6 @@ #include "base/run_loop.h" #include "build/build_config.h" #include "ipc/ipc_channel.h" -#include "mojo/public/cpp/platform/features.h" #include "mojo/public/cpp/platform/named_platform_channel.h" #include "mojo/public/cpp/system/isolated_connection.h" #include "remoting/host/client_session_details.h" @@ -465,8 +464,7 @@ // exists. Creating the servers in a loop below will flakily fail because the // channel shutdown is a series of asynchronous tasks posted on the IO // thread, and there is not a way to synchronize it with the test main thread. - if (base::FeatureList::IsEnabled(mojo::features::kMojoChannelMac)) - return; + return; #endif // defined(OS_MACOSX) // Test that servers correctly close pending OS connections on
diff --git a/services/device/generic_sensor/linux/sensor_device_manager.cc b/services/device/generic_sensor/linux/sensor_device_manager.cc index f3eabdf..21d399e 100644 --- a/services/device/generic_sensor/linux/sensor_device_manager.cc +++ b/services/device/generic_sensor/linux/sensor_device_manager.cc
@@ -177,8 +177,6 @@ delegate_, type, device_node)); } -void SensorDeviceManager::OnDeviceChanged(ScopedUdevDevicePtr) { - NOTIMPLEMENTED(); -} +void SensorDeviceManager::OnDeviceChanged(ScopedUdevDevicePtr) {} } // namespace device
diff --git a/services/device/hid/hid_service_linux.cc b/services/device/hid/hid_service_linux.cc index 032def3..86a9992 100644 --- a/services/device/hid/hid_service_linux.cc +++ b/services/device/hid/hid_service_linux.cc
@@ -180,7 +180,7 @@ } } - void OnDeviceChanged(ScopedUdevDevicePtr) override { NOTIMPLEMENTED(); } + void OnDeviceChanged(ScopedUdevDevicePtr) override {} SEQUENCE_CHECKER(sequence_checker_); std::unique_ptr<UdevWatcher> watcher_;
diff --git a/services/device/usb/usb_service_linux.cc b/services/device/usb/usb_service_linux.cc index 5889331..d95e44e 100644 --- a/services/device/usb/usb_service_linux.cc +++ b/services/device/usb/usb_service_linux.cc
@@ -204,9 +204,7 @@ } void UsbServiceLinux::BlockingTaskRunnerHelper::OnDeviceChanged( - ScopedUdevDevicePtr) { - NOTIMPLEMENTED(); -} + ScopedUdevDevicePtr) {} UsbServiceLinux::UsbServiceLinux() : UsbService(),
diff --git a/services/identity/BUILD.gn b/services/identity/BUILD.gn index 8a4ce0a..8af1424f 100644 --- a/services/identity/BUILD.gn +++ b/services/identity/BUILD.gn
@@ -20,7 +20,9 @@ "//base", "//components/signin/core/browser:internals", "//components/signin/core/browser:shared", - "//services/identity/public/cpp:cpp", + "//components/signin/public/identity_manager", + "//google_apis", + "//services/identity/public/cpp:cpp_types", "//services/identity/public/mojom", "//services/service_manager/public/cpp", "//services/service_manager/public/mojom", @@ -29,33 +31,23 @@ source_set("tests") { testonly = true + + sources = [ + "identity_accessor_impl_unittest.cc", + ] + deps = [ ":lib", "//base", "//base/test:test_support", - "//components/image_fetcher/core:test_support", - "//components/prefs:test_support", - "//components/signin/core/browser:internals", - "//components/signin/core/browser:internals_test_support", "//components/signin/core/browser:shared", - "//components/sync_preferences:test_support", - "//mojo/public/cpp/bindings", - "//services/identity/public/cpp", - "//services/identity/public/cpp:test_support", - "//services/identity/public/cpp:tests", + "//components/signin/public/identity_manager:test_support", + "//services/identity/public/cpp:cpp_types", "//services/identity/public/mojom", "//services/service_manager/public/cpp", "//services/service_manager/public/cpp/test:test_support", - "//testing/gmock", "//testing/gtest", ] - sources = [ - "identity_accessor_impl_unittest.cc", - "public/cpp/access_token_fetcher_unittest.cc", - "public/cpp/identity_manager_unittest.cc", - "public/cpp/identity_test_environment_unittest.cc", - "public/cpp/primary_account_access_token_fetcher_unittest.cc", - ] } if (is_android) {
diff --git a/services/identity/DEPS b/services/identity/DEPS index e000af0..1adae0f 100644 --- a/services/identity/DEPS +++ b/services/identity/DEPS
@@ -1,17 +1,8 @@ include_rules = [ - "+components/image_fetcher/core/fake_image_decoder.h", - "+components/prefs/pref_service.h", "+components/signin/core/browser/account_info.h", - "+components/signin/core/browser/account_tracker_service.h", - "+components/signin/core/browser/device_id_helper.h", - "+components/signin/core/browser/fake_profile_oauth2_token_service.h", "+components/signin/core/browser/profile_oauth2_token_service.h", - "+components/signin/core/browser/set_accounts_in_cookie_result.h", - "+components/signin/core/browser/primary_account_manager.h", - "+components/signin/core/browser/primary_account_policy_manager_impl.h", - "+components/signin/core/browser/test_signin_client.h", - "+components/signin/public", - "+components/sync_preferences/testing_pref_service_syncable.h", + "+components/signin/public/identity_manager/identity_manager.h", + "+components/signin/public/identity_manager/identity_test_environment.h", "+google_apis/gaia/core_account_id.h", "+google_apis/gaia/google_service_auth_error.h", ]
diff --git a/services/identity/identity_accessor_impl.h b/services/identity/identity_accessor_impl.h index c0eb010..64b59c4 100644 --- a/services/identity/identity_accessor_impl.h +++ b/services/identity/identity_accessor_impl.h
@@ -11,9 +11,9 @@ #include "base/callback_list.h" #include "components/signin/core/browser/account_info.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "google_apis/gaia/core_account_id.h" #include "services/identity/public/cpp/account_state.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/cpp/scope_set.h" #include "services/identity/public/mojom/identity_accessor.mojom.h"
diff --git a/services/identity/identity_accessor_impl_unittest.cc b/services/identity/identity_accessor_impl_unittest.cc index aaacd17..3ba65d8 100644 --- a/services/identity/identity_accessor_impl_unittest.cc +++ b/services/identity/identity_accessor_impl_unittest.cc
@@ -7,9 +7,9 @@ #include "base/test/scoped_task_environment.h" #include "build/build_config.h" #include "components/signin/core/browser/account_info.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "services/identity/identity_service.h" #include "services/identity/public/cpp/account_state.h" -#include "services/identity/public/cpp/identity_test_environment.h" #include "services/identity/public/cpp/scope_set.h" #include "services/identity/public/mojom/account.mojom.h" #include "services/identity/public/mojom/constants.mojom.h"
diff --git a/services/identity/identity_service.cc b/services/identity/identity_service.cc index e4aa801c..6eb1992d 100644 --- a/services/identity/identity_service.cc +++ b/services/identity/identity_service.cc
@@ -7,8 +7,8 @@ #include <utility> #include "base/bind.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "services/identity/identity_accessor_impl.h" -#include "services/identity/public/cpp/identity_manager.h" namespace identity {
diff --git a/services/identity/identity_service.h b/services/identity/identity_service.h index ee407ca6..bc35d4c 100644 --- a/services/identity/identity_service.h +++ b/services/identity/identity_service.h
@@ -5,9 +5,8 @@ #ifndef SERVICES_IDENTITY_IDENTITY_SERVICE_H_ #define SERVICES_IDENTITY_IDENTITY_SERVICE_H_ -#include "components/signin/core/browser/primary_account_manager.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "mojo/public/cpp/bindings/strong_binding_set.h" -#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/mojom/identity_accessor.mojom.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/service.h"
diff --git a/services/identity/public/README.md b/services/identity/public/README.md deleted file mode 100644 index d3e9793..0000000 --- a/services/identity/public/README.md +++ /dev/null
@@ -1,8 +0,0 @@ -//services/identity/public/cpp contains the next-generation C++ API for -interacting with the user's Google identities. This library is almost certainly -what you want to use if you are developing a browser feature. See -//services/identity/public/cpp/README.md for details. - -If you are looking to connect to the Identity Service (e.g., if you are -developing a feature that is intended to run out of the browser process), use -//services/identity/public/mojom.
diff --git a/services/identity/public/cpp/BUILD.gn b/services/identity/public/cpp/BUILD.gn index 049056e..08206220 100644 --- a/services/identity/public/cpp/BUILD.gn +++ b/services/identity/public/cpp/BUILD.gn
@@ -2,52 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -source_set("cpp") { - sources = [ - "access_token_fetcher.cc", - "access_token_fetcher.h", - "access_token_info.cc", - "access_token_info.h", - "accounts_cookie_mutator.h", - "accounts_cookie_mutator_impl.cc", - "accounts_cookie_mutator_impl.h", - "accounts_in_cookie_jar_info.cc", - "accounts_in_cookie_jar_info.h", - "accounts_mutator.h", - "diagnostics_provider.h", - "diagnostics_provider_impl.cc", - "diagnostics_provider_impl.h", - "identity_manager.cc", - "identity_manager.h", - "primary_account_access_token_fetcher.cc", - "primary_account_access_token_fetcher.h", - "primary_account_mutator.h", - "primary_account_mutator_impl.cc", - "primary_account_mutator_impl.h", - ] - - if (!is_android && !is_ios) { - sources += [ - "accounts_mutator_impl.cc", - "accounts_mutator_impl.h", - ] - } - - configs += [ "//build/config/compiler:wexit_time_destructors" ] - - public_deps = [ - "//components/signin/core/browser:internals", - "//components/signin/core/browser:shared", - "//components/signin/core/browser:signin_buildflags", - "//services/identity/public/cpp:cpp_types", - "//services/network/public/cpp", - ] - - deps = [ - "//components/prefs:prefs", - ] -} - # A source_set for types which the public interfaces depend on for typemapping. # This cannot itself depend on the main public interfaces target. source_set("cpp_types") { @@ -62,59 +16,6 @@ configs += [ "//build/config/compiler:wexit_time_destructors" ] } -source_set("test_support") { - testonly = true - sources = [ - "identity_test_environment.cc", - "identity_test_environment.h", - "identity_test_utils.cc", - "identity_test_utils.h", - "test_identity_manager_observer.cc", - "test_identity_manager_observer.h", - ] - - public_deps = [ - ":cpp", - "//components/signin/core/browser:internals_test_support", - "//components/sync_preferences:test_support", - "//google_apis:test_support", - ] - - deps = [ - "//components/image_fetcher/core:test_support", - "//components/signin/core/browser", - ] - - if (is_ios) { - deps += [ "//components/signin/ios/browser" ] - } -} - -source_set("tests") { - testonly = true - sources = [ - "accounts_cookie_mutator_unittest.cc", - "accounts_mutator_unittest.cc", - "diagnostics_provider_unittest.cc", - ] - - deps = [ - ":cpp", - ":test_support", - "//base", - "//base/test:test_support", - "//components/signin/core/browser:internals_test_support", - "//components/sync_preferences:test_support", - "//services/network:test_support", - "//testing/gmock", - "//testing/gtest", - ] - - if (!is_chromeos) { - sources += [ "primary_account_mutator_unittest.cc" ] - } -} - source_set("manifest") { sources = [ "manifest.cc",
diff --git a/services/identity/public/cpp/DEPS b/services/identity/public/cpp/DEPS deleted file mode 100644 index 050b23b..0000000 --- a/services/identity/public/cpp/DEPS +++ /dev/null
@@ -1,56 +0,0 @@ -include_rules = [ - "+components/image_fetcher/core/fake_image_decoder.h", - "+components/prefs/testing_pref_service.h", - "+components/signin/core/browser/account_consistency_method.h", - "+components/signin/core/browser/account_fetcher_service.h", - "+components/signin/core/browser/account_info.h", - "+components/signin/core/browser/child_account_info_fetcher_android.h", - "+components/signin/core/browser/gaia_cookie_manager_service.h", - "+components/signin/core/browser/identity_manager_wrapper.h", - "+components/signin/core/browser/list_accounts_test_utils.h", - "+components/signin/core/browser/oauth2_token_service_delegate_android.h", - "+components/signin/core/browser/signin_buildflags.h", - "+components/signin/core/browser/signin_client.h", - "+components/signin/core/browser/signin_metrics.h", - "+components/signin/core/browser/signin_pref_names.h", - "+components/signin/core/browser/signin_switches.h", - "+components/signin/core/browser/ubertoken_fetcher_impl.h", - "+components/signin/core/browser/ubertoken_fetcher.h", - "+google_apis/gaia/gaia_auth_fetcher.h", - "+google_apis/gaia/gaia_auth_util.h", - "+google_apis/gaia/google_service_auth_error.h", - "+google_apis/gaia/oauth2_access_token_consumer.h", - "+google_apis/gaia/oauth2_access_token_manager.h", - "+google_apis/gaia/oauth2_token_service.h", - "+google_apis/gaia/oauth2_token_service_delegate.h", - "+google_apis/gaia/oauth2_token_service_observer.h", - "+services/network/public/cpp", -] - -specific_include_rules = { - "access_token_fetcher_unittest.cc": [ - "+google_apis/gaia/oauth2_token_service_delegate.h", - "+services/network/test/test_url_loader_factory.h", - ], - "accounts_cookie_mutator_unittest.cc" : [ - "+google_apis/gaia/gaia_constants.h", - "+google_apis/gaia/gaia_urls.h", - "+services/network/test/test_url_loader_factory.h", - "+services/network/test/test_utils.h", - ], - "accounts_mutator_unittest.cc": [ - "+services/network/test/test_url_loader_factory.h", - ], - "identity_test_environment.cc": [ - "+components/signin/ios/browser/device_accounts_provider.h", - "+components/signin/ios/browser/profile_oauth2_token_service_ios_delegate.h", - ], - "identity_manager_unittest.cc": [ - "+google_apis/gaia/oauth2_token_service_delegate.h", - "+services/network/test/test_cookie_manager.h", - "+services/network/test/test_url_loader_factory.h", - ], - "diagnostics_provider_unittest.cc": [ - "+google_apis/gaia/fake_oauth2_token_service_delegate.h", - ] -}
diff --git a/services/network/BUILD.gn b/services/network/BUILD.gn index ba81fa45..d01715a 100644 --- a/services/network/BUILD.gn +++ b/services/network/BUILD.gn
@@ -88,6 +88,8 @@ "origin_policy/origin_policy_fetcher.h", "origin_policy/origin_policy_manager.cc", "origin_policy/origin_policy_manager.h", + "origin_policy/origin_policy_parser.cc", + "origin_policy/origin_policy_parser.h", "p2p/socket.cc", "p2p/socket.h", "p2p/socket_manager.cc", @@ -313,6 +315,7 @@ "network_usage_accumulator_unittest.cc", "origin_policy/origin_policy_fetcher_unittest.cc", "origin_policy/origin_policy_manager_unittest.cc", + "origin_policy/origin_policy_parser_unittest.cc", "p2p/socket_tcp_server_unittest.cc", "p2p/socket_tcp_unittest.cc", "p2p/socket_test_utils.cc",
diff --git a/services/network/origin_policy/origin_policy_fetcher.cc b/services/network/origin_policy/origin_policy_fetcher.cc index d7fba35..e8f3d1a 100644 --- a/services/network/origin_policy/origin_policy_fetcher.cc +++ b/services/network/origin_policy/origin_policy_fetcher.cc
@@ -9,6 +9,8 @@ #include "net/base/load_flags.h" #include "net/http/http_util.h" #include "services/network/origin_policy/origin_policy_manager.h" +#include "services/network/origin_policy/origin_policy_parser.h" +#include "services/network/public/cpp/resource_response.h" #include "services/network/public/cpp/simple_url_loader.h" namespace network { @@ -73,10 +75,10 @@ std::unique_ptr<std::string> policy_content) { // Fail hard if the policy could not be loaded. if (!policy_content || must_redirect_) { - Report(mojom::OriginPolicyState::kCannotLoadPolicy); - WorkDone(nullptr, mojom::OriginPolicyState::kCannotLoadPolicy); + Report(OriginPolicyState::kCannotLoadPolicy); + WorkDone(nullptr, OriginPolicyState::kCannotLoadPolicy); } else { - WorkDone(std::move(policy_content), mojom::OriginPolicyState::kLoaded); + WorkDone(std::move(policy_content), OriginPolicyState::kLoaded); } } @@ -91,9 +93,9 @@ } // Fail hard if the policy response follows an invalid redirect. - Report(mojom::OriginPolicyState::kInvalidRedirect); + Report(OriginPolicyState::kInvalidRedirect); - WorkDone(nullptr, mojom::OriginPolicyState::kInvalidRedirect); + WorkDone(nullptr, OriginPolicyState::kInvalidRedirect); } void OriginPolicyFetcher::FetchPolicy(mojom::URLLoaderFactory* factory) { @@ -142,18 +144,19 @@ } void OriginPolicyFetcher::WorkDone(std::unique_ptr<std::string> policy_content, - mojom::OriginPolicyState state) { - auto result = mojom::OriginPolicy::New(); - result->state = state; - if (policy_content) { - result->contents = mojom::OriginPolicyContents::New(); - result->contents->raw_policy = *policy_content; - } - result->policy_url = fetch_url_; + OriginPolicyState state) { + OriginPolicy result; + result.state = state; + + // TODO(vogelheim): Parsing errors here will not cause the origin policy + // retrieval to fail. Decide if this is correct or if some/all parsing errors + // should make the policy invalid. + if (policy_content) + result.contents = OriginPolicyParser::Parse(*policy_content); + result.policy_url = fetch_url_; // Do not add code after this call as it will destroy this object. - owner_policy_manager_->FetcherDone(this, std::move(result), - std::move(callback_)); + owner_policy_manager_->FetcherDone(this, result, std::move(callback_)); } bool OriginPolicyFetcher::IsValidRedirect( @@ -176,6 +179,6 @@ } // TODO(andypaicu): use report_to implement this function -void OriginPolicyFetcher::Report(mojom::OriginPolicyState error_state) {} +void OriginPolicyFetcher::Report(OriginPolicyState error_state) {} } // namespace network
diff --git a/services/network/origin_policy/origin_policy_fetcher.h b/services/network/origin_policy/origin_policy_fetcher.h index 87681a08..00be556 100644 --- a/services/network/origin_policy/origin_policy_fetcher.h +++ b/services/network/origin_policy/origin_policy_fetcher.h
@@ -65,11 +65,11 @@ void FetchPolicy(mojom::URLLoaderFactory* factory); void WorkDone(std::unique_ptr<std::string> policy_content, - mojom::OriginPolicyState state); + OriginPolicyState state); bool IsValidRedirect(const net::RedirectInfo& redirect_info) const; - void Report(mojom::OriginPolicyState error_state); + void Report(OriginPolicyState error_state); // The owner of this object. When it is destroyed, this is destroyed too. OriginPolicyManager* const owner_policy_manager_;
diff --git a/services/network/origin_policy/origin_policy_fetcher_unittest.cc b/services/network/origin_policy/origin_policy_fetcher_unittest.cc index 8eed79c0..6607b17 100644 --- a/services/network/origin_policy/origin_policy_fetcher_unittest.cc +++ b/services/network/origin_policy/origin_policy_fetcher_unittest.cc
@@ -17,6 +17,8 @@ #include "services/network/origin_policy/origin_policy_constants.h" #include "services/network/origin_policy/origin_policy_fetcher.h" #include "services/network/origin_policy/origin_policy_manager.h" +#include "services/network/origin_policy/origin_policy_parser.h" +#include "services/network/public/cpp/origin_policy.h" #include "services/network/test/test_network_service_client.h" #include "testing/gtest/include/gtest/gtest.h" @@ -24,8 +26,7 @@ namespace { -void DummyRetrieveOriginPolicyCallback( - const network::mojom::OriginPolicyPtr result) {} +void DummyRetrieveOriginPolicyCallback(const network::OriginPolicy& result) {} } // namespace @@ -89,8 +90,10 @@ // The test server will know how to respond to the following requests: // `/.well-known/origin-policy` => use the response that was setup via // SetUpDefaultPolicyRedirect() or SetUpDefaultPolicyResponse() - // `/.well-known/origin-policy/policy-1` => 200, body: "manifest-1" - // `/.well-known/origin-policy/policy-2` => 200, body: "manifest-2" + // `/.well-known/origin-policy/policy-1` => 200, body: R"({ "feature-policy": + // ["geolocation http://example1.com"] })" + // `/.well-known/origin-policy/policy-2` => 200, body: R"({ "feature-policy": + // ["geolocation http://example2.com"] })" // `/.well-known/origin-policy/redirect-policy` => 302 redirect to policy-1 std::unique_ptr<net::test_server::HttpResponse> HandleResponse( const net::test_server::HttpRequest& request) { @@ -107,10 +110,12 @@ } } else if (request.relative_url == "/.well-known/origin-policy/policy-1") { response->set_code(net::HTTP_OK); - response->set_content("manifest-1"); + response->set_content( + R"({ "feature-policy": ["geolocation http://example1.com"] })"); } else if (request.relative_url == "/.well-known/origin-policy/policy-2") { response->set_code(net::HTTP_OK); - response->set_content("manifest-2"); + response->set_content( + R"({ "feature-policy": ["geolocation http://example2.com"] })"); } else if (request.relative_url == "/.well-known/origin-policy/redirect-policy") { response->set_code(net::HTTP_FOUND); @@ -229,19 +234,19 @@ run_loop_.Run(); } - const mojom::OriginPolicy* origin_policy_result() const { + const OriginPolicy* origin_policy_result() const { return origin_policy_result_.get(); } private: - void Callback(const mojom::OriginPolicyPtr result) { - origin_policy_result_ = result.Clone(); + void Callback(const OriginPolicy& result) { + origin_policy_result_ = std::make_unique<OriginPolicy>(result); run_loop_.Quit(); } base::RunLoop run_loop_; std::unique_ptr<OriginPolicyFetcher> fetcher_; - mojom::OriginPolicyPtr origin_policy_result_; + std::unique_ptr<OriginPolicy> origin_policy_result_; DISALLOW_COPY_AND_ASSIGN(TestOriginPolicyFetcherResult); }; @@ -249,14 +254,17 @@ TEST_F(OriginPolicyFetcherTest, EndToEnd) { const struct { const std::string version; - const mojom::OriginPolicyState expected_state; + const OriginPolicyState expected_state; const std::string expected_raw_policy; } kTests[] = { - {"policy-1", mojom::OriginPolicyState::kLoaded, "manifest-1"}, - {"policy-2", mojom::OriginPolicyState::kLoaded, "manifest-2"}, - {"", mojom::OriginPolicyState::kLoaded, "manifest-1"}, - {"redirect-policy", mojom::OriginPolicyState::kInvalidRedirect, ""}, - {"404-version", mojom::OriginPolicyState::kCannotLoadPolicy, ""}, + {"policy-1", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })"}, + {"policy-2", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })"}, + {"", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })"}, + {"redirect-policy", OriginPolicyState::kInvalidRedirect, ""}, + {"404-version", OriginPolicyState::kCannotLoadPolicy, ""}, }; SetUpDefaultPolicyRedirect("/.well-known/origin-policy/policy-1"); @@ -269,8 +277,10 @@ if (test.expected_raw_policy.empty()) { EXPECT_FALSE(tester.origin_policy_result()->contents); } else { - EXPECT_EQ(test.expected_raw_policy, - tester.origin_policy_result()->contents->raw_policy); + OriginPolicyContentsPtr expected_origin_policy_contents = + OriginPolicyParser::Parse(test.expected_raw_policy); + EXPECT_EQ(expected_origin_policy_contents, + tester.origin_policy_result()->contents); } } } @@ -293,18 +303,19 @@ TestOriginPolicyFetcherResult tester; tester.RetrieveOriginPolicy("", this); - EXPECT_EQ(mojom::OriginPolicyState::kInvalidRedirect, + EXPECT_EQ(OriginPolicyState::kInvalidRedirect, tester.origin_policy_result()->state); EXPECT_FALSE(tester.origin_policy_result()->contents); } } TEST_F(OriginPolicyFetcherTest, EndToEndDefaultNotRedirecting) { - SetUpDefaultPolicyResponse("manifest-1"); + SetUpDefaultPolicyResponse( + R"({ "feature-policy": ["geolocation http://example1.com"] })"); TestOriginPolicyFetcherResult tester; tester.RetrieveOriginPolicy("", this); - EXPECT_EQ(mojom::OriginPolicyState::kCannotLoadPolicy, + EXPECT_EQ(OriginPolicyState::kCannotLoadPolicy, tester.origin_policy_result()->state); EXPECT_FALSE(tester.origin_policy_result()->contents); }
diff --git a/services/network/origin_policy/origin_policy_manager.cc b/services/network/origin_policy/origin_policy_manager.cc index 17f7662..315d8dd 100644 --- a/services/network/origin_policy/origin_policy_manager.cc +++ b/services/network/origin_policy/origin_policy_manager.cc
@@ -49,8 +49,7 @@ if (header_info.policy_version == kOriginPolicyDeletePolicy) { if (iter != latest_version_map_.end()) latest_version_map_.erase(iter); - InvokeCallbackWithPolicyState(origin, - mojom::OriginPolicyState::kNoPolicyApplies, + InvokeCallbackWithPolicyState(origin, OriginPolicyState::kNoPolicyApplies, std::move(callback)); return; } @@ -58,8 +57,7 @@ // Process policy exceptions. if (iter != latest_version_map_.end() && iter->second == kExemptedOriginPolicyVersion) { - InvokeCallbackWithPolicyState(origin, - mojom::OriginPolicyState::kNoPolicyApplies, + InvokeCallbackWithPolicyState(origin, OriginPolicyState::kNoPolicyApplies, std::move(callback)); return; } @@ -69,11 +67,11 @@ // If there header has no policy version is present, use cached version, if // there is one. Otherwise, fail. if (iter == latest_version_map_.end()) { - InvokeCallbackWithPolicyState( - origin, - header_value.empty() ? mojom::OriginPolicyState::kNoPolicyApplies - : mojom::OriginPolicyState::kCannotLoadPolicy, - std::move(callback)); + InvokeCallbackWithPolicyState(origin, + header_value.empty() + ? OriginPolicyState::kNoPolicyApplies + : OriginPolicyState::kCannotLoadPolicy, + std::move(callback)); return; } header_info.policy_version = iter->second; @@ -93,9 +91,9 @@ } void OriginPolicyManager::FetcherDone(OriginPolicyFetcher* fetcher, - mojom::OriginPolicyPtr origin_policy, + const OriginPolicy& origin_policy, RetrieveOriginPolicyCallback callback) { - std::move(callback).Run(std::move(origin_policy)); + std::move(callback).Run(origin_policy); auto it = origin_policy_fetchers_.find(fetcher); DCHECK(it != origin_policy_fetchers_.end()); @@ -149,12 +147,12 @@ // static void OriginPolicyManager::InvokeCallbackWithPolicyState( const url::Origin& origin, - mojom::OriginPolicyState state, + OriginPolicyState state, RetrieveOriginPolicyCallback callback) { - mojom::OriginPolicyPtr result = mojom::OriginPolicy::New(); - result->state = state; - result->policy_url = OriginPolicyFetcher::GetDefaultPolicyURL(origin); - std::move(callback).Run(std::move(result)); + OriginPolicy result; + result.state = state; + result.policy_url = OriginPolicyFetcher::GetDefaultPolicyURL(origin); + std::move(callback).Run(result); } } // namespace network
diff --git a/services/network/origin_policy/origin_policy_manager.h b/services/network/origin_policy/origin_policy_manager.h index 950d29d1..95947f78 100644 --- a/services/network/origin_policy/origin_policy_manager.h +++ b/services/network/origin_policy/origin_policy_manager.h
@@ -56,7 +56,7 @@ // To be called by fetcher when it has finished its work. // This removes the fetcher which results in the fetcher being destroyed. void FetcherDone(OriginPolicyFetcher* fetcher, - mojom::OriginPolicyPtr origin_policy, + const OriginPolicy& origin_policy, RetrieveOriginPolicyCallback callback); // Retrieves an origin's default origin policy by attempting to fetch it @@ -91,7 +91,7 @@ // and the `policy_url` is the default policy url for the specified origin. static void InvokeCallbackWithPolicyState( const url::Origin& origin, - mojom::OriginPolicyState state, + OriginPolicyState state, RetrieveOriginPolicyCallback callback); // In memory cache of current policy version per origin.
diff --git a/services/network/origin_policy/origin_policy_manager_unittest.cc b/services/network/origin_policy/origin_policy_manager_unittest.cc index 0848a63..3be49ee2 100644 --- a/services/network/origin_policy/origin_policy_manager_unittest.cc +++ b/services/network/origin_policy/origin_policy_manager_unittest.cc
@@ -16,15 +16,15 @@ #include "services/network/network_service.h" #include "services/network/origin_policy/origin_policy_fetcher.h" #include "services/network/origin_policy/origin_policy_manager.h" +#include "services/network/origin_policy/origin_policy_parser.h" +#include "services/network/public/cpp/origin_policy.h" #include "testing/gtest/include/gtest/gtest.h" namespace network { namespace { -void DummyRetrieveOriginPolicyCallback( - const network::mojom::OriginPolicyPtr result) {} - +void DummyRetrieveOriginPolicyCallback(const network::OriginPolicy& result) {} } // namespace class OriginPolicyManagerTest : public testing::Test { @@ -84,10 +84,12 @@ "/.well-known/origin-policy/policy-1"); } else if (request.relative_url == "/.well-known/origin-policy/policy-1") { response->set_code(net::HTTP_OK); - response->set_content("manifest-1"); + response->set_content( + R"({ "feature-policy": ["geolocation http://example1.com"] })"); } else if (request.relative_url == "/.well-known/origin-policy/policy-2") { response->set_code(net::HTTP_OK); - response->set_content("manifest-2"); + response->set_content( + R"({ "feature-policy": ["geolocation http://example2.com"] })"); } else if (request.relative_url == "/.well-known/origin-policy/redirect-policy") { response->set_code(net::HTTP_FOUND); @@ -97,7 +99,8 @@ } else if (request.relative_url == "/.well-known/origin-policy/policy/policy-3") { response->set_code(net::HTTP_OK); - response->set_content("manifest-3"); + response->set_content( + R"({ "feature-policy": ["geolocation http://example3.com"] })"); } else if (request.relative_url == "/.well-known/delayed") { return std::make_unique<net::test_server::HungResponse>(); } else { @@ -249,20 +252,20 @@ run_loop_.Run(); } - const mojom::OriginPolicy* origin_policy_result() const { + const OriginPolicy* origin_policy_result() const { return origin_policy_result_.get(); } private: - void Callback(const mojom::OriginPolicyPtr result) { - origin_policy_result_ = result.Clone(); + void Callback(const OriginPolicy& result) { + origin_policy_result_ = std::make_unique<OriginPolicy>(result); run_loop_.Quit(); } base::RunLoop run_loop_; OriginPolicyManagerTest* fixture_; OriginPolicyManager* manager_; - mojom::OriginPolicyPtr origin_policy_result_; + std::unique_ptr<OriginPolicy> origin_policy_result_; DISALLOW_COPY_AND_ASSIGN(TestOriginPolicyManagerResult); }; @@ -270,28 +273,26 @@ TEST_F(OriginPolicyManagerTest, EndToEndPolicyRetrieve) { const struct { std::string header; - mojom::OriginPolicyState expected_state; + OriginPolicyState expected_state; std::string expected_raw_policy; } kTests[] = { - {"policy=policy-1", mojom::OriginPolicyState::kLoaded, "manifest-1"}, - {"policy=policy-2", mojom::OriginPolicyState::kLoaded, "manifest-2"}, - {"policy=redirect-policy", mojom::OriginPolicyState::kInvalidRedirect, - ""}, - {"policy=policy-2, report-to=endpoint", mojom::OriginPolicyState::kLoaded, - "manifest-2"}, + {"policy=policy-1", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })"}, + {"policy=policy-2", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })"}, + {"policy=redirect-policy", OriginPolicyState::kInvalidRedirect, ""}, + {"policy=policy-2, report-to=endpoint", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })"}, - {"", mojom::OriginPolicyState::kNoPolicyApplies, ""}, - {"unknown=keyword", mojom::OriginPolicyState::kCannotLoadPolicy, ""}, - {"report_to=endpoint", mojom::OriginPolicyState::kCannotLoadPolicy, ""}, - {"policy=policy/policy-3", mojom::OriginPolicyState::kCannotLoadPolicy, - ""}, + {"", OriginPolicyState::kNoPolicyApplies, ""}, + {"unknown=keyword", OriginPolicyState::kCannotLoadPolicy, ""}, + {"report_to=endpoint", OriginPolicyState::kCannotLoadPolicy, ""}, + {"policy=policy/policy-3", OriginPolicyState::kCannotLoadPolicy, ""}, - {"policy=../some-policy", mojom::OriginPolicyState::kCannotLoadPolicy, - ""}, - {"policy=..", mojom::OriginPolicyState::kCannotLoadPolicy, ""}, - {"policy=.", mojom::OriginPolicyState::kCannotLoadPolicy, ""}, - {"policy=something-else/..", mojom::OriginPolicyState::kCannotLoadPolicy, - ""}, + {"policy=../some-policy", OriginPolicyState::kCannotLoadPolicy, ""}, + {"policy=..", OriginPolicyState::kCannotLoadPolicy, ""}, + {"policy=.", OriginPolicyState::kCannotLoadPolicy, ""}, + {"policy=something-else/..", OriginPolicyState::kCannotLoadPolicy, ""}, }; for (const auto& test : kTests) { @@ -306,8 +307,10 @@ if (test.expected_raw_policy.empty()) { EXPECT_FALSE(tester.origin_policy_result()->contents); } else { - EXPECT_EQ(test.expected_raw_policy, - tester.origin_policy_result()->contents->raw_policy); + OriginPolicyContentsPtr expected_origin_policy_contents = + OriginPolicyParser::Parse(test.expected_raw_policy); + EXPECT_EQ(expected_origin_policy_contents, + tester.origin_policy_result()->contents); } } } @@ -339,7 +342,7 @@ TEST_F(OriginPolicyManagerTest, CacheStatesAfterPolicyFetches) { const struct { std::string header; - mojom::OriginPolicyState expected_state; + OriginPolicyState expected_state; std::string expected_raw_policy; const url::Origin& origin; } kTests[] = { @@ -348,66 +351,73 @@ // tests. // Nothing in the cache, no policy applies if header unspecified. - {"", mojom::OriginPolicyState::kNoPolicyApplies, "", - test_server_origin()}, + {"", OriginPolicyState::kNoPolicyApplies, "", test_server_origin()}, // An invalid header and nothing in the cache means an error. - {"invalid", mojom::OriginPolicyState::kCannotLoadPolicy, "", + {"invalid", OriginPolicyState::kCannotLoadPolicy, "", test_server_origin()}, // A valid header results in loaded policy. - {"policy=policy-1", mojom::OriginPolicyState::kLoaded, "manifest-1", + {"policy=policy-1", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })", test_server_origin()}, // With a valid header, we use that version if header unspecified. - {"", mojom::OriginPolicyState::kLoaded, "manifest-1", + {"", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })", test_server_origin()}, // A second valid header results in loaded policy. Changes cached last // version. - {"policy=policy-2", mojom::OriginPolicyState::kLoaded, "manifest-2", + {"policy=policy-2", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })", test_server_origin()}, // The latest version is correctly uses when header is unspecified. - {"", mojom::OriginPolicyState::kLoaded, "manifest-2", + {"", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })", test_server_origin()}, // Same as above for invalid header. - {"invalid", mojom::OriginPolicyState::kLoaded, "manifest-2", + {"invalid", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })", test_server_origin()}, // Delete the policy. {base::StrCat({"policy=", kOriginPolicyDeletePolicy}), - mojom::OriginPolicyState::kNoPolicyApplies, "", test_server_origin()}, + OriginPolicyState::kNoPolicyApplies, "", test_server_origin()}, // We are the back to the initial status quo, no policy applies if header // unspecified. - {"", mojom::OriginPolicyState::kNoPolicyApplies, "", - test_server_origin()}, + {"", OriginPolicyState::kNoPolicyApplies, "", test_server_origin()}, // Load a new policy to have something in the cache. - {"policy=policy-1", mojom::OriginPolicyState::kLoaded, "manifest-1", + {"policy=policy-1", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })", test_server_origin()}, // Check that the version in the cache is used. - {"", mojom::OriginPolicyState::kLoaded, "manifest-1", + {"", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })", test_server_origin()}, // In a different origin, it should not pick up the initial origin's // cached version. - {"", mojom::OriginPolicyState::kNoPolicyApplies, "", - test_server_origin_2()}, + {"", OriginPolicyState::kNoPolicyApplies, "", test_server_origin_2()}, // Load a new policy to have something in the cache for the second origin. - {"policy=policy-2", mojom::OriginPolicyState::kLoaded, "manifest-2", + {"policy=policy-2", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })", test_server_origin_2()}, // Check that the version in the cache is used for the second origin. - {"", mojom::OriginPolicyState::kLoaded, "manifest-2", + {"", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example2.com"] })", test_server_origin_2()}, // The initial origins cached state is unaffected. - {"", mojom::OriginPolicyState::kLoaded, "manifest-1", + {"", OriginPolicyState::kLoaded, + R"({ "feature-policy": ["geolocation http://example1.com"] })", test_server_origin()}, }; @@ -418,8 +428,10 @@ if (test.expected_raw_policy.empty()) { EXPECT_FALSE(tester.origin_policy_result()->contents); } else { - EXPECT_EQ(test.expected_raw_policy, - tester.origin_policy_result()->contents->raw_policy); + OriginPolicyContentsPtr expected_origin_policy_contents = + OriginPolicyParser::Parse(test.expected_raw_policy); + EXPECT_EQ(expected_origin_policy_contents, + tester.origin_policy_result()->contents); } } }
diff --git a/services/network/origin_policy/origin_policy_parser.cc b/services/network/origin_policy/origin_policy_parser.cc new file mode 100644 index 0000000..3bbc832f --- /dev/null +++ b/services/network/origin_policy/origin_policy_parser.cc
@@ -0,0 +1,87 @@ +// Copyright 2019 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 "services/network/origin_policy/origin_policy_parser.h" + +#include <memory> +#include <utility> + +#include "base/json/json_reader.h" +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "base/values.h" +#include "url/gurl.h" +#include "url/origin.h" + +namespace network { + +OriginPolicyContentsPtr OriginPolicyParser::Parse(base::StringPiece text) { + OriginPolicyParser parser; + if (!parser.DoParse(text)) + return std::make_unique<OriginPolicyContents>(); + return std::move(parser.policy_contents_); +} + +OriginPolicyParser::OriginPolicyParser() {} +OriginPolicyParser::~OriginPolicyParser() {} + +bool OriginPolicyParser::DoParse(base::StringPiece policy_contents_text) { + if (policy_contents_text.empty()) + return false; + + std::unique_ptr<base::Value> json = + base::JSONReader::ReadDeprecated(policy_contents_text); + if (!json || !json->is_dict()) + return false; + + policy_contents_ = std::make_unique<OriginPolicyContents>(); + + base::Value* csp = json->FindListKey("content-security-policy"); + bool csp_ok = !csp || ParseContentSecurityPolicies(*csp); + + base::Value* features = json->FindListKey("feature-policy"); + bool features_ok = !features || ParseFeaturePolicies(*features); + + return csp_ok && features_ok; +} + +bool OriginPolicyParser::ParseContentSecurityPolicies( + const base::Value& policies) { + bool ok = true; + for (const auto& csp : policies.GetList()) { + ok &= csp.is_dict() && ParseContentSecurityPolicy(csp); + } + return ok; +} + +bool OriginPolicyParser::ParseContentSecurityPolicy(const base::Value& csp) { + const std::string* policy = csp.FindStringKey("policy"); + if (!policy) + return false; + + const base::Optional<bool> report_only = csp.FindBoolKey("report-only"); + + if (report_only.has_value() && report_only.value()) { + policy_contents_->content_security_policies_report_only.push_back(*policy); + } else { + policy_contents_->content_security_policies.push_back(*policy); + } + + return true; +} + +bool OriginPolicyParser::ParseFeaturePolicies(const base::Value& policies) { + bool ok = true; + for (const auto& feature : policies.GetList()) { + ok &= feature.is_string() && ParseFeaturePolicy(feature); + } + return ok; +} + +bool OriginPolicyParser::ParseFeaturePolicy(const base::Value& policy) { + policy_contents_->features.push_back(policy.GetString()); + return true; +} + +} // namespace network
diff --git a/services/network/origin_policy/origin_policy_parser.h b/services/network/origin_policy/origin_policy_parser.h new file mode 100644 index 0000000..255f7873 --- /dev/null +++ b/services/network/origin_policy/origin_policy_parser.h
@@ -0,0 +1,45 @@ +// Copyright 2019 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 SERVICES_NETWORK_ORIGIN_POLICY_ORIGIN_POLICY_PARSER_H_ +#define SERVICES_NETWORK_ORIGIN_POLICY_ORIGIN_POLICY_PARSER_H_ + +#include <memory> +#include <string> + +#include "base/component_export.h" +#include "base/macros.h" +#include "services/network/public/mojom/origin_policy_manager.mojom.h" + +namespace base { +class Value; +} // namespace base + +namespace network { + +class COMPONENT_EXPORT(NETWORK_SERVICE) OriginPolicyParser { + public: + // Parse the given origin policy. Returns an empty policy if parsing is not + // successful. + // TODO(vogelheim): Decide how parsing errors should be handled. + static OriginPolicyContentsPtr Parse(base::StringPiece); + + private: + OriginPolicyParser(); + ~OriginPolicyParser(); + + bool DoParse(base::StringPiece); + bool ParseContentSecurityPolicies(const base::Value&); + bool ParseContentSecurityPolicy(const base::Value&); + bool ParseFeaturePolicies(const base::Value&); + bool ParseFeaturePolicy(const base::Value&); + + OriginPolicyContentsPtr policy_contents_; + + DISALLOW_COPY_AND_ASSIGN(OriginPolicyParser); +}; + +} // namespace network + +#endif // SERVICES_NETWORK_ORIGIN_POLICY_ORIGIN_POLICY_PARSER_H_
diff --git a/services/network/origin_policy/origin_policy_parser_unittest.cc b/services/network/origin_policy/origin_policy_parser_unittest.cc new file mode 100644 index 0000000..03337a1 --- /dev/null +++ b/services/network/origin_policy/origin_policy_parser_unittest.cc
@@ -0,0 +1,191 @@ +// Copyright 2019 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 "services/network/origin_policy/origin_policy_parser.h" +#include "services/network/public/mojom/origin_policy_manager.mojom.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +// Unit tests for OriginPolicyParser. +// +// These are fairly simple "smoke tests". The majority of test coverage is +// expected from wpt/origin-policy/ end-to-end tests. + +namespace { + +void AssertEmptyPolicy( + const network::OriginPolicyContentsPtr& policy_contents) { + ASSERT_EQ(0u, policy_contents->features.size()); + ASSERT_EQ(0u, policy_contents->content_security_policies.size()); + ASSERT_EQ(0u, policy_contents->content_security_policies_report_only.size()); +} + +} // namespace + +namespace network { + +TEST(OriginPolicyParser, Empty) { + auto policy_contents = OriginPolicyParser::Parse(""); + AssertEmptyPolicy(policy_contents); +} + +TEST(OriginPolicyParser, Invalid) { + auto policy_contents = OriginPolicyParser::Parse("potato potato potato"); + AssertEmptyPolicy(policy_contents); +} + +TEST(OriginPolicyParser, ValidButEmpty) { + auto policy_contents = OriginPolicyParser::Parse("{}"); + AssertEmptyPolicy(policy_contents); +} + +TEST(OriginPolicyParser, SimpleCSP) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self' 'unsafe-inline'" + }] } + )"); + ASSERT_EQ(policy_contents->content_security_policies.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies[0], + "script-src 'self' 'unsafe-inline'"); +} + +TEST(OriginPolicyParser, DoubleCSP) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self' 'unsafe-inline'", + "report-only": false + },{ + "policy": "script-src 'self' 'https://example.com/'", + "report-only": true + }] } + )"); + ASSERT_EQ(policy_contents->content_security_policies.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies_report_only.size(), 1U); + + ASSERT_EQ(policy_contents->content_security_policies[0], + "script-src 'self' 'unsafe-inline'"); + ASSERT_EQ(policy_contents->content_security_policies_report_only[0], + "script-src 'self' 'https://example.com/'"); +} + +TEST(OriginPolicyParser, HalfDoubleCSP) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self' 'unsafe-inline'", + },{ + "policies": "script-src 'self' 'https://example.com/'", + }] } + )"); + AssertEmptyPolicy(policy_contents); +} + +TEST(OriginPolicyParser, CSPWithoutCSP) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "police": "script-src 'self' 'unsafe-inline'", + "report-only": false + }] } + )"); + AssertEmptyPolicy(policy_contents); +} + +TEST(OriginPolicyParser, ExtraFieldsDontBreakParsing) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "potatoes": "are better than kale", + "content-security-policy": [{ + "report-only": false, + "potatoes": "are best", + "policy": "script-src 'self' 'unsafe-inline'" + }], + "other": { + "name": "Sieglinde", + "value": "best of potatoes" + }} + )"); + ASSERT_EQ(policy_contents->content_security_policies.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies[0], + "script-src 'self' 'unsafe-inline'"); +} + +TEST(OriginPolicyParser, CSPDispositionEnforce) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self'", + "report-only": false + }] } + )"); + ASSERT_EQ(policy_contents->content_security_policies.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies[0], "script-src 'self'"); +} + +TEST(OriginPolicyParser, CSPDispositionReport) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self'", + "report-only": true + }] } + )"); + ASSERT_EQ(policy_contents->content_security_policies_report_only.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies_report_only[0], + "script-src 'self'"); +} + +TEST(OriginPolicyParser, CSPDispositionInvalid) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self'", + "report-only": "potato" + }] } + )"); + ASSERT_EQ(policy_contents->content_security_policies.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies[0], "script-src 'self'"); +} + +TEST(OriginPolicyParser, CSPDispositionAbsent) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "content-security-policy": [{ + "policy": "script-src 'self'" + }] } + )"); + ASSERT_EQ(policy_contents->content_security_policies.size(), 1U); + ASSERT_EQ(policy_contents->content_security_policies[0], "script-src 'self'"); +} + +TEST(OriginPolicyParser, FeatureOne) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "feature-policy": ["geolocation 'self' http://maps.google.com"] } )"); + ASSERT_EQ(1U, policy_contents->features.size()); + ASSERT_EQ("geolocation 'self' http://maps.google.com", + policy_contents->features[0]); +} + +TEST(OriginPolicyParser, FeatureTwo) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "feature-policy": ["geolocation 'self' http://maps.google.com", + "camera https://example.com"]} )"); + ASSERT_EQ(2U, policy_contents->features.size()); + ASSERT_EQ("geolocation 'self' http://maps.google.com", + policy_contents->features[0]); + ASSERT_EQ("camera https://example.com", policy_contents->features[1]); +} + +TEST(OriginPolicyParser, FeatureTwoPolicies) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "feature-policy": ["geolocation 'self' http://maps.google.com"], + "feature-policy": ["camera https://example.com"] } )"); + + // TODO(vogelheim): Determine whether this is the correct behaviour. + ASSERT_EQ(1U, policy_contents->features.size()); +} + +TEST(OriginPolicyParser, FeatureComma) { + auto policy_contents = OriginPolicyParser::Parse(R"( + { "feature-policy": ["geolocation 'self' http://maps.google.com, camera https://example.com"]} )"); + + // TODO: Determine what to do with this case ! + ASSERT_EQ(1U, policy_contents->features.size()); +} + +} // namespace network
diff --git a/services/network/public/cpp/BUILD.gn b/services/network/public/cpp/BUILD.gn index 92a9a7b..2298382 100644 --- a/services/network/public/cpp/BUILD.gn +++ b/services/network/public/cpp/BUILD.gn
@@ -119,6 +119,8 @@ "network_ipc_param_traits.h", "network_isolation_key_mojom_traits.cc", "network_isolation_key_mojom_traits.h", + "origin_policy.cc", + "origin_policy.h", "p2p_param_traits.cc", "p2p_param_traits.h", "p2p_socket_type.h",
diff --git a/services/network/public/cpp/network_ipc_param_traits.h b/services/network/public/cpp/network_ipc_param_traits.h index 237928e..72c5b46 100644 --- a/services/network/public/cpp/network_ipc_param_traits.h +++ b/services/network/public/cpp/network_ipc_param_traits.h
@@ -182,10 +182,26 @@ IPC_ENUM_TRAITS_MAX_VALUE(network::mojom::FetchResponseType, network::mojom::FetchResponseType::kMaxValue) +IPC_ENUM_TRAITS_MAX_VALUE(network::OriginPolicyState, + network::OriginPolicyState::kMaxValue) + +IPC_STRUCT_TRAITS_BEGIN(network::OriginPolicyContents) + IPC_STRUCT_TRAITS_MEMBER(features) + IPC_STRUCT_TRAITS_MEMBER(content_security_policies) + IPC_STRUCT_TRAITS_MEMBER(content_security_policies_report_only) +IPC_STRUCT_TRAITS_END() + +IPC_STRUCT_TRAITS_BEGIN(network::OriginPolicy) + IPC_STRUCT_TRAITS_MEMBER(state) + IPC_STRUCT_TRAITS_MEMBER(policy_url) + IPC_STRUCT_TRAITS_MEMBER(contents) +IPC_STRUCT_TRAITS_END() + IPC_STRUCT_TRAITS_BEGIN(network::ResourceResponseHead) IPC_STRUCT_TRAITS_PARENT(network::ResourceResponseInfo) IPC_STRUCT_TRAITS_MEMBER(request_start) IPC_STRUCT_TRAITS_MEMBER(response_start) + IPC_STRUCT_TRAITS_MEMBER(origin_policy) IPC_STRUCT_TRAITS_END() #endif // SERVICES_NETWORK_PUBLIC_CPP_NETWORK_IPC_PARAM_TRAITS_H_
diff --git a/services/network/public/cpp/origin_policy.cc b/services/network/public/cpp/origin_policy.cc new file mode 100644 index 0000000..1321a3b7 --- /dev/null +++ b/services/network/public/cpp/origin_policy.cc
@@ -0,0 +1,69 @@ +// Copyright 2019 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 "services/network/public/cpp/origin_policy.h" + +namespace network { +bool operator==(const OriginPolicyContentsPtr& a, + const OriginPolicyContentsPtr& b) { + return (a.get() == b.get()) || (a && b && *a == *b); +} + +bool operator!=(const OriginPolicyContentsPtr& a, + const OriginPolicyContentsPtr& b) { + return !(a == b); +} + +OriginPolicyContents::OriginPolicyContents() = default; + +OriginPolicyContents::~OriginPolicyContents() = default; + +OriginPolicyContents::OriginPolicyContents(const OriginPolicyContents& other) = + default; + +OriginPolicyContents::OriginPolicyContents( + const std::vector<std::string>& features, + const std::vector<std::string>& content_security_policies, + const std::vector<std::string>& content_security_policies_report_only) + : features(features), + content_security_policies(content_security_policies), + content_security_policies_report_only( + content_security_policies_report_only) {} + +OriginPolicyContents& OriginPolicyContents::operator=( + const OriginPolicyContents& other) = default; + +bool OriginPolicyContents::operator==(const OriginPolicyContents& other) const { + return features == other.features && + content_security_policies == other.content_security_policies && + content_security_policies_report_only == + other.content_security_policies_report_only; +} + +OriginPolicyContentsPtr OriginPolicyContents::ClonePtr() { + // Uses the copy constructor to create a new pointer to a cloned object of + // this object. + return std::make_unique<OriginPolicyContents>(*this); +} + +OriginPolicy::OriginPolicy() = default; + +OriginPolicy::~OriginPolicy() = default; + +OriginPolicy::OriginPolicy(const OriginPolicy& other) + : state(other.state), + policy_url(other.policy_url), + contents(other.contents ? other.contents->ClonePtr() : nullptr) {} + +OriginPolicy& OriginPolicy::operator=(const OriginPolicy& other) { + state = other.state; + policy_url = other.policy_url; + if (other.contents) { + contents = other.contents->ClonePtr(); + } + + return *this; +} + +} // namespace network
diff --git a/services/network/public/cpp/origin_policy.h b/services/network/public/cpp/origin_policy.h new file mode 100644 index 0000000..2afbcab --- /dev/null +++ b/services/network/public/cpp/origin_policy.h
@@ -0,0 +1,110 @@ +// Copyright 2019 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 SERVICES_NETWORK_PUBLIC_CPP_ORIGIN_POLICY_H_ +#define SERVICES_NETWORK_PUBLIC_CPP_ORIGIN_POLICY_H_ + +#include <memory> +#include <string> +#include <vector> + +#include "url/gurl.h" + +namespace network { + +// The state of a returned origin policy. +enum class OriginPolicyState { + // The origin policy was successfully retrieved and its contents is available. + kLoaded, + // There has been an error when attempting to retrieve the policy. For example + // this could mean the server has returned a 404 when attempting to retrieve + // the origin policy. + kCannotLoadPolicy, + // An invalid redirect has been encountered. The only valid redirect is if + // we requested the default "/.well-known/origin-policy", to which the + // server MUST respond with a redirect to the latest origin policy. Any + // other redirect (or more than 1 redirect) is invalid. + // https://wicg.github.io/origin-policy/#origin-policy-well-known + kInvalidRedirect, + // There is no need to apply an origin policy. This could be (for example) if + // an exception has been added for the requested origin. + kNoPolicyApplies, + // Other origin policy state. + kOther, + + // kMaxValue needs to always be set to the last value of the enum. + kMaxValue = kOther, +}; + +struct COMPONENT_EXPORT(NETWORK_CPP_BASE) OriginPolicyContents; + +using OriginPolicyContentsPtr = std::unique_ptr<OriginPolicyContents>; + +COMPONENT_EXPORT(NETWORK_CPP_BASE) +bool operator==(const OriginPolicyContentsPtr& a, + const OriginPolicyContentsPtr& b); + +// Contains the parsed result of an origin policy file as a struct of the +// relevant fields. +struct COMPONENT_EXPORT(NETWORK_CPP_BASE) OriginPolicyContents { + OriginPolicyContents(); + ~OriginPolicyContents(); + OriginPolicyContents( + const std::vector<std::string>& features, + const std::vector<std::string>& content_security_policies, + const std::vector<std::string>& content_security_policies_report_only); + + OriginPolicyContents(const OriginPolicyContents& other); + OriginPolicyContents& operator=(const OriginPolicyContents& other); + bool operator==(const OriginPolicyContents& other) const; + + OriginPolicyContentsPtr ClonePtr(); + + // The feature policy that is dictated by the origin policy. Each feature + // is one member of the array. + // https://w3c.github.io/webappsec-feature-policy/ + std::vector<std::string> features; + + // These two fields together represent the CSP that should be applied to the + // origin, based on the origin policy. + // https://w3c.github.io/webappsec-csp/ + + // The "enforced" portion of the CSP. This CSP is to be treated as having + // an "enforced" disposition. + // https://w3c.github.io/webappsec-csp/#policy-disposition + std::vector<std::string> content_security_policies; + + // The "report-only" portion of the CSP. This CSP is to be treated as having + // a "report" disposition. + // https://w3c.github.io/webappsec-csp/#policy-disposition + std::vector<std::string> content_security_policies_report_only; +}; + +// Native implementation of mojom::OriginPolicy. This is done so we can pass +// the OriginPolicy through IPC. +// Represents the result of retrieving an origin policy. +struct COMPONENT_EXPORT(NETWORK_CPP_BASE) OriginPolicy { + OriginPolicy(); + ~OriginPolicy(); + OriginPolicy(const OriginPolicy& other); + OriginPolicy& operator=(const OriginPolicy& other); + + // The state of the origin policy. Possible values are explained in the + // OriginPolicyState struct comments. + OriginPolicyState state; + + // The final URL from which the policy has been retrieved. If unsuccessful, + // it will be the URL from which the policy was attempted to be retrieved. + // This is useful (for example) for displaying this information to the user + // as part of an interstitial page. + GURL policy_url; + + // The origin policy contents. If `state` is `kLoaded` this will be populated, + // otherwise it will be `null`. + OriginPolicyContentsPtr contents; +}; + +} // namespace network + +#endif // SERVICES_NETWORK_PUBLIC_CPP_ORIGIN_POLICY_H_
diff --git a/services/network/public/cpp/origin_policy.typemap b/services/network/public/cpp/origin_policy.typemap new file mode 100644 index 0000000..5f4e25b --- /dev/null +++ b/services/network/public/cpp/origin_policy.typemap
@@ -0,0 +1,11 @@ +# Copyright 2019 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. + +mojom = "//services/network/public/mojom/origin_policy_manager.mojom" +public_headers = [ "//services/network/public/cpp/origin_policy.h" ] +traits_headers = [ "//services/network/public/cpp/network_ipc_param_traits.h" ] +deps = [ + "//url/mojom:url_mojom_gurl", +] +type_mappings = [ "network.mojom.OriginPolicy=network::OriginPolicy" ]
diff --git a/services/network/public/cpp/resource_response.cc b/services/network/public/cpp/resource_response.cc index 92c74e0..00b3ecb 100644 --- a/services/network/public/cpp/resource_response.cc +++ b/services/network/public/cpp/resource_response.cc
@@ -8,6 +8,11 @@ namespace network { +ResourceResponseHead::ResourceResponseHead() = default; +ResourceResponseHead::~ResourceResponseHead() = default; +ResourceResponseHead::ResourceResponseHead(const ResourceResponseHead& other) = + default; + scoped_refptr<ResourceResponse> ResourceResponse::DeepCopy() const { scoped_refptr<ResourceResponse> new_response(new ResourceResponse); new_response->head.request_time = head.request_time; @@ -67,6 +72,7 @@ new_response->head.intercepted_by_plugin = head.intercepted_by_plugin; new_response->head.is_legacy_tls_version = head.is_legacy_tls_version; new_response->head.auth_challenge_info = head.auth_challenge_info; + new_response->head.origin_policy = head.origin_policy; return new_response; }
diff --git a/services/network/public/cpp/resource_response.h b/services/network/public/cpp/resource_response.h index 71cac5f4..dd5b16a4 100644 --- a/services/network/public/cpp/resource_response.h +++ b/services/network/public/cpp/resource_response.h
@@ -8,12 +8,14 @@ #ifndef SERVICES_NETWORK_PUBLIC_CPP_RESOURCE_RESPONSE_H_ #define SERVICES_NETWORK_PUBLIC_CPP_RESOURCE_RESPONSE_H_ +#include <memory> #include <string> #include "base/compiler_specific.h" #include "base/component_export.h" #include "base/memory/ref_counted.h" #include "net/url_request/url_request_status.h" +#include "services/network/public/cpp/origin_policy.h" #include "services/network/public/cpp/resource_response_info.h" #include "url/gurl.h" @@ -22,10 +24,19 @@ // Parameters for a resource response header. struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceResponseHead : ResourceResponseInfo { + ResourceResponseHead(); + ~ResourceResponseHead(); + + ResourceResponseHead(const ResourceResponseHead& other); + // TimeTicks::Now() when the browser received the request from the renderer. base::TimeTicks request_start; // TimeTicks::Now() when the browser sent the response to the renderer. base::TimeTicks response_start; + + // Origin Policy associated with this response or nullptr if not applicable. + // Spec: https://wicg.github.io/origin-policy/ + base::Optional<OriginPolicy> origin_policy; }; // Simple wrapper that refcounts ResourceResponseHead.
diff --git a/services/network/public/cpp/typemaps.gni b/services/network/public/cpp/typemaps.gni index 200e74d1..7d9ac2860 100644 --- a/services/network/public/cpp/typemaps.gni +++ b/services/network/public/cpp/typemaps.gni
@@ -21,6 +21,7 @@ "//services/network/public/cpp/network_isolation_key.typemap", "//services/network/public/cpp/network_param.typemap", "//services/network/public/cpp/network_types.typemap", + "//services/network/public/cpp/origin_policy.typemap", "//services/network/public/cpp/p2p.typemap", "//services/network/public/cpp/proxy_config.typemap", "//services/network/public/cpp/proxy_config_with_annotation.typemap",
diff --git a/services/network/public/mojom/origin_policy_manager.mojom b/services/network/public/mojom/origin_policy_manager.mojom index 5785a8f4..4c081079 100644 --- a/services/network/public/mojom/origin_policy_manager.mojom +++ b/services/network/public/mojom/origin_policy_manager.mojom
@@ -7,74 +7,9 @@ import "url/mojom/origin.mojom"; import "url/mojom/url.mojom"; -// The state of a returned origin policy. -enum OriginPolicyState { - // The origin policy was successfully retrieved and its contents is available. - kLoaded, - // There has been an error when attempting to retrieve the policy. For example - // this could mean the server has returned a 404 when attempting to retrieve - // the origin policy. - kCannotLoadPolicy, - // An invalid redirect has been encountered. The only valid redirect is if - // we requested the default "/.well-known/origin-policy", to which the - // server MUST respond with a redirect to the latest origin policy. Any - // other redirect (or more than 1 redirect) is invalid. - // https://wicg.github.io/origin-policy/#origin-policy-well-known - kInvalidRedirect, - // There is no need to apply an origin policy. This could be (for example) if - // an exception has been added for the requested origin. - kNoPolicyApplies, - // Other origin policy state. - kOther -}; - -// Contains the parsed result of an origin policy file as a struct of the -// relevant fields. -struct OriginPolicyContents { - // The feature policy that is dictated by the origin policy. Each feature - // is one member of the array. - // https://w3c.github.io/webappsec-feature-policy/ - // array<string> features; - - // These two fields together represent the CSP that should be applied to the - // origin, based on the origin policy. - // https://w3c.github.io/webappsec-csp/ - - // The "enforced" portion of the CSP. This CSP is to be treated as having - // an "enforced" disposition. - // https://w3c.github.io/webappsec-csp/#policy-disposition - // array<string> content_security_policies; - - // The "report-only" portion of the CSP. This CSP is to be treated as having - // a "report" disposition. - // https://w3c.github.io/webappsec-csp/#policy-disposition - // array<string> content_security_policies_report_only; - - // TODO(andypaicu): remove this when the policy is parsed in the network - // service. - // For now the raw contents is the only available part. When the policy file - // will be parsed in the network service the other (commented) fields will be - // properly populated. - string raw_policy; -}; - // Represents the result of retrieving an origin policy. -struct OriginPolicy { - - // The state of the origin policy. Possible values are explain in the - // OriginPolicyState struct comments. - OriginPolicyState state; - - // The final URL from which the policy has been retrieved. If unsuccessful, - // it will be the URL from which the policy was attempted to be retrieved. - // This is useful (for example) for displaying this information to the user - // as part of an interstitial page. - url.mojom.Url policy_url; - - // The origin policy contents. If `state` is `kLoaded` this will be populated, - // otherwise it will be `null`. - OriginPolicyContents? contents; -}; +[Native] +struct OriginPolicy; // An interface for handling all origin policy related operations. // https://wicg.github.io/origin-policy/
diff --git a/services/service_manager/public/cpp/interface_provider.h b/services/service_manager/public/cpp/interface_provider.h index 5cc86da88..5a3f2fc 100644 --- a/services/service_manager/public/cpp/interface_provider.h +++ b/services/service_manager/public/cpp/interface_provider.h
@@ -6,6 +6,7 @@ #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_PROVIDER_H_ #include "base/bind.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/service_manager/public/cpp/export.h" #include "services/service_manager/public/mojom/interface_provider.mojom.h" @@ -93,6 +94,10 @@ void GetInterface(mojo::InterfaceRequest<Interface> request) { GetInterfaceByName(Interface::Name_, std::move(request.PassMessagePipe())); } + template <typename Interface> + void GetInterface(mojo::PendingReceiver<Interface> receiver) { + GetInterfaceByName(Interface::Name_, receiver.PassPipe()); + } void GetInterfaceByName(const std::string& name, mojo::ScopedMessagePipeHandle request_handle);
diff --git a/services/service_manager/public/cpp/service_executable/service_executable_environment.cc b/services/service_manager/public/cpp/service_executable/service_executable_environment.cc index 5f4b5fec..6cf9e501 100644 --- a/services/service_manager/public/cpp/service_executable/service_executable_environment.cc +++ b/services/service_manager/public/cpp/service_executable/service_executable_environment.cc
@@ -25,21 +25,12 @@ #include "services/service_manager/sandbox/linux/sandbox_linux.h" #endif -#if defined(OS_MACOSX) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - namespace service_manager { ServiceExecutableEnvironment::ServiceExecutableEnvironment() : ipc_thread_("IPC Thread") { DCHECK(!base::MessageLoopCurrent::Get()); -#if defined(OS_MACOSX) - // Send our task port to the parent. - mojo::core::DefaultMachBroker::SendTaskPortToParent(); -#endif - #if defined(OS_LINUX) const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
diff --git a/services/service_manager/service_process_launcher.cc b/services/service_manager/service_process_launcher.cc index 048238c..e2c6e41 100644 --- a/services/service_manager/service_process_launcher.cc +++ b/services/service_manager/service_process_launcher.cc
@@ -43,10 +43,6 @@ #include "base/win/windows_version.h" #endif -#if defined(OS_MACOSX) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - namespace service_manager { // Thread-safe owner of state related to a service process. This facilitates @@ -238,15 +234,7 @@ } else #endif { -#if defined(OS_MACOSX) - mojo::core::DefaultMachBroker* mach_broker = - mojo::core::DefaultMachBroker::Get(); - base::AutoLock locker(mach_broker->GetLock()); -#endif child_process_ = base::LaunchProcess(*child_command_line, options); -#if defined(OS_MACOSX) - mach_broker->ExpectPid(child_process_.Handle()); -#endif } channel.RemoteProcessLaunchAttempted();
diff --git a/services/test/run_all_unittests.cc b/services/test/run_all_unittests.cc index 12e1abc99..0979d18a 100644 --- a/services/test/run_all_unittests.cc +++ b/services/test/run_all_unittests.cc
@@ -23,10 +23,6 @@ #include "base/android/jni_android.h" #endif -#if defined(OS_MACOSX) && !defined(OS_IOS) -#include "mojo/core/embedder/default_mach_broker.h" -#endif - namespace { class ServiceTestSuite : public base::TestSuite { @@ -82,11 +78,6 @@ mojo_config.is_broker_process = true; mojo::core::Init(mojo_config); -#if defined(OS_MACOSX) && !defined(OS_IOS) - mojo::core::SetMachPortProvider( - mojo::core::DefaultMachBroker::Get()->port_provider()); -#endif - base::Thread ipc_thread("IPC thread"); ipc_thread.StartWithOptions( base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
diff --git a/services/viz/public/cpp/compositing/copy_output_result_struct_traits.cc b/services/viz/public/cpp/compositing/copy_output_result_struct_traits.cc index 4e7ded9..6c48f002 100644 --- a/services/viz/public/cpp/compositing/copy_output_result_struct_traits.cc +++ b/services/viz/public/cpp/compositing/copy_output_result_struct_traits.cc
@@ -157,17 +157,8 @@ viz::CopyOutputResult::Format format; gfx::Rect rect; - // TODO(crbug.com/967856): Removed detailed logging for deserialization - // failures after bug is fixed. - - if (!data.ReadFormat(&format)) { - LOG(ERROR) << "CopyOutputResult: Failed to read |format|"; + if (!data.ReadFormat(&format) || !data.ReadRect(&rect)) return false; - } - if (!data.ReadRect(&rect)) { - LOG(ERROR) << "CopyOutputResult: Failed to read |rect|."; - return false; - } if (rect.IsEmpty()) { // An empty rect implies an empty result. @@ -178,10 +169,8 @@ switch (format) { case viz::CopyOutputResult::Format::RGBA_BITMAP: { SkBitmap bitmap; - if (!data.ReadBitmap(&bitmap) || !bitmap.readyToDraw()) { - LOG(ERROR) << "CopyOutputResult: Failed to read |bitmap|"; + if (!data.ReadBitmap(&bitmap) || !bitmap.readyToDraw()) return false; - } *out_p = std::make_unique<viz::CopyOutputSkBitmapResult>( rect, std::move(bitmap)); @@ -190,20 +179,14 @@ case viz::CopyOutputResult::Format::RGBA_TEXTURE: { base::Optional<gpu::Mailbox> mailbox; - if (!data.ReadMailbox(&mailbox) || !mailbox) { - LOG(ERROR) << "CopyOutputResult: Failed to read |mailbox|"; + if (!data.ReadMailbox(&mailbox) || !mailbox) return false; - } base::Optional<gpu::SyncToken> sync_token; - if (!data.ReadSyncToken(&sync_token) || !sync_token) { - LOG(ERROR) << "CopyOutputResult: Failed to read |sync_token|"; + if (!data.ReadSyncToken(&sync_token) || !sync_token) return false; - } base::Optional<gfx::ColorSpace> color_space; - if (!data.ReadColorSpace(&color_space) || !color_space) { - LOG(ERROR) << "CopyOutputResult: Failed to read |color_space|"; + if (!data.ReadColorSpace(&color_space) || !color_space) return false; - } if (mailbox->IsZero()) { // Returns an empty result. @@ -214,10 +197,8 @@ viz::mojom::TextureReleaserPtr releaser = data.TakeReleaser<viz::mojom::TextureReleaserPtr>(); - if (!releaser) { - LOG(ERROR) << "CopyOutputResult: Failed to take |releaser|"; + if (!releaser) return false; // Illegal to provide texture without Releaser. - } // Returns a result with a SingleReleaseCallback that will return // here and proxy the callback over mojo to the CopyOutputResult's
diff --git a/services/viz/public/cpp/gpu/command_buffer_metrics.cc b/services/viz/public/cpp/gpu/command_buffer_metrics.cc index a85a154..dea0bbf 100644 --- a/services/viz/public/cpp/gpu/command_buffer_metrics.cc +++ b/services/viz/public/cpp/gpu/command_buffer_metrics.cc
@@ -47,9 +47,6 @@ case ContextType::MEDIA: UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.Media", reason); break; - case ContextType::MUS_CLIENT: - UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.MusClient", reason); - break; case ContextType::UNKNOWN: UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.Unknown", reason); break; @@ -88,8 +85,6 @@ return "WebGPU"; case ContextType::MEDIA: return "Media"; - case ContextType::MUS_CLIENT: - return "MusClient"; case ContextType::UNKNOWN: return "Unknown"; case ContextType::FOR_TESTING:
diff --git a/services/viz/public/cpp/gpu/command_buffer_metrics.h b/services/viz/public/cpp/gpu/command_buffer_metrics.h index b16f61b..7a20c41 100644 --- a/services/viz/public/cpp/gpu/command_buffer_metrics.h +++ b/services/viz/public/cpp/gpu/command_buffer_metrics.h
@@ -28,7 +28,6 @@ WEBGL, WEBGPU, MEDIA, - MUS_CLIENT, UNKNOWN, FOR_TESTING, XR_COMPOSITING,
diff --git a/services/viz/public/cpp/gpu/gpu.cc b/services/viz/public/cpp/gpu/gpu.cc index 72868bbb5..5f82b41 100644 --- a/services/viz/public/cpp/gpu/gpu.cc +++ b/services/viz/public/cpp/gpu/gpu.cc
@@ -14,11 +14,9 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" -#include "gpu/command_buffer/common/scheduling_priority.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "services/service_manager/public/cpp/connector.h" #include "services/viz/public/cpp/gpu/client_gpu_memory_buffer_manager.h" -#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h" #include "services/viz/public/interfaces/gpu.mojom.h" namespace viz { @@ -277,32 +275,6 @@ return base::WrapUnique(new Gpu(std::move(gpu_ptr), std::move(task_runner))); } -scoped_refptr<ContextProviderCommandBuffer> Gpu::CreateContextProvider( - scoped_refptr<gpu::GpuChannelHost> gpu_channel) { - int32_t stream_id = 0; - gpu::SchedulingPriority stream_priority = gpu::SchedulingPriority::kNormal; - - constexpr bool automatic_flushes = false; - constexpr bool support_locking = false; - constexpr bool support_grcontext = false; - - gpu::ContextCreationAttribs attributes; - attributes.alpha_size = -1; - attributes.depth_size = 0; - attributes.stencil_size = 0; - attributes.samples = 0; - attributes.sample_buffers = 0; - attributes.bind_generates_resource = false; - attributes.lose_context_when_out_of_memory = true; - attributes.enable_raster_interface = true; - return base::MakeRefCounted<ContextProviderCommandBuffer>( - std::move(gpu_channel), GetGpuMemoryBufferManager(), stream_id, - stream_priority, gpu::kNullSurfaceHandle, - GURL("chrome://gpu/MusContextFactory"), automatic_flushes, - support_locking, support_grcontext, gpu::SharedMemoryLimits(), attributes, - command_buffer_metrics::ContextType::MUS_CLIENT); -} - #if defined(OS_CHROMEOS) void Gpu::CreateJpegDecodeAccelerator( chromeos_camera::mojom::MjpegDecodeAcceleratorRequest jda_request) {
diff --git a/services/viz/public/cpp/gpu/gpu.h b/services/viz/public/cpp/gpu/gpu.h index 9fd796ee..a6c1447 100644 --- a/services/viz/public/cpp/gpu/gpu.h +++ b/services/viz/public/cpp/gpu/gpu.h
@@ -22,8 +22,6 @@ namespace viz { -class ContextProviderCommandBuffer; - class Gpu : public gpu::GpuChannelEstablishFactory { public: // The Gpu has to be initialized in the main thread before establishing @@ -39,9 +37,6 @@ return gpu_memory_buffer_manager_.get(); } - scoped_refptr<ContextProviderCommandBuffer> CreateContextProvider( - scoped_refptr<gpu::GpuChannelHost> gpu_channel); - #if defined(OS_CHROMEOS) void CreateJpegDecodeAccelerator( chromeos_camera::mojom::MjpegDecodeAcceleratorRequest jda_request);
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 96a1493..3c80b285 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -2599,6 +2599,53 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "P", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "Chrome-GPU" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "shards": 4 + }, + "test": "angle_deqp_gles31_tests" + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--enable-xml-result-parsing", + "--shard-timeout=500", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": { @@ -2692,6 +2739,53 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_khr_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "P", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "Chrome-GPU" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "shards": 2 + }, + "test": "angle_deqp_khr_gles31_tests" + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--enable-xml-result-parsing", + "--shard-timeout=500", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_khr_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": { @@ -2960,6 +3054,53 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "P", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "Chrome-GPU" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "shards": 4 + }, + "test": "angle_deqp_gles31_tests" + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--enable-xml-result-parsing", + "--shard-timeout=500", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": { @@ -3053,6 +3194,53 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_khr_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "P", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "Chrome-GPU" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "shards": 2 + }, + "test": "angle_deqp_khr_gles31_tests" + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--enable-xml-result-parsing", + "--shard-timeout=500", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_khr_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": { @@ -8141,6 +8329,8 @@ "--enable-raster-to-sk-image", "--force-gpu-rasterization", "--disable-software-compositing-fallback", + "--disable-vulkan-fallback-to-gl-for-testing", + "--disable-headless-mode", "--no-xvfb" ], "merge": { @@ -8848,6 +9038,8 @@ "--enable-raster-to-sk-image", "--force-gpu-rasterization", "--disable-software-compositing-fallback", + "--disable-vulkan-fallback-to-gl-for-testing", + "--disable-headless-mode", "--no-xvfb" ], "merge": { @@ -10343,40 +10535,6 @@ }, { "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--test-launcher-filter-file=../../testing/buildbot/filters/vulkan.content_browsertests.filter", - "--enable-features=VizDisplayCompositor,UseSkiaRenderer,UiGpuRasterization", - "--use-gl=any", - "--use-vulkan=native", - "--enable-oop-rasterization", - "--enable-gpu-rasterization", - "--enable-raster-to-sk-image", - "--force-gpu-rasterization", - "--disable-software-compositing-fallback", - "--no-xvfb" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "vulkan_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "intel-hd-630-ubuntu-stable", - "os": "linux-intel-stable", - "pool": "Chrome-GPU" - } - ] - }, - "test": "content_browsertests" - }, - { - "args": [ "--use-gpu-in-tests", "--use-cmd-decoder=validating" ], @@ -12037,6 +12195,31 @@ }, { "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--test-launcher-batch-limit=400" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "angle_deqp_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "gpu": "nvidia-quadro-p400-ubuntu-stable", + "os": "linux-nvidia-stable", + "pool": "Chrome-GPU" + } + ], + "shards": 4 + }, + "test": "angle_deqp_gles31_tests" + }, + { + "args": [ "--test-launcher-batch-limit=400", "--deqp-egl-display-type=angle-gl" ], @@ -12118,6 +12301,31 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_khr_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "gpu": "nvidia-quadro-p400-ubuntu-stable", + "os": "linux-nvidia-stable", + "pool": "Chrome-GPU" + } + ], + "shards": 2 + }, + "test": "angle_deqp_khr_gles31_tests" + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--test-launcher-batch-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_khr_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": { @@ -21581,40 +21789,6 @@ }, { "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--test-launcher-filter-file=../../testing/buildbot/filters/vulkan.content_browsertests.filter", - "--enable-features=VizDisplayCompositor,UseSkiaRenderer,UiGpuRasterization", - "--use-gl=any", - "--use-vulkan=native", - "--enable-oop-rasterization", - "--enable-gpu-rasterization", - "--enable-raster-to-sk-image", - "--force-gpu-rasterization", - "--disable-software-compositing-fallback", - "--no-xvfb" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "vulkan_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "intel-hd-630-ubuntu-stable", - "os": "linux-intel-stable", - "pool": "Chrome-GPU" - } - ] - }, - "test": "content_browsertests" - }, - { - "args": [ "--use-gpu-in-tests" ], "merge": { @@ -21883,40 +22057,6 @@ }, { "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--test-launcher-filter-file=../../testing/buildbot/filters/vulkan.content_browsertests.filter", - "--enable-features=VizDisplayCompositor,UseSkiaRenderer,UiGpuRasterization", - "--use-gl=any", - "--use-vulkan=native", - "--enable-oop-rasterization", - "--enable-gpu-rasterization", - "--enable-raster-to-sk-image", - "--force-gpu-rasterization", - "--disable-software-compositing-fallback", - "--no-xvfb" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "vulkan_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "containment_type": "AUTO", - "dimension_sets": [ - { - "gpu": "nvidia-quadro-p400-ubuntu-stable", - "os": "linux-nvidia-stable", - "pool": "Chrome-GPU" - } - ] - }, - "test": "content_browsertests" - }, - { - "args": [ "--use-gpu-in-tests" ], "merge": { @@ -32116,6 +32256,40 @@ }, { "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--test-launcher-batch-limit=400" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "angle_deqp_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "gpu": "nvidia-quadro-p400-win10-stable", + "os": "Windows-10", + "pool": "Chrome-GPU" + } + ], + "shards": 4 + }, + "test": "angle_deqp_gles31_tests", + "trigger_script": { + "args": [ + "--multiple-trigger-configs", + "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" + } + }, + { + "args": [ "--test-launcher-batch-limit=400", "--deqp-egl-display-type=angle-d3d11" ], @@ -32258,6 +32432,40 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_khr_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "gpu": "nvidia-quadro-p400-win10-stable", + "os": "Windows-10", + "pool": "Chrome-GPU" + } + ], + "shards": 2 + }, + "test": "angle_deqp_khr_gles31_tests", + "trigger_script": { + "args": [ + "--multiple-trigger-configs", + "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" + } + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--test-launcher-batch-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_khr_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": { @@ -37003,6 +37211,41 @@ }, { "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--test-launcher-batch-limit=400" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "angle_deqp_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "gpu": "10de:1cb3-24.21.14.1195", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-GPU" + } + ], + "expiration": 21600, + "shards": 4 + }, + "test": "angle_deqp_gles31_tests", + "trigger_script": { + "args": [ + "--multiple-trigger-configs", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-2008ServerR2-SP1\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-23.21.14.1195\", \"os\": \"Windows-2008ServerR2-SP1\", \"pool\": \"Chrome-GPU\"}]", + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" + } + }, + { + "args": [ "--test-launcher-batch-limit=400", "--deqp-egl-display-type=angle-d3d11" ], @@ -37149,6 +37392,41 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "name": "angle_deqp_khr_gles31_vulkan_tests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "gpu": "10de:1cb3-24.21.14.1195", + "os": "Windows-2008ServerR2-SP1", + "pool": "Chrome-GPU" + } + ], + "expiration": 21600, + "shards": 2 + }, + "test": "angle_deqp_khr_gles31_tests", + "trigger_script": { + "args": [ + "--multiple-trigger-configs", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-2008ServerR2-SP1\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-23.21.14.1195\", \"os\": \"Windows-2008ServerR2-SP1\", \"pool\": \"Chrome-GPU\"}]", + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" + } + }, + { + "args": [ + "--deqp-egl-display-type=angle-vulkan", + "--test-launcher-batch-limit=0" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "name": "angle_deqp_khr_gles3_vulkan_tests", "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index d1d211b..82ef370 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -139,6 +139,11 @@ "label": "//third_party/angle/src/tests:angle_deqp_khr_gles3_tests", "type": "raw", }, + "angle_deqp_khr_gles31_tests": { + "args": [], + "label": "//third_party/angle/src/tests:angle_deqp_khr_gles31_tests", + "type": "raw", + }, "angle_end2end_tests": { "args": [], "label": "//third_party/angle/src/tests:angle_end2end_tests",
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index dc89335..4895eea 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -1605,7 +1605,9 @@ 'remove_from': [ # Flaky hangs crbug.com/940723 'Linux FYI GPU TSAN Release', + # Vulkan Driver needs updating crbug.com/953535 'Linux FYI Release (AMD R7 240)', + 'Linux FYI Release (Intel HD 630)', 'Linux FYI Debug (NVIDIA)', 'Linux FYI SkiaRenderer Vulkan (NVIDIA)', 'Linux FYI Release (NVIDIA)',
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 8a0425b..cc28bac4 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -2946,6 +2946,26 @@ }, }, + 'gpu_angle_deqp_gles31_vulkan_gtests': { + 'angle_deqp_gles31_vulkan_tests': { + 'android_args': [ + '--enable-xml-result-parsing', + '--shard-timeout=500' + ], + 'args': [ + '--deqp-egl-display-type=angle-vulkan', + ], + 'desktop_args': [ + '--test-launcher-batch-limit=400', + ], + 'should_retry_with_patch': False, + 'swarming': { + 'shards': 4, + }, + 'test': 'angle_deqp_gles31_tests', + }, + }, + 'gpu_angle_deqp_gles3_d3d11_gtests': { # TODO(jmadill): Run this on ANGLE roll tryservers. # Temporarily disabled on AMD Win 7 to prevent a recipe engine crash. @@ -3055,6 +3075,26 @@ }, }, + 'gpu_angle_deqp_khr_gles31_vulkan_gtests': { + 'angle_deqp_khr_gles31_vulkan_tests': { + 'android_args': [ + '--enable-xml-result-parsing', + '--shard-timeout=500' + ], + 'args': [ + '--deqp-egl-display-type=angle-vulkan', + ], + 'desktop_args': [ + '--test-launcher-batch-limit=0', + ], + 'should_retry_with_patch': False, + 'swarming': { + 'shards': 2, + }, + 'test': 'angle_deqp_khr_gles31_tests', + }, + }, + 'gpu_angle_deqp_khr_gles3_vulkan_gtests': { 'angle_deqp_khr_gles3_vulkan_tests': { 'android_args': [ @@ -3411,6 +3451,8 @@ '--enable-raster-to-sk-image', '--force-gpu-rasterization', '--disable-software-compositing-fallback', + '--disable-vulkan-fallback-to-gl-for-testing', + '--disable-headless-mode', ], 'linux_args': [ '--no-xvfb' ], 'test': 'content_browsertests', @@ -4892,8 +4934,10 @@ 'gpu_angle_deqp_egl_vulkan_gtests', 'gpu_angle_deqp_gles2_vulkan_gtests', 'gpu_angle_deqp_gles3_vulkan_gtests', + 'gpu_angle_deqp_gles31_vulkan_gtests', 'gpu_angle_deqp_khr_gles2_vulkan_gtests', 'gpu_angle_deqp_khr_gles3_vulkan_gtests', + 'gpu_angle_deqp_khr_gles31_vulkan_gtests', ], 'gpu_angle_deqp_linux_nvidia_gtests': [ @@ -4904,8 +4948,10 @@ 'gpu_angle_deqp_gles3_gl_gtests', 'gpu_angle_deqp_gles3_vulkan_gtests', 'gpu_angle_deqp_gles31_gl_gtests', + 'gpu_angle_deqp_gles31_vulkan_gtests', 'gpu_angle_deqp_khr_gles2_vulkan_gtests', 'gpu_angle_deqp_khr_gles3_vulkan_gtests', + 'gpu_angle_deqp_khr_gles31_vulkan_gtests', ], 'gpu_angle_deqp_mac_gtests': [ @@ -4931,8 +4977,10 @@ 'gpu_angle_deqp_gles3_vulkan_gtests', 'gpu_angle_deqp_gles31_d3d11_gtests', 'gpu_angle_deqp_gles31_gl_gtests', + 'gpu_angle_deqp_gles31_vulkan_gtests', 'gpu_angle_deqp_khr_gles2_vulkan_gtests', 'gpu_angle_deqp_khr_gles3_vulkan_gtests', + 'gpu_angle_deqp_khr_gles31_vulkan_gtests', ], 'gpu_angle_fyi_win_optional_and_representative_perf_isolated_scripts': [ @@ -5069,7 +5117,6 @@ 'gpu_angle_unit_gtests', 'gpu_angle_white_box_gtests', 'gpu_common_gtests', - 'gpu_fyi_vulkan_gtests', 'gpu_gles2_conform_gtests', 'gpu_swiftshader_gtests', ], @@ -5087,7 +5134,6 @@ 'gpu_fyi_linux_optional_gtests': [ 'gpu_angle_end2end_gtests', 'gpu_angle_white_box_gtests', - 'gpu_fyi_vulkan_gtests', 'gpu_gles2_conform_gtests', 'gpu_swiftshader_gtests', ],
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index a7f701e..e6259db 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -453,6 +453,7 @@ "web/web_navigation_type.h", "web/web_node.h", "web/web_option_element.h", + "web/web_origin_policy.h", "web/web_page_importance_signals.h", "web/web_page_popup.h", "web/web_pepper_socket.h",
diff --git a/third_party/blink/public/web/web_navigation_params.h b/third_party/blink/public/web/web_navigation_params.h index b830829a..fc63950 100644 --- a/third_party/blink/public/web/web_navigation_params.h +++ b/third_party/blink/public/web/web_navigation_params.h
@@ -33,6 +33,7 @@ #include "third_party/blink/public/web/web_navigation_policy.h" #include "third_party/blink/public/web/web_navigation_timings.h" #include "third_party/blink/public/web/web_navigation_type.h" +#include "third_party/blink/public/web/web_origin_policy.h" #include "third_party/blink/public/web/web_triggering_event_info.h" #if INSIDE_BLINK @@ -210,8 +211,6 @@ // The http content type of the request used to load the main resource, if // any. WebString http_content_type; - // The origin policy for this navigation. - WebString origin_policy; // The origin of the request used to load the main resource, specified at // https://fetch.spec.whatwg.org/#concept-request-origin. Can be null. // TODO(dgozman,nasko): we shouldn't need both this and |origin_to_commit|. @@ -332,6 +331,8 @@ // The origin trial features activated in the document initiating this // navigation that should be applied in the document being navigated to. WebVector<int> initiator_origin_trial_features; + + base::Optional<WebOriginPolicy> origin_policy; }; } // namespace blink
diff --git a/third_party/blink/public/web/web_origin_policy.h b/third_party/blink/public/web/web_origin_policy.h new file mode 100644 index 0000000..8d0b54ab --- /dev/null +++ b/third_party/blink/public/web/web_origin_policy.h
@@ -0,0 +1,41 @@ +// Copyright 2019 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 THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ORIGIN_POLICY_H_ +#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ORIGIN_POLICY_H_ + +#include "third_party/blink/public/platform/web_string.h" +#include "third_party/blink/public/platform/web_vector.h" + +namespace blink { + +// Represents a blink-understandable origin policy. This struct needs to be kept +// in sync with the OriginPolicyContents struct in +// //services/network/public/cpp/origin_policy.h. + +// Origin Policy spec: https://wicg.github.io/origin-policy/ +struct BLINK_EXPORT WebOriginPolicy { + // The feature policy that is dictated by the origin policy. Each feature + // is one member of the array. + // https://w3c.github.io/webappsec-feature-policy/ + WebVector<WebString> features; + + // These two fields together represent the CSP that should be applied to the + // origin, based on the origin policy. + // https://w3c.github.io/webappsec-csp/ + + // The "enforced" portion of the CSP. This CSP is to be treated as having + // an "enforced" disposition. + // https://w3c.github.io/webappsec-csp/#policy-disposition + WebVector<WebString> content_security_policies; + + // The "report-only" portion of the CSP. This CSP is to be treated as having + // a "report" disposition. + // https://w3c.github.io/webappsec-csp/#policy-disposition + WebVector<WebString> content_security_policies_report_only; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_ORIGIN_POLICY_H_
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_constants.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_constants.idl index 9c3014c..a8826db 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_constants.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_constants.idl
@@ -35,9 +35,5 @@ [RuntimeEnabled=FeatureName1] const short FEATURE1_ORIGIN_TRIAL_ENABLED_CONST2 = 7; [RuntimeEnabled=FeatureName2] const short FEATURE2_ORIGIN_TRIAL_ENABLED_CONST1 = 8; [RuntimeEnabled=FeatureName2] const short FEATURE2_ORIGIN_TRIAL_ENABLED_CONST2 = 9; - [RuntimeEnabled=OriginTrialFeature1] const short FEATURE3_ORIGIN_TRIAL_ENABLED_CONST1 = 10; - [RuntimeEnabled=OriginTrialFeature1] const short FEATURE3_ORIGIN_TRIAL_ENABLED_CONST2 = 11; - [RuntimeEnabled=OriginTrialFeature2] const short FEATURE4_ORIGIN_TRIAL_ENABLED_CONST1 = 12; - [RuntimeEnabled=OriginTrialFeature2] const short FEATURE4_ORIGIN_TRIAL_ENABLED_CONST2 = 13; [Reflect=CONST_IMPL] const short CONST_JAVASCRIPT = 1; };
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_dictionary.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_dictionary.idl index ab862c4b..82744c67 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_dictionary.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_dictionary.idl
@@ -41,8 +41,6 @@ [RuntimeEnabled=RuntimeFeature] boolean runtimeSecondMember; [RuntimeEnabled=FeatureName] boolean originTrialMember; [RuntimeEnabled=FeatureName1] boolean originTrialSecondMember; - [RuntimeEnabled=OriginTrialFeature] boolean originTrialThirdMember; - [RuntimeEnabled=OriginTrialFeature1] boolean originTrialFourthMember; record<ByteString, byte> recordMember; record<USVString, TestObject> garbageCollectedRecordMember; record<ByteString, (long or boolean)> unionInRecordMember;
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl index 91081ea..f3b35e4 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl
@@ -91,7 +91,6 @@ [Exposed=Worker] void workerExposedMethod(); [Exposed=Window] void windowExposedMethod(); [Exposed=Window,RuntimeEnabled=TestFeature] void originTrialWindowExposedMethod(); - [Exposed=Window,RuntimeEnabled=OriginTrialFeature] void originTrialWindowExposedMethod2(); static void alwaysExposedStaticMethod(); [Exposed=Worker] static void workerExposedStaticMethod();
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl index a7cd992..7d28ca2 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl
@@ -157,7 +157,6 @@ [MeasureAs=TestFeature] attribute long measureAsLongAttribute; [NotEnumerable] attribute long notEnumerableLongAttribute; [RuntimeEnabled=FeatureName] attribute long originTrialEnabledLongAttribute; - [RuntimeEnabled=OriginTrialFeature] attribute long originTrialEnabledLongAttribute2; [PerWorldBindings] readonly attribute TestInterfaceEmpty perWorldBindingsReadonlyTestInterfaceEmptyAttribute; [LogActivity, LogAllWorlds, PerWorldBindings] attribute long activityLoggingAccessPerWorldBindingsLongAttribute; [LogActivity, PerWorldBindings] attribute long activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute;
diff --git a/third_party/blink/renderer/bindings/tests/idls/modules/test_interface_partial_4.idl b/third_party/blink/renderer/bindings/tests/idls/modules/test_interface_partial_4.idl index acb9be7..f341578 100644 --- a/third_party/blink/renderer/bindings/tests/idls/modules/test_interface_partial_4.idl +++ b/third_party/blink/renderer/bindings/tests/idls/modules/test_interface_partial_4.idl
@@ -2,13 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Test for [OriginTrialEnabled] extended attribute applied to a partial -// interface. This is separate from TestInterfacePartial, as the -// [OriginTrialEnabled] attribute cannot be applied with [RuntimeEnabled]. +// Test for [RuntimeEnabled] extended attribute referencing an origin trial +// applied to a partial interface. [ ImplementedAs=TestInterfacePartial4, - RuntimeEnabled=OriginTrialPartialFeature, // Conflicts with RuntimeEnabled + RuntimeEnabled=OriginTrialPartialFeature, SecureContext ] partial interface TestInterface { const unsigned short PARTIAL4_UNSIGNED_SHORT = 4;
diff --git a/third_party/blink/renderer/bindings/tests/idls/runtime_enabled_features.json5 b/third_party/blink/renderer/bindings/tests/idls/runtime_enabled_features.json5 index 522f002..820a5d3 100644 --- a/third_party/blink/renderer/bindings/tests/idls/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/bindings/tests/idls/runtime_enabled_features.json5
@@ -44,22 +44,6 @@ name: "Mixin2RuntimeFeature", }, { - name: "OriginTrialFeature", - in_origin_trial: true, - }, - { - name: "OriginTrialFeature1", - in_origin_trial: true, - }, - { - name: "OriginTrialFeature2", - in_origin_trial: true, - }, - { - name: "OriginTrialFeature3", - in_origin_trial: true, - }, - { name: "OriginTrialPartialFeature", in_origin_trial: true, },
diff --git a/third_party/blink/renderer/bindings/tests/results/core/origin_trial_features_for_core.cc b/third_party/blink/renderer/bindings/tests/results/core/origin_trial_features_for_core.cc index eb8ab96e..c19f1a4 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/origin_trial_features_for_core.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/origin_trial_features_for_core.cc
@@ -60,20 +60,12 @@ // TODO(iclelland): Extract this common code out of OriginTrialFeaturesForCore // and OriginTrialFeaturesForModules into a block. if (wrapper_type_info == V8TestInterface::GetWrapperTypeInfo()) { - if (RuntimeEnabledFeatures::OriginTrialFeatureEnabled(execution_context)) { - V8TestInterface::InstallOriginTrialFeature( - isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); - } if (RuntimeEnabledFeatures::TestFeatureEnabled(execution_context)) { V8TestInterface::InstallTestFeature( isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); } } if (wrapper_type_info == V8TestObject::GetWrapperTypeInfo()) { - if (RuntimeEnabledFeatures::OriginTrialFeatureEnabled(execution_context)) { - V8TestObject::InstallOriginTrialFeature( - isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); - } if (RuntimeEnabledFeatures::FeatureNameEnabled(execution_context)) { V8TestObject::InstallFeatureName( isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); @@ -101,19 +93,6 @@ } break; } - case OriginTrialFeature::kOriginTrialFeature: { - if (context_data->GetExistingConstructorAndPrototypeForType( - V8TestInterface::GetWrapperTypeInfo(), &prototype_object, &interface_object)) { - V8TestInterface::InstallOriginTrialFeature( - isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); - } - if (context_data->GetExistingConstructorAndPrototypeForType( - V8TestObject::GetWrapperTypeInfo(), &prototype_object, &interface_object)) { - V8TestObject::InstallOriginTrialFeature( - isolate, world, v8::Local<v8::Object>(), prototype_object, interface_object); - } - break; - } case OriginTrialFeature::kTestFeature: { if (context_data->GetExistingConstructorAndPrototypeForType( V8TestInterface::GetWrapperTypeInfo(), &prototype_object, &interface_object)) {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h index 56dd9686..3a16af6 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h +++ b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h
@@ -242,13 +242,6 @@ void setObjectOrNullMember(ScriptValue); void setObjectOrNullMemberToNull(); - bool hasOriginTrialFourthMember() const { return has_origin_trial_fourth_member_; } - bool originTrialFourthMember() const { - DCHECK(has_origin_trial_fourth_member_); - return origin_trial_fourth_member_; - } - inline void setOriginTrialFourthMember(bool); - bool hasOriginTrialMember() const { return has_origin_trial_member_; } bool originTrialMember() const { DCHECK(has_origin_trial_member_); @@ -263,13 +256,6 @@ } inline void setOriginTrialSecondMember(bool); - bool hasOriginTrialThirdMember() const { return has_origin_trial_third_member_; } - bool originTrialThirdMember() const { - DCHECK(has_origin_trial_third_member_); - return origin_trial_third_member_; - } - inline void setOriginTrialThirdMember(bool); - bool hasOtherDoubleOrStringMember() const { return !other_double_or_string_member_.IsNull(); } const DoubleOrString& otherDoubleOrStringMember() const { return other_double_or_string_member_; @@ -488,10 +474,8 @@ bool has_is_public_ = false; bool has_long_member_ = false; bool has_member_with_hyphen_in_name_ = false; - bool has_origin_trial_fourth_member_ = false; bool has_origin_trial_member_ = false; bool has_origin_trial_second_member_ = false; - bool has_origin_trial_third_member_ = false; bool has_record_member_ = false; bool has_restricted_double_member_ = false; bool has_runtime_member_ = false; @@ -537,10 +521,8 @@ bool member_with_hyphen_in_name_; ScriptValue object_member_; ScriptValue object_or_null_member_; - bool origin_trial_fourth_member_; bool origin_trial_member_; bool origin_trial_second_member_; - bool origin_trial_third_member_; DoubleOrString other_double_or_string_member_; Vector<std::pair<String, int8_t>> record_member_; Member<V8VoidCallbackFunction> required_callback_function_member_; @@ -648,11 +630,6 @@ has_member_with_hyphen_in_name_ = true; } -void TestDictionary::setOriginTrialFourthMember(bool value) { - origin_trial_fourth_member_ = value; - has_origin_trial_fourth_member_ = true; -} - void TestDictionary::setOriginTrialMember(bool value) { origin_trial_member_ = value; has_origin_trial_member_ = true; @@ -663,11 +640,6 @@ has_origin_trial_second_member_ = true; } -void TestDictionary::setOriginTrialThirdMember(bool value) { - origin_trial_third_member_ = value; - has_origin_trial_third_member_ = true; -} - void TestDictionary::setRestrictedDoubleMember(double value) { restricted_double_member_ = value; has_restricted_double_member_ = true;
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.cc index 6bf2c48..e2f6e828 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.cc
@@ -156,10 +156,6 @@ static_assert(7 == TestConstants::kFeature1OriginTrialEnabledConst2, "the value of TestConstants_kFeature1OriginTrialEnabledConst2 does not match with implementation"); static_assert(8 == TestConstants::kFeature2OriginTrialEnabledConst1, "the value of TestConstants_kFeature2OriginTrialEnabledConst1 does not match with implementation"); static_assert(9 == TestConstants::kFeature2OriginTrialEnabledConst2, "the value of TestConstants_kFeature2OriginTrialEnabledConst2 does not match with implementation"); - static_assert(10 == TestConstants::kFeature3OriginTrialEnabledConst1, "the value of TestConstants_kFeature3OriginTrialEnabledConst1 does not match with implementation"); - static_assert(11 == TestConstants::kFeature3OriginTrialEnabledConst2, "the value of TestConstants_kFeature3OriginTrialEnabledConst2 does not match with implementation"); - static_assert(12 == TestConstants::kFeature4OriginTrialEnabledConst1, "the value of TestConstants_kFeature4OriginTrialEnabledConst1 does not match with implementation"); - static_assert(13 == TestConstants::kFeature4OriginTrialEnabledConst2, "the value of TestConstants_kFeature4OriginTrialEnabledConst2 does not match with implementation"); static_assert(1 == TestConstants::CONST_IMPL, "the value of TestConstants_CONST_IMPL does not match with implementation"); // Custom signature @@ -264,68 +260,6 @@ InstallFeatureName2(script_state, v8::Local<v8::Object>()); } -void V8TestConstants::InstallOriginTrialFeature1( - v8::Isolate* isolate, - const DOMWrapperWorld& world, - v8::Local<v8::Object> instance, - v8::Local<v8::Object> prototype, - v8::Local<v8::Function> interface) { - static constexpr V8DOMConfiguration::ConstantConfiguration - kFEATURE3ORIGINTRIALENABLEDCONST1Configuration = {"FEATURE3_ORIGIN_TRIAL_ENABLED_CONST1", V8DOMConfiguration::kConstantTypeShort, static_cast<int>(10)}; - V8DOMConfiguration::InstallConstant( - isolate, interface, prototype, kFEATURE3ORIGINTRIALENABLEDCONST1Configuration); - static constexpr V8DOMConfiguration::ConstantConfiguration - kFEATURE3ORIGINTRIALENABLEDCONST2Configuration = {"FEATURE3_ORIGIN_TRIAL_ENABLED_CONST2", V8DOMConfiguration::kConstantTypeShort, static_cast<int>(11)}; - V8DOMConfiguration::InstallConstant( - isolate, interface, prototype, kFEATURE3ORIGINTRIALENABLEDCONST2Configuration); -} - -void V8TestConstants::InstallOriginTrialFeature1( - ScriptState* script_state, v8::Local<v8::Object> instance) { - V8PerContextData* per_context_data = script_state->PerContextData(); - v8::Local<v8::Object> prototype = per_context_data->PrototypeForType( - V8TestConstants::GetWrapperTypeInfo()); - v8::Local<v8::Function> interface = per_context_data->ConstructorForType( - V8TestConstants::GetWrapperTypeInfo()); - ALLOW_UNUSED_LOCAL(interface); - InstallOriginTrialFeature1(script_state->GetIsolate(), script_state->World(), instance, prototype, interface); -} - -void V8TestConstants::InstallOriginTrialFeature1(ScriptState* script_state) { - InstallOriginTrialFeature1(script_state, v8::Local<v8::Object>()); -} - -void V8TestConstants::InstallOriginTrialFeature2( - v8::Isolate* isolate, - const DOMWrapperWorld& world, - v8::Local<v8::Object> instance, - v8::Local<v8::Object> prototype, - v8::Local<v8::Function> interface) { - static constexpr V8DOMConfiguration::ConstantConfiguration - kFEATURE4ORIGINTRIALENABLEDCONST1Configuration = {"FEATURE4_ORIGIN_TRIAL_ENABLED_CONST1", V8DOMConfiguration::kConstantTypeShort, static_cast<int>(12)}; - V8DOMConfiguration::InstallConstant( - isolate, interface, prototype, kFEATURE4ORIGINTRIALENABLEDCONST1Configuration); - static constexpr V8DOMConfiguration::ConstantConfiguration - kFEATURE4ORIGINTRIALENABLEDCONST2Configuration = {"FEATURE4_ORIGIN_TRIAL_ENABLED_CONST2", V8DOMConfiguration::kConstantTypeShort, static_cast<int>(13)}; - V8DOMConfiguration::InstallConstant( - isolate, interface, prototype, kFEATURE4ORIGINTRIALENABLEDCONST2Configuration); -} - -void V8TestConstants::InstallOriginTrialFeature2( - ScriptState* script_state, v8::Local<v8::Object> instance) { - V8PerContextData* per_context_data = script_state->PerContextData(); - v8::Local<v8::Object> prototype = per_context_data->PrototypeForType( - V8TestConstants::GetWrapperTypeInfo()); - v8::Local<v8::Function> interface = per_context_data->ConstructorForType( - V8TestConstants::GetWrapperTypeInfo()); - ALLOW_UNUSED_LOCAL(interface); - InstallOriginTrialFeature2(script_state->GetIsolate(), script_state->World(), instance, prototype, interface); -} - -void V8TestConstants::InstallOriginTrialFeature2(ScriptState* script_state) { - InstallOriginTrialFeature2(script_state, v8::Local<v8::Object>()); -} - v8::Local<v8::FunctionTemplate> V8TestConstants::DomTemplate( v8::Isolate* isolate, const DOMWrapperWorld& world) { return V8DOMConfiguration::DomClassTemplate(
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.h index 4557820..b05cb0a 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.h +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_constants.h
@@ -53,14 +53,6 @@ static void InstallFeatureName2(ScriptState*, v8::Local<v8::Object> instance); static void InstallFeatureName2(ScriptState*); - static void InstallOriginTrialFeature1(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface); - static void InstallOriginTrialFeature1(ScriptState*, v8::Local<v8::Object> instance); - static void InstallOriginTrialFeature1(ScriptState*); - - static void InstallOriginTrialFeature2(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface); - static void InstallOriginTrialFeature2(ScriptState*, v8::Local<v8::Object> instance); - static void InstallOriginTrialFeature2(ScriptState*); - // Callback functions CORE_EXPORT static void DEPRECATEDCONSTANTConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&); CORE_EXPORT static void MEASUREDCONSTANTConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc index 7fde8bc..b8dec3df 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_dictionary.cc
@@ -66,10 +66,8 @@ "member-with-hyphen-in-name", "objectMember", "objectOrNullMember", - "originTrialFourthMember", "originTrialMember", "originTrialSecondMember", - "originTrialThirdMember", "otherDoubleOrStringMember", "public", "recordMember", @@ -576,7 +574,7 @@ } v8::Local<v8::Value> other_double_or_string_member_value; - if (!v8Object->Get(context, keys[33].Get(isolate)).ToLocal(&other_double_or_string_member_value)) { + if (!v8Object->Get(context, keys[31].Get(isolate)).ToLocal(&other_double_or_string_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -591,7 +589,7 @@ } v8::Local<v8::Value> public_value; - if (!v8Object->Get(context, keys[34].Get(isolate)).ToLocal(&public_value)) { + if (!v8Object->Get(context, keys[32].Get(isolate)).ToLocal(&public_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -605,7 +603,7 @@ } v8::Local<v8::Value> record_member_value; - if (!v8Object->Get(context, keys[35].Get(isolate)).ToLocal(&record_member_value)) { + if (!v8Object->Get(context, keys[33].Get(isolate)).ToLocal(&record_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -619,7 +617,7 @@ } v8::Local<v8::Value> required_callback_function_member_value; - if (!v8Object->Get(context, keys[36].Get(isolate)).ToLocal(&required_callback_function_member_value)) { + if (!v8Object->Get(context, keys[34].Get(isolate)).ToLocal(&required_callback_function_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -636,7 +634,7 @@ } v8::Local<v8::Value> restricted_double_member_value; - if (!v8Object->Get(context, keys[37].Get(isolate)).ToLocal(&restricted_double_member_value)) { + if (!v8Object->Get(context, keys[35].Get(isolate)).ToLocal(&restricted_double_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -650,7 +648,7 @@ } v8::Local<v8::Value> string_member_value; - if (!v8Object->Get(context, keys[40].Get(isolate)).ToLocal(&string_member_value)) { + if (!v8Object->Get(context, keys[38].Get(isolate)).ToLocal(&string_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -664,7 +662,7 @@ } v8::Local<v8::Value> string_or_null_member_value; - if (!v8Object->Get(context, keys[41].Get(isolate)).ToLocal(&string_or_null_member_value)) { + if (!v8Object->Get(context, keys[39].Get(isolate)).ToLocal(&string_or_null_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -678,7 +676,7 @@ } v8::Local<v8::Value> string_or_null_record_member_value; - if (!v8Object->Get(context, keys[42].Get(isolate)).ToLocal(&string_or_null_record_member_value)) { + if (!v8Object->Get(context, keys[40].Get(isolate)).ToLocal(&string_or_null_record_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -692,7 +690,7 @@ } v8::Local<v8::Value> string_or_null_sequence_member_value; - if (!v8Object->Get(context, keys[43].Get(isolate)).ToLocal(&string_or_null_sequence_member_value)) { + if (!v8Object->Get(context, keys[41].Get(isolate)).ToLocal(&string_or_null_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -706,7 +704,7 @@ } v8::Local<v8::Value> string_sequence_member_value; - if (!v8Object->Get(context, keys[44].Get(isolate)).ToLocal(&string_sequence_member_value)) { + if (!v8Object->Get(context, keys[42].Get(isolate)).ToLocal(&string_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -720,7 +718,7 @@ } v8::Local<v8::Value> test_enum_or_null_or_test_enum_sequence_member_value; - if (!v8Object->Get(context, keys[45].Get(isolate)).ToLocal(&test_enum_or_null_or_test_enum_sequence_member_value)) { + if (!v8Object->Get(context, keys[43].Get(isolate)).ToLocal(&test_enum_or_null_or_test_enum_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -735,7 +733,7 @@ } v8::Local<v8::Value> test_enum_or_test_enum_or_null_sequence_member_value; - if (!v8Object->Get(context, keys[46].Get(isolate)).ToLocal(&test_enum_or_test_enum_or_null_sequence_member_value)) { + if (!v8Object->Get(context, keys[44].Get(isolate)).ToLocal(&test_enum_or_test_enum_or_null_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -750,7 +748,7 @@ } v8::Local<v8::Value> test_enum_or_test_enum_sequence_member_value; - if (!v8Object->Get(context, keys[47].Get(isolate)).ToLocal(&test_enum_or_test_enum_sequence_member_value)) { + if (!v8Object->Get(context, keys[45].Get(isolate)).ToLocal(&test_enum_or_test_enum_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -765,7 +763,7 @@ } v8::Local<v8::Value> test_interface_2_or_uint8_array_member_value; - if (!v8Object->Get(context, keys[48].Get(isolate)).ToLocal(&test_interface_2_or_uint8_array_member_value)) { + if (!v8Object->Get(context, keys[46].Get(isolate)).ToLocal(&test_interface_2_or_uint8_array_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -780,7 +778,7 @@ } v8::Local<v8::Value> test_interface_member_value; - if (!v8Object->Get(context, keys[49].Get(isolate)).ToLocal(&test_interface_member_value)) { + if (!v8Object->Get(context, keys[47].Get(isolate)).ToLocal(&test_interface_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -796,7 +794,7 @@ } v8::Local<v8::Value> test_interface_or_null_member_value; - if (!v8Object->Get(context, keys[50].Get(isolate)).ToLocal(&test_interface_or_null_member_value)) { + if (!v8Object->Get(context, keys[48].Get(isolate)).ToLocal(&test_interface_or_null_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -814,7 +812,7 @@ } v8::Local<v8::Value> test_interface_sequence_member_value; - if (!v8Object->Get(context, keys[51].Get(isolate)).ToLocal(&test_interface_sequence_member_value)) { + if (!v8Object->Get(context, keys[49].Get(isolate)).ToLocal(&test_interface_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -828,7 +826,7 @@ } v8::Local<v8::Value> test_object_sequence_member_value; - if (!v8Object->Get(context, keys[52].Get(isolate)).ToLocal(&test_object_sequence_member_value)) { + if (!v8Object->Get(context, keys[50].Get(isolate)).ToLocal(&test_object_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -842,7 +840,7 @@ } v8::Local<v8::Value> treat_non_null_obj_member_value; - if (!v8Object->Get(context, keys[53].Get(isolate)).ToLocal(&treat_non_null_obj_member_value)) { + if (!v8Object->Get(context, keys[51].Get(isolate)).ToLocal(&treat_non_null_obj_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -858,7 +856,7 @@ } v8::Local<v8::Value> treat_null_as_string_sequence_member_value; - if (!v8Object->Get(context, keys[54].Get(isolate)).ToLocal(&treat_null_as_string_sequence_member_value)) { + if (!v8Object->Get(context, keys[52].Get(isolate)).ToLocal(&treat_null_as_string_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -872,7 +870,7 @@ } v8::Local<v8::Value> uint8_array_member_value; - if (!v8Object->Get(context, keys[55].Get(isolate)).ToLocal(&uint8_array_member_value)) { + if (!v8Object->Get(context, keys[53].Get(isolate)).ToLocal(&uint8_array_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -890,7 +888,7 @@ } v8::Local<v8::Value> union_in_record_member_value; - if (!v8Object->Get(context, keys[56].Get(isolate)).ToLocal(&union_in_record_member_value)) { + if (!v8Object->Get(context, keys[54].Get(isolate)).ToLocal(&union_in_record_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -904,7 +902,7 @@ } v8::Local<v8::Value> union_member_with_sequence_default_value; - if (!v8Object->Get(context, keys[57].Get(isolate)).ToLocal(&union_member_with_sequence_default_value)) { + if (!v8Object->Get(context, keys[55].Get(isolate)).ToLocal(&union_member_with_sequence_default_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -919,7 +917,7 @@ } v8::Local<v8::Value> union_or_null_record_member_value; - if (!v8Object->Get(context, keys[58].Get(isolate)).ToLocal(&union_or_null_record_member_value)) { + if (!v8Object->Get(context, keys[56].Get(isolate)).ToLocal(&union_or_null_record_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -933,7 +931,7 @@ } v8::Local<v8::Value> union_or_null_sequence_member_value; - if (!v8Object->Get(context, keys[59].Get(isolate)).ToLocal(&union_or_null_sequence_member_value)) { + if (!v8Object->Get(context, keys[57].Get(isolate)).ToLocal(&union_or_null_sequence_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -947,7 +945,7 @@ } v8::Local<v8::Value> union_with_annotated_type_member_value; - if (!v8Object->Get(context, keys[60].Get(isolate)).ToLocal(&union_with_annotated_type_member_value)) { + if (!v8Object->Get(context, keys[58].Get(isolate)).ToLocal(&union_with_annotated_type_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -962,7 +960,7 @@ } v8::Local<v8::Value> union_with_typedefs_value; - if (!v8Object->Get(context, keys[61].Get(isolate)).ToLocal(&union_with_typedefs_value)) { + if (!v8Object->Get(context, keys[59].Get(isolate)).ToLocal(&union_with_typedefs_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -977,7 +975,7 @@ } v8::Local<v8::Value> unrestricted_double_member_value; - if (!v8Object->Get(context, keys[62].Get(isolate)).ToLocal(&unrestricted_double_member_value)) { + if (!v8Object->Get(context, keys[60].Get(isolate)).ToLocal(&unrestricted_double_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -991,7 +989,7 @@ } v8::Local<v8::Value> usv_string_or_null_member_value; - if (!v8Object->Get(context, keys[63].Get(isolate)).ToLocal(&usv_string_or_null_member_value)) { + if (!v8Object->Get(context, keys[61].Get(isolate)).ToLocal(&usv_string_or_null_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -1006,7 +1004,7 @@ if (RuntimeEnabledFeatures::RuntimeFeatureEnabled()) { v8::Local<v8::Value> runtime_member_value; - if (!v8Object->Get(context, keys[38].Get(isolate)).ToLocal(&runtime_member_value)) { + if (!v8Object->Get(context, keys[36].Get(isolate)).ToLocal(&runtime_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -1020,7 +1018,7 @@ } v8::Local<v8::Value> runtime_second_member_value; - if (!v8Object->Get(context, keys[39].Get(isolate)).ToLocal(&runtime_second_member_value)) { + if (!v8Object->Get(context, keys[37].Get(isolate)).ToLocal(&runtime_second_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -1036,7 +1034,7 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled(executionContext)) { v8::Local<v8::Value> origin_trial_member_value; - if (!v8Object->Get(context, keys[30].Get(isolate)).ToLocal(&origin_trial_member_value)) { + if (!v8Object->Get(context, keys[29].Get(isolate)).ToLocal(&origin_trial_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -1052,7 +1050,7 @@ if (RuntimeEnabledFeatures::FeatureName1Enabled(executionContext)) { v8::Local<v8::Value> origin_trial_second_member_value; - if (!v8Object->Get(context, keys[31].Get(isolate)).ToLocal(&origin_trial_second_member_value)) { + if (!v8Object->Get(context, keys[30].Get(isolate)).ToLocal(&origin_trial_second_member_value)) { exception_state.RethrowV8Exception(block.Exception()); return; } @@ -1065,38 +1063,6 @@ impl->setOriginTrialSecondMember(origin_trial_second_member_cpp_value); } } - - if (RuntimeEnabledFeatures::OriginTrialFeatureEnabled(executionContext)) { - v8::Local<v8::Value> origin_trial_third_member_value; - if (!v8Object->Get(context, keys[32].Get(isolate)).ToLocal(&origin_trial_third_member_value)) { - exception_state.RethrowV8Exception(block.Exception()); - return; - } - if (origin_trial_third_member_value.IsEmpty() || origin_trial_third_member_value->IsUndefined()) { - // Do nothing. - } else { - bool origin_trial_third_member_cpp_value = NativeValueTraits<IDLBoolean>::NativeValue(isolate, origin_trial_third_member_value, exception_state); - if (exception_state.HadException()) - return; - impl->setOriginTrialThirdMember(origin_trial_third_member_cpp_value); - } - } - - if (RuntimeEnabledFeatures::OriginTrialFeature1Enabled(executionContext)) { - v8::Local<v8::Value> origin_trial_fourth_member_value; - if (!v8Object->Get(context, keys[29].Get(isolate)).ToLocal(&origin_trial_fourth_member_value)) { - exception_state.RethrowV8Exception(block.Exception()); - return; - } - if (origin_trial_fourth_member_value.IsEmpty() || origin_trial_fourth_member_value->IsUndefined()) { - // Do nothing. - } else { - bool origin_trial_fourth_member_cpp_value = NativeValueTraits<IDLBoolean>::NativeValue(isolate, origin_trial_fourth_member_value, exception_state); - if (exception_state.HadException()) - return; - impl->setOriginTrialFourthMember(origin_trial_fourth_member_cpp_value); - } - } } v8::Local<v8::Value> TestDictionary::ToV8Impl(v8::Local<v8::Object> creationContext, v8::Isolate* isolate) const { @@ -1479,7 +1445,7 @@ other_double_or_string_member_has_value_or_default = true; } if (other_double_or_string_member_has_value_or_default && - !create_property(33, other_double_or_string_member_value)) { + !create_property(31, other_double_or_string_member_value)) { return false; } @@ -1490,7 +1456,7 @@ public_has_value_or_default = true; } if (public_has_value_or_default && - !create_property(34, public_value)) { + !create_property(32, public_value)) { return false; } @@ -1501,7 +1467,7 @@ record_member_has_value_or_default = true; } if (record_member_has_value_or_default && - !create_property(35, record_member_value)) { + !create_property(33, record_member_value)) { return false; } @@ -1514,7 +1480,7 @@ NOTREACHED(); } if (required_callback_function_member_has_value_or_default && - !create_property(36, required_callback_function_member_value)) { + !create_property(34, required_callback_function_member_value)) { return false; } @@ -1528,7 +1494,7 @@ restricted_double_member_has_value_or_default = true; } if (restricted_double_member_has_value_or_default && - !create_property(37, restricted_double_member_value)) { + !create_property(35, restricted_double_member_value)) { return false; } @@ -1539,7 +1505,7 @@ string_member_has_value_or_default = true; } if (string_member_has_value_or_default && - !create_property(40, string_member_value)) { + !create_property(38, string_member_value)) { return false; } @@ -1553,7 +1519,7 @@ string_or_null_member_has_value_or_default = true; } if (string_or_null_member_has_value_or_default && - !create_property(41, string_or_null_member_value)) { + !create_property(39, string_or_null_member_value)) { return false; } @@ -1564,7 +1530,7 @@ string_or_null_record_member_has_value_or_default = true; } if (string_or_null_record_member_has_value_or_default && - !create_property(42, string_or_null_record_member_value)) { + !create_property(40, string_or_null_record_member_value)) { return false; } @@ -1575,7 +1541,7 @@ string_or_null_sequence_member_has_value_or_default = true; } if (string_or_null_sequence_member_has_value_or_default && - !create_property(43, string_or_null_sequence_member_value)) { + !create_property(41, string_or_null_sequence_member_value)) { return false; } @@ -1589,7 +1555,7 @@ string_sequence_member_has_value_or_default = true; } if (string_sequence_member_has_value_or_default && - !create_property(44, string_sequence_member_value)) { + !create_property(42, string_sequence_member_value)) { return false; } @@ -1600,7 +1566,7 @@ test_enum_or_null_or_test_enum_sequence_member_has_value_or_default = true; } if (test_enum_or_null_or_test_enum_sequence_member_has_value_or_default && - !create_property(45, test_enum_or_null_or_test_enum_sequence_member_value)) { + !create_property(43, test_enum_or_null_or_test_enum_sequence_member_value)) { return false; } @@ -1611,7 +1577,7 @@ test_enum_or_test_enum_or_null_sequence_member_has_value_or_default = true; } if (test_enum_or_test_enum_or_null_sequence_member_has_value_or_default && - !create_property(46, test_enum_or_test_enum_or_null_sequence_member_value)) { + !create_property(44, test_enum_or_test_enum_or_null_sequence_member_value)) { return false; } @@ -1622,7 +1588,7 @@ test_enum_or_test_enum_sequence_member_has_value_or_default = true; } if (test_enum_or_test_enum_sequence_member_has_value_or_default && - !create_property(47, test_enum_or_test_enum_sequence_member_value)) { + !create_property(45, test_enum_or_test_enum_sequence_member_value)) { return false; } @@ -1633,7 +1599,7 @@ test_interface_2_or_uint8_array_member_has_value_or_default = true; } if (test_interface_2_or_uint8_array_member_has_value_or_default && - !create_property(48, test_interface_2_or_uint8_array_member_value)) { + !create_property(46, test_interface_2_or_uint8_array_member_value)) { return false; } @@ -1644,7 +1610,7 @@ test_interface_member_has_value_or_default = true; } if (test_interface_member_has_value_or_default && - !create_property(49, test_interface_member_value)) { + !create_property(47, test_interface_member_value)) { return false; } @@ -1655,7 +1621,7 @@ test_interface_or_null_member_has_value_or_default = true; } if (test_interface_or_null_member_has_value_or_default && - !create_property(50, test_interface_or_null_member_value)) { + !create_property(48, test_interface_or_null_member_value)) { return false; } @@ -1669,7 +1635,7 @@ test_interface_sequence_member_has_value_or_default = true; } if (test_interface_sequence_member_has_value_or_default && - !create_property(51, test_interface_sequence_member_value)) { + !create_property(49, test_interface_sequence_member_value)) { return false; } @@ -1680,7 +1646,7 @@ test_object_sequence_member_has_value_or_default = true; } if (test_object_sequence_member_has_value_or_default && - !create_property(52, test_object_sequence_member_value)) { + !create_property(50, test_object_sequence_member_value)) { return false; } @@ -1691,7 +1657,7 @@ treat_non_null_obj_member_has_value_or_default = true; } if (treat_non_null_obj_member_has_value_or_default && - !create_property(53, treat_non_null_obj_member_value)) { + !create_property(51, treat_non_null_obj_member_value)) { return false; } @@ -1705,7 +1671,7 @@ treat_null_as_string_sequence_member_has_value_or_default = true; } if (treat_null_as_string_sequence_member_has_value_or_default && - !create_property(54, treat_null_as_string_sequence_member_value)) { + !create_property(52, treat_null_as_string_sequence_member_value)) { return false; } @@ -1716,7 +1682,7 @@ uint8_array_member_has_value_or_default = true; } if (uint8_array_member_has_value_or_default && - !create_property(55, uint8_array_member_value)) { + !create_property(53, uint8_array_member_value)) { return false; } @@ -1727,7 +1693,7 @@ union_in_record_member_has_value_or_default = true; } if (union_in_record_member_has_value_or_default && - !create_property(56, union_in_record_member_value)) { + !create_property(54, union_in_record_member_value)) { return false; } @@ -1741,7 +1707,7 @@ union_member_with_sequence_default_has_value_or_default = true; } if (union_member_with_sequence_default_has_value_or_default && - !create_property(57, union_member_with_sequence_default_value)) { + !create_property(55, union_member_with_sequence_default_value)) { return false; } @@ -1752,7 +1718,7 @@ union_or_null_record_member_has_value_or_default = true; } if (union_or_null_record_member_has_value_or_default && - !create_property(58, union_or_null_record_member_value)) { + !create_property(56, union_or_null_record_member_value)) { return false; } @@ -1763,7 +1729,7 @@ union_or_null_sequence_member_has_value_or_default = true; } if (union_or_null_sequence_member_has_value_or_default && - !create_property(59, union_or_null_sequence_member_value)) { + !create_property(57, union_or_null_sequence_member_value)) { return false; } @@ -1774,7 +1740,7 @@ union_with_annotated_type_member_has_value_or_default = true; } if (union_with_annotated_type_member_has_value_or_default && - !create_property(60, union_with_annotated_type_member_value)) { + !create_property(58, union_with_annotated_type_member_value)) { return false; } @@ -1785,7 +1751,7 @@ union_with_typedefs_has_value_or_default = true; } if (union_with_typedefs_has_value_or_default && - !create_property(61, union_with_typedefs_value)) { + !create_property(59, union_with_typedefs_value)) { return false; } @@ -1799,7 +1765,7 @@ unrestricted_double_member_has_value_or_default = true; } if (unrestricted_double_member_has_value_or_default && - !create_property(62, unrestricted_double_member_value)) { + !create_property(60, unrestricted_double_member_value)) { return false; } @@ -1813,7 +1779,7 @@ usv_string_or_null_member_has_value_or_default = true; } if (usv_string_or_null_member_has_value_or_default && - !create_property(63, usv_string_or_null_member_value)) { + !create_property(61, usv_string_or_null_member_value)) { return false; } @@ -1825,7 +1791,7 @@ runtime_member_has_value_or_default = true; } if (runtime_member_has_value_or_default && - !create_property(38, runtime_member_value)) { + !create_property(36, runtime_member_value)) { return false; } @@ -1836,7 +1802,7 @@ runtime_second_member_has_value_or_default = true; } if (runtime_second_member_has_value_or_default && - !create_property(39, runtime_second_member_value)) { + !create_property(37, runtime_second_member_value)) { return false; } } @@ -1849,7 +1815,7 @@ origin_trial_member_has_value_or_default = true; } if (origin_trial_member_has_value_or_default && - !create_property(30, origin_trial_member_value)) { + !create_property(29, origin_trial_member_value)) { return false; } } @@ -1862,33 +1828,7 @@ origin_trial_second_member_has_value_or_default = true; } if (origin_trial_second_member_has_value_or_default && - !create_property(31, origin_trial_second_member_value)) { - return false; - } - } - - if (RuntimeEnabledFeatures::OriginTrialFeatureEnabled(executionContext)) { - v8::Local<v8::Value> origin_trial_third_member_value; - bool origin_trial_third_member_has_value_or_default = false; - if (impl->hasOriginTrialThirdMember()) { - origin_trial_third_member_value = v8::Boolean::New(isolate, impl->originTrialThirdMember()); - origin_trial_third_member_has_value_or_default = true; - } - if (origin_trial_third_member_has_value_or_default && - !create_property(32, origin_trial_third_member_value)) { - return false; - } - } - - if (RuntimeEnabledFeatures::OriginTrialFeature1Enabled(executionContext)) { - v8::Local<v8::Value> origin_trial_fourth_member_value; - bool origin_trial_fourth_member_has_value_or_default = false; - if (impl->hasOriginTrialFourthMember()) { - origin_trial_fourth_member_value = v8::Boolean::New(isolate, impl->originTrialFourthMember()); - origin_trial_fourth_member_has_value_or_default = true; - } - if (origin_trial_fourth_member_has_value_or_default && - !create_property(29, origin_trial_fourth_member_value)) { + !create_property(30, origin_trial_second_member_value)) { return false; } }
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc index c158598..830ee789 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc
@@ -1669,12 +1669,6 @@ impl->originTrialWindowExposedMethod(); } -static void OriginTrialWindowExposedMethod2Method(const v8::FunctionCallbackInfo<v8::Value>& info) { - TestInterfaceImplementation* impl = V8TestInterface::ToImpl(info.Holder()); - - impl->originTrialWindowExposedMethod2(); -} - static void AlwaysExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) { TestInterfaceImplementation::alwaysExposedStaticMethod(); } @@ -3348,12 +3342,6 @@ test_interface_implementation_v8_internal::OriginTrialWindowExposedMethodMethod(info); } -void V8TestInterface::OriginTrialWindowExposedMethod2MethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_originTrialWindowExposedMethod2"); - - test_interface_implementation_v8_internal::OriginTrialWindowExposedMethod2Method(info); -} - void V8TestInterface::AlwaysExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceImplementation_alwaysExposedStaticMethod"); @@ -4060,45 +4048,6 @@ InstallTestFeature(script_state, v8::Local<v8::Object>()); } -void V8TestInterface::InstallOriginTrialFeature( - v8::Isolate* isolate, - const DOMWrapperWorld& world, - v8::Local<v8::Object> instance, - v8::Local<v8::Object> prototype, - v8::Local<v8::Function> interface) { - v8::Local<v8::FunctionTemplate> interface_template = - V8TestInterface::GetWrapperTypeInfo()->DomTemplate(isolate, world); - v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - ALLOW_UNUSED_LOCAL(signature); - ExecutionContext* execution_context = ToExecutionContext(isolate->GetCurrentContext()); - if (execution_context && (execution_context->IsDocument())) { - static constexpr V8DOMConfiguration::MethodConfiguration - kOriginTrialWindowExposedMethod2Configurations[] = { - {"originTrialWindowExposedMethod2", V8TestInterface::OriginTrialWindowExposedMethod2MethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds} - }; - for (const auto& config : kOriginTrialWindowExposedMethod2Configurations) { - V8DOMConfiguration::InstallMethod( - isolate, world, instance, prototype, - interface, signature, config); - } - } -} - -void V8TestInterface::InstallOriginTrialFeature( - ScriptState* script_state, v8::Local<v8::Object> instance) { - V8PerContextData* per_context_data = script_state->PerContextData(); - v8::Local<v8::Object> prototype = per_context_data->PrototypeForType( - V8TestInterface::GetWrapperTypeInfo()); - v8::Local<v8::Function> interface = per_context_data->ConstructorForType( - V8TestInterface::GetWrapperTypeInfo()); - ALLOW_UNUSED_LOCAL(interface); - InstallOriginTrialFeature(script_state->GetIsolate(), script_state->World(), instance, prototype, interface); -} - -void V8TestInterface::InstallOriginTrialFeature(ScriptState* script_state) { - InstallOriginTrialFeature(script_state, v8::Local<v8::Object>()); -} - v8::Local<v8::FunctionTemplate> V8TestInterface::DomTemplate( v8::Isolate* isolate, const DOMWrapperWorld& world) { return V8DOMConfiguration::DomClassTemplate(
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h index 7406383..b31ac380 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.h
@@ -75,10 +75,6 @@ static void InstallTestFeature(ScriptState*, v8::Local<v8::Object> instance); static void InstallTestFeature(ScriptState*); - static void InstallOriginTrialFeature(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface); - static void InstallOriginTrialFeature(ScriptState*, v8::Local<v8::Object> instance); - static void InstallOriginTrialFeature(ScriptState*); - // Callback functions CORE_EXPORT static void TestInterfaceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); @@ -195,7 +191,6 @@ CORE_EXPORT static void WorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void WindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void OriginTrialWindowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); - CORE_EXPORT static void OriginTrialWindowExposedMethod2MethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void AlwaysExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void WorkerExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void WindowExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc index 12d12e29..7b72dc3 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
@@ -2469,34 +2469,6 @@ impl->setOriginTrialEnabledLongAttribute(cpp_value); } -static void OriginTrialEnabledLongAttribute2AttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) { - v8::Local<v8::Object> holder = info.Holder(); - - TestObject* impl = V8TestObject::ToImpl(holder); - - V8SetReturnValueInt(info, impl->originTrialEnabledLongAttribute2()); -} - -static void OriginTrialEnabledLongAttribute2AttributeSetter( - v8::Local<v8::Value> v8_value, const v8::FunctionCallbackInfo<v8::Value>& info) { - v8::Isolate* isolate = info.GetIsolate(); - ALLOW_UNUSED_LOCAL(isolate); - - v8::Local<v8::Object> holder = info.Holder(); - ALLOW_UNUSED_LOCAL(holder); - - TestObject* impl = V8TestObject::ToImpl(holder); - - ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestObject", "originTrialEnabledLongAttribute2"); - - // Prepare the value to be set. - int32_t cpp_value = NativeValueTraits<IDLLong>::NativeValue(info.GetIsolate(), v8_value, exception_state); - if (exception_state.HadException()) - return; - - impl->setOriginTrialEnabledLongAttribute2(cpp_value); -} - static void PerWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Object> holder = info.Holder(); @@ -10594,21 +10566,6 @@ test_object_v8_internal::OriginTrialEnabledLongAttributeAttributeSetter(v8_value, info); } -void V8TestObject::OriginTrialEnabledLongAttribute2AttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestObject_originTrialEnabledLongAttribute2_Getter"); - - test_object_v8_internal::OriginTrialEnabledLongAttribute2AttributeGetter(info); -} - -void V8TestObject::OriginTrialEnabledLongAttribute2AttributeSetterCallback( - const v8::FunctionCallbackInfo<v8::Value>& info) { - RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestObject_originTrialEnabledLongAttribute2_Setter"); - - v8::Local<v8::Value> v8_value = info[0]; - - test_object_v8_internal::OriginTrialEnabledLongAttribute2AttributeSetter(v8_value, info); -} - void V8TestObject::PerWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestObject_perWorldBindingsReadonlyTestInterfaceEmptyAttribute_Getter"); @@ -13620,41 +13577,6 @@ } } -void V8TestObject::InstallOriginTrialFeature( - v8::Isolate* isolate, - const DOMWrapperWorld& world, - v8::Local<v8::Object> instance, - v8::Local<v8::Object> prototype, - v8::Local<v8::Function> interface) { - v8::Local<v8::FunctionTemplate> interface_template = - V8TestObject::GetWrapperTypeInfo()->DomTemplate(isolate, world); - v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - ALLOW_UNUSED_LOCAL(signature); - static constexpr V8DOMConfiguration::AccessorConfiguration - koriginTrialEnabledLongAttribute2Configurations[] = { - { "originTrialEnabledLongAttribute2", V8TestObject::OriginTrialEnabledLongAttribute2AttributeGetterCallback, V8TestObject::OriginTrialEnabledLongAttribute2AttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds } - }; - for (const auto& config : koriginTrialEnabledLongAttribute2Configurations) { - V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, - interface, signature, config); - } -} - -void V8TestObject::InstallOriginTrialFeature( - ScriptState* script_state, v8::Local<v8::Object> instance) { - V8PerContextData* per_context_data = script_state->PerContextData(); - v8::Local<v8::Object> prototype = per_context_data->PrototypeForType( - V8TestObject::GetWrapperTypeInfo()); - v8::Local<v8::Function> interface = per_context_data->ConstructorForType( - V8TestObject::GetWrapperTypeInfo()); - ALLOW_UNUSED_LOCAL(interface); - InstallOriginTrialFeature(script_state->GetIsolate(), script_state->World(), instance, prototype, interface); -} - -void V8TestObject::InstallOriginTrialFeature(ScriptState* script_state) { - InstallOriginTrialFeature(script_state, v8::Local<v8::Object>()); -} - void V8TestObject::InstallFeatureName( v8::Isolate* isolate, const DOMWrapperWorld& world,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h index dea927ec..9e34b07 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h
@@ -78,10 +78,6 @@ v8::Local<v8::Function> interface_object, v8::Local<v8::FunctionTemplate> interface_template); - static void InstallOriginTrialFeature(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface); - static void InstallOriginTrialFeature(ScriptState*, v8::Local<v8::Object> instance); - static void InstallOriginTrialFeature(ScriptState*); - static void InstallFeatureName(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::Object> instance, v8::Local<v8::Object> prototype, v8::Local<v8::Function> interface); static void InstallFeatureName(ScriptState*, v8::Local<v8::Object> instance); static void InstallFeatureName(ScriptState*); @@ -259,8 +255,6 @@ CORE_EXPORT static void NotEnumerableLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void OriginTrialEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void OriginTrialEnabledLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); - CORE_EXPORT static void OriginTrialEnabledLongAttribute2AttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); - CORE_EXPORT static void OriginTrialEnabledLongAttribute2AttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void PerWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void PerWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void ActivityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/build/scripts/scripts.gni b/third_party/blink/renderer/build/scripts/scripts.gni index 8736078..790cbf8 100644 --- a/third_party/blink/renderer/build/scripts/scripts.gni +++ b/third_party/blink/renderer/build/scripts/scripts.gni
@@ -108,6 +108,8 @@ rebase_path(_scripts_dir, root_build_dir), "-I", rebase_path("//third_party", root_build_dir), + "-I", + rebase_path("//tools"), rebase_path(invoker.script, root_build_dir), ] + invoker.args if (defined(invoker.deps)) {
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.cc b/third_party/blink/renderer/core/css/css_font_face_src_value.cc index b7b52c32..e6255e9 100644 --- a/third_party/blink/renderer/core/css/css_font_face_src_value.cc +++ b/third_party/blink/renderer/core/css/css_font_face_src_value.cc
@@ -95,6 +95,7 @@ params.SetCacheAwareLoadingEnabled(kIsCacheAwareLoadingEnabled); } params.SetContentSecurityCheck(should_check_content_security_policy_); + params.SetFromOriginDirtyStyleSheet(origin_clean_ != OriginClean::kTrue); const SecurityOrigin* security_origin = context->GetSecurityOrigin(); // Local fonts are accessible from file: URLs even when
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.h b/third_party/blink/renderer/core/css/css_font_face_src_value.h index 9e821a7..b2cf303 100644 --- a/third_party/blink/renderer/core/css/css_font_face_src_value.h +++ b/third_party/blink/renderer/core/css/css_font_face_src_value.h
@@ -27,6 +27,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_FONT_FACE_SRC_VALUE_H_ #include "base/memory/scoped_refptr.h" +#include "third_party/blink/renderer/core/css/css_origin_clean.h" #include "third_party/blink/renderer/core/css/css_value.h" #include "third_party/blink/renderer/core/loader/resource/font_resource.h" #include "third_party/blink/renderer/platform/weborigin/referrer.h" @@ -43,17 +44,19 @@ const String& specified_resource, const String& absolute_resource, const Referrer& referrer, - ContentSecurityPolicyDisposition should_check_content_security_policy) { + ContentSecurityPolicyDisposition should_check_content_security_policy, + OriginClean origin_clean) { return MakeGarbageCollected<CSSFontFaceSrcValue>( specified_resource, absolute_resource, referrer, false, - should_check_content_security_policy); + should_check_content_security_policy, origin_clean); } static CSSFontFaceSrcValue* CreateLocal( const String& absolute_resource, - ContentSecurityPolicyDisposition should_check_content_security_policy) { + ContentSecurityPolicyDisposition should_check_content_security_policy, + OriginClean origin_clean) { return MakeGarbageCollected<CSSFontFaceSrcValue>( g_empty_string, absolute_resource, Referrer(), true, - should_check_content_security_policy); + should_check_content_security_policy, origin_clean); } CSSFontFaceSrcValue( @@ -61,14 +64,16 @@ const String& absolute_resource, const Referrer& referrer, bool local, - ContentSecurityPolicyDisposition should_check_content_security_policy) + ContentSecurityPolicyDisposition should_check_content_security_policy, + OriginClean origin_clean) : CSSValue(kFontFaceSrcClass), absolute_resource_(absolute_resource), specified_resource_(specified_resource), referrer_(referrer), is_local_(local), should_check_content_security_policy_( - should_check_content_security_policy) {} + should_check_content_security_policy), + origin_clean_(origin_clean) {} const String& GetResource() const { return absolute_resource_; } const String& Format() const { return format_; } @@ -94,12 +99,13 @@ private: void RestoreCachedResourceIfNeeded(ExecutionContext*) const; - String absolute_resource_; - String specified_resource_; + const String absolute_resource_; + const String specified_resource_; String format_; - Referrer referrer_; - bool is_local_; - ContentSecurityPolicyDisposition should_check_content_security_policy_; + const Referrer referrer_; + const bool is_local_; + const ContentSecurityPolicyDisposition should_check_content_security_policy_; + const OriginClean origin_clean_; class FontResourceHelper : public GarbageCollectedFinalized<FontResourceHelper>,
diff --git a/third_party/blink/renderer/core/css/font_face_cache_test.cc b/third_party/blink/renderer/core/css/font_face_cache_test.cc index 813528eb..56bbe08 100644 --- a/third_party/blink/renderer/core/css/font_face_cache_test.cc +++ b/third_party/blink/renderer/core/css/font_face_cache_test.cc
@@ -66,7 +66,8 @@ CSSFontFamilyValue* family_name = CSSFontFamilyValue::Create(kFontNameForTesting); CSSFontFaceSrcValue* src = CSSFontFaceSrcValue::CreateLocal( - kFontNameForTesting, kDoNotCheckContentSecurityPolicy); + kFontNameForTesting, kDoNotCheckContentSecurityPolicy, + OriginClean::kTrue); CSSValueList* src_value_list = CSSValueList::CreateCommaSeparated(); src_value_list->Append(*src); CSSPropertyValue properties[] = {
diff --git a/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc b/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc index 5971e24..52a5b16 100644 --- a/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc +++ b/third_party/blink/renderer/core/css/parser/at_rule_descriptor_parser.cc
@@ -78,7 +78,8 @@ return nullptr; CSSFontFaceSrcValue* uri_value(CSSFontFaceSrcValue::Create( url, context.CompleteURL(url), context.GetReferrer(), - context.ShouldCheckContentSecurityPolicy())); + context.ShouldCheckContentSecurityPolicy(), + context.IsOriginClean() ? OriginClean::kTrue : OriginClean::kFalse)); if (range.Peek().FunctionId() != CSSValueID::kFormat) return uri_value; @@ -106,14 +107,16 @@ if (!args.AtEnd()) return nullptr; return CSSFontFaceSrcValue::CreateLocal( - arg.Value().ToString(), should_check_content_security_policy); + arg.Value().ToString(), should_check_content_security_policy, + context.IsOriginClean() ? OriginClean::kTrue : OriginClean::kFalse); } if (args.Peek().GetType() == kIdentToken) { String family_name = css_parsing_utils::ConcatenateFamilyName(args); if (!args.AtEnd()) return nullptr; return CSSFontFaceSrcValue::CreateLocal( - family_name, should_check_content_security_policy); + family_name, should_check_content_security_policy, + context.IsOriginClean() ? OriginClean::kTrue : OriginClean::kFalse); } return nullptr; }
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index ab9b8c6..fdc5cd29 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -4556,8 +4556,7 @@ } const ComputedStyle* Element::CachedStyleForPseudoElement( - const PseudoStyleRequest& request, - const ComputedStyle* parent_style) { + const PseudoStyleRequest& request) { const ComputedStyle* style = GetComputedStyle(); if (!style || (request.pseudo_id < kFirstInternalPseudoId && @@ -4569,8 +4568,7 @@ style->GetCachedPseudoStyle(request.pseudo_id)) return cached; - scoped_refptr<ComputedStyle> result = - StyleForPseudoElement(request, parent_style); + scoped_refptr<ComputedStyle> result = StyleForPseudoElement(request, style); if (result) return style->AddCachedPseudoStyle(std::move(result)); return nullptr;
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h index fd76212..accc434 100644 --- a/third_party/blink/renderer/core/dom/element.h +++ b/third_party/blink/renderer/core/dom/element.h
@@ -731,9 +731,7 @@ PseudoElement* GetPseudoElement(PseudoId) const; LayoutObject* PseudoElementLayoutObject(PseudoId) const; - const ComputedStyle* CachedStyleForPseudoElement( - const PseudoStyleRequest&, - const ComputedStyle* parent_style = nullptr); + const ComputedStyle* CachedStyleForPseudoElement(const PseudoStyleRequest&); scoped_refptr<ComputedStyle> StyleForPseudoElement( const PseudoStyleRequest&, const ComputedStyle* parent_style = nullptr);
diff --git a/third_party/blink/renderer/core/dom/text.cc b/third_party/blink/renderer/core/dom/text.cc index faa0d1e..d6d073af 100644 --- a/third_party/blink/renderer/core/dom/text.cc +++ b/third_party/blink/renderer/core/dom/text.cc
@@ -441,9 +441,13 @@ } if (text_layout_object->IsTextFragment()) { // Changes of |textNode| may change first letter part, so we should - // reattach. - return ToLayoutTextFragment(text_layout_object) - ->GetFirstLetterPseudoElement(); + // reattach. Note: When |textNode| is empty or holds collapsed white spaces + // |text_fragment_layout_object| represents first-letter part but it isn't + // inside first-letter-pseudo element. See http://crbug.com/978947 + const auto& text_fragment_layout_object = + *ToLayoutTextFragment(text_layout_object); + return text_fragment_layout_object.GetFirstLetterPseudoElement() || + !text_fragment_layout_object.IsRemainingTextLayoutObject(); } return false; }
diff --git a/third_party/blink/renderer/core/events/animation_playback_event.cc b/third_party/blink/renderer/core/events/animation_playback_event.cc index e9aeb2b..56048609 100644 --- a/third_party/blink/renderer/core/events/animation_playback_event.cc +++ b/third_party/blink/renderer/core/events/animation_playback_event.cc
@@ -11,9 +11,12 @@ AnimationPlaybackEvent::AnimationPlaybackEvent(const AtomicString& type, double current_time, double timeline_time) - : Event(type, Bubbles::kNo, Cancelable::kNo), - current_time_(current_time), - timeline_time_(timeline_time) {} + : Event(type, Bubbles::kNo, Cancelable::kNo) { + if (!std::isnan(current_time)) + current_time_ = current_time; + if (!std::isnan(timeline_time)) + timeline_time_ = timeline_time; +} AnimationPlaybackEvent::AnimationPlaybackEvent( const AtomicString& type,
diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_party/blink/renderer/core/input/event_handler.cc index 8e088ae..ce12bf1 100644 --- a/third_party/blink/renderer/core/input/event_handler.cc +++ b/third_party/blink/renderer/core/input/event_handler.cc
@@ -1303,57 +1303,68 @@ return new_element_under_mouse; } -bool EventHandler::IsTouchPointerIdActiveOnFrame(PointerId pointer_id, - LocalFrame* frame) const { - DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); - return pointer_event_manager_->IsTouchPointerIdActiveOnFrame(pointer_id, - frame); +bool EventHandler::IsPointerIdActiveOnFrame(PointerId pointer_id, + LocalFrame* frame) const { + DCHECK(frame_ == &frame_->LocalFrameRoot() || frame_ == frame); + return pointer_event_manager_->IsPointerIdActiveOnFrame(pointer_id, frame); } -bool EventHandler::RootFrameTouchPointerActiveInCurrentFrame( +bool EventHandler::RootFrameTrackedActivePointerInCurrentFrame( PointerId pointer_id) const { return frame_ != &frame_->LocalFrameRoot() && - frame_->LocalFrameRoot() - .GetEventHandler() - .IsTouchPointerIdActiveOnFrame(pointer_id, frame_); + frame_->LocalFrameRoot().GetEventHandler().IsPointerIdActiveOnFrame( + pointer_id, frame_); } bool EventHandler::IsPointerEventActive(PointerId pointer_id) { return pointer_event_manager_->IsActive(pointer_id) || - RootFrameTouchPointerActiveInCurrentFrame(pointer_id); + RootFrameTrackedActivePointerInCurrentFrame(pointer_id); +} + +LocalFrame* EventHandler::DetermineActivePointerTrackerFrame( + PointerId pointer_id) const { + // If pointer_id is active on current |frame_|, pointer states are in + // current frame's PEM; otherwise, check if it's a touch-like pointer that + // have its active states in the local frame root's PEM. + if (IsPointerIdActiveOnFrame(pointer_id, frame_)) + return frame_; + if (RootFrameTrackedActivePointerInCurrentFrame(pointer_id)) + return &frame_->LocalFrameRoot(); + return nullptr; } void EventHandler::SetPointerCapture(PointerId pointer_id, Element* target) { // TODO(crbug.com/591387): This functionality should be per page not per // frame. - if (RootFrameTouchPointerActiveInCurrentFrame(pointer_id)) { - frame_->LocalFrameRoot().GetEventHandler().SetPointerCapture(pointer_id, - target); - } else { - if (pointer_event_manager_->SetPointerCapture(pointer_id, target) && - pointer_id == PointerEventFactory::kMouseId) { - CaptureMouseEventsToWidget(true); + LocalFrame* tracking_frame = DetermineActivePointerTrackerFrame(pointer_id); - // TODO(crbug.com/919908) This is a temporary approach to make pointer - // capture work across in-process frames while mouse subframe capture - // disabled. It's to experiment removing the frame capture logic. This - // must be re-write before the flag enabled. - if (RuntimeEnabledFeatures::MouseSubframeNoImplicitCaptureEnabled()) { - LocalFrame* frame = frame_; - LocalFrame* parent = DynamicTo<LocalFrame>(frame_->Tree().Parent()); - while (parent) { - Element* subframe_element = nullptr; - if (frame->OwnerLayoutObject() && - frame->OwnerLayoutObject()->GetNode()) { - subframe_element = - DynamicTo<Element>(frame->OwnerLayoutObject()->GetNode()); - } + bool captured = + tracking_frame && + tracking_frame->GetEventHandler() + .pointer_event_manager_->SetPointerCapture(pointer_id, target); - parent->GetEventHandler().capturing_subframe_element_ = - subframe_element; - frame = parent; - parent = DynamicTo<LocalFrame>(parent->Tree().Parent()); + if (captured && pointer_id == PointerEventFactory::kMouseId) { + CaptureMouseEventsToWidget(true); + + // TODO(crbug.com/919908) This is a temporary approach to make pointer + // capture work across in-process frames while mouse subframe capture + // disabled. It's to experiment removing the frame capture logic. This + // must be re-write before the flag enabled. + if (RuntimeEnabledFeatures::MouseSubframeNoImplicitCaptureEnabled()) { + LocalFrame* frame = frame_; + LocalFrame* parent = DynamicTo<LocalFrame>(frame_->Tree().Parent()); + while (parent) { + Element* subframe_element = nullptr; + if (frame->OwnerLayoutObject() && + frame->OwnerLayoutObject()->GetNode()) { + subframe_element = + DynamicTo<Element>(frame->OwnerLayoutObject()->GetNode()); } + + parent->GetEventHandler().capturing_subframe_element_ = + subframe_element; + frame = parent; + parent = DynamicTo<LocalFrame>(parent->Tree().Parent()); } } } @@ -1361,32 +1372,33 @@ void EventHandler::ReleasePointerCapture(PointerId pointer_id, Element* target) { - if (RootFrameTouchPointerActiveInCurrentFrame(pointer_id)) { - frame_->LocalFrameRoot().GetEventHandler().ReleasePointerCapture(pointer_id, - target); - } else { - if (pointer_event_manager_->ReleasePointerCapture(pointer_id, target) && - pointer_id == PointerEventFactory::kMouseId) { - CaptureMouseEventsToWidget(false); + LocalFrame* tracking_frame = DetermineActivePointerTrackerFrame(pointer_id); - // TODO(crbug/919908) same as SetPointerCapture, this is temporary - // approach for removing mouse subframe capture. It must be re-write - // before enable the flag. - if (RuntimeEnabledFeatures::MouseSubframeNoImplicitCaptureEnabled()) { - LocalFrame* frame = frame_; - LocalFrame* parent = DynamicTo<LocalFrame>(frame_->Tree().Parent()); - while (parent) { - Element* subframe_element = nullptr; - if (frame->OwnerLayoutObject() && - frame->OwnerLayoutObject()->GetNode()) { - subframe_element = - DynamicTo<Element>(frame->OwnerLayoutObject()->GetNode()); - } + bool released = + tracking_frame && + tracking_frame->GetEventHandler() + .pointer_event_manager_->ReleasePointerCapture(pointer_id, target); - parent->GetEventHandler().capturing_subframe_element_ = nullptr; - frame = parent; - parent = DynamicTo<LocalFrame>(parent->Tree().Parent()); + if (released && pointer_id == PointerEventFactory::kMouseId) { + CaptureMouseEventsToWidget(false); + + // TODO(crbug/919908) same as SetPointerCapture, this is temporary + // approach for removing mouse subframe capture. It must be re-write + // before enable the flag. + if (RuntimeEnabledFeatures::MouseSubframeNoImplicitCaptureEnabled()) { + LocalFrame* frame = frame_; + LocalFrame* parent = DynamicTo<LocalFrame>(frame_->Tree().Parent()); + while (parent) { + Element* subframe_element = nullptr; + if (frame->OwnerLayoutObject() && + frame->OwnerLayoutObject()->GetNode()) { + subframe_element = + DynamicTo<Element>(frame->OwnerLayoutObject()->GetNode()); } + + parent->GetEventHandler().capturing_subframe_element_ = nullptr; + frame = parent; + parent = DynamicTo<LocalFrame>(parent->Tree().Parent()); } } } @@ -1398,12 +1410,12 @@ bool EventHandler::HasPointerCapture(PointerId pointer_id, const Element* target) const { - if (RootFrameTouchPointerActiveInCurrentFrame(pointer_id)) { - return frame_->LocalFrameRoot().GetEventHandler().HasPointerCapture( - pointer_id, target); - } else { - return pointer_event_manager_->HasPointerCapture(pointer_id, target); + if (LocalFrame* tracking_frame = + DetermineActivePointerTrackerFrame(pointer_id)) { + return tracking_frame->GetEventHandler() + .pointer_event_manager_->HasPointerCapture(pointer_id, target); } + return false; } void EventHandler::ElementRemoved(Element* target) {
diff --git a/third_party/blink/renderer/core/input/event_handler.h b/third_party/blink/renderer/core/input/event_handler.h index 1f954f0..67e528db 100644 --- a/third_party/blink/renderer/core/input/event_handler.h +++ b/third_party/blink/renderer/core/input/event_handler.h
@@ -277,7 +277,9 @@ ScrollGranularity, Node* start_node = nullptr); - bool IsTouchPointerIdActiveOnFrame(PointerId, LocalFrame*) const; + bool IsPointerIdActiveOnFrame(PointerId, LocalFrame*) const; + + LocalFrame* DetermineActivePointerTrackerFrame(PointerId pointer_id) const; // Clears drag target and related states. It is called when drag is done or // canceled. @@ -361,8 +363,9 @@ Element* EffectiveMouseEventTargetElement(Element*); - // Dispatches ME after corresponding PE provided the PE has not been canceled. - // The |mouse_event_type| arg must be one of {mousedown, mousemove, mouseup}. + // Dispatches ME after corresponding PE provided the PE has not been + // canceled. The |mouse_event_type| arg must be one of {mousedown, + // mousemove, mouseup}. WebInputEventResult DispatchMousePointerEvent( const WebInputEvent::Type, Element* target, @@ -403,7 +406,7 @@ bool ShouldBrowserControlsConsumeScroll(FloatSize) const; - bool RootFrameTouchPointerActiveInCurrentFrame(PointerId pointer_id) const; + bool RootFrameTrackedActivePointerInCurrentFrame(PointerId pointer_id) const; void CaptureMouseEventsToWidget(bool); @@ -464,11 +467,10 @@ TaskRunnerTimer<EventHandler> active_interval_timer_; - // last_show_press_timestamp_ prevents the active state rewrited by following - // events too soon (less than 0.15s). - // It is ok we only record last_show_press_timestamp_ in root frame since - // root frame will have subframe as active element if subframe has active - // element. + // last_show_press_timestamp_ prevents the active state rewrited by + // following events too soon (less than 0.15s). It is ok we only record + // last_show_press_timestamp_ in root frame since root frame will have + // subframe as active element if subframe has active element. base::Optional<base::TimeTicks> last_show_press_timestamp_; Member<Element> last_deferred_tap_element_;
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.cc b/third_party/blink/renderer/core/input/pointer_event_manager.cc index cf33cd3a..023053a 100644 --- a/third_party/blink/renderer/core/input/pointer_event_manager.cc +++ b/third_party/blink/renderer/core/input/pointer_event_manager.cc
@@ -1044,12 +1044,8 @@ // pointer events are the only ones that are directly dispatched from the main // page managers to their target (event if target is in an iframe) and only // those managers will keep track of these pointer events. -bool PointerEventManager::IsTouchPointerIdActiveOnFrame( - PointerId pointer_id, - LocalFrame* frame) const { - if (pointer_event_factory_.GetPointerType(pointer_id) != - WebPointerProperties::PointerType::kTouch) - return false; +bool PointerEventManager::IsPointerIdActiveOnFrame(PointerId pointer_id, + LocalFrame* frame) const { Element* last_element_receiving_event = element_under_pointer_.Contains(pointer_id) ? element_under_pointer_.at(pointer_id).target
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.h b/third_party/blink/renderer/core/input/pointer_event_manager.h index 09a29bf7..74b61c7 100644 --- a/third_party/blink/renderer/core/input/pointer_event_manager.h +++ b/third_party/blink/renderer/core/input/pointer_event_manager.h
@@ -89,7 +89,7 @@ // Returns whether pointerId is for an active touch pointerevent and whether // the last event was sent to the given frame. - bool IsTouchPointerIdActiveOnFrame(PointerId, LocalFrame*) const; + bool IsPointerIdActiveOnFrame(PointerId, LocalFrame*) const; // Returns true if the primary pointerdown corresponding to the given // |uniqueTouchEventId| was canceled. Also drops stale ids from
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc index 259148f..fbed607 100644 --- a/third_party/blink/renderer/core/layout/layout_block.cc +++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -1046,19 +1046,12 @@ if (!StyleRef().HasPseudoStyle(kPseudoIdFirstLine)) return; - // ImageChanged() is also called when we add image observers. Don't use - // FirstLineStyleRef() here because it will update the first line style cache - // too early. We should just access the current cached style and bail out if - // it's not ready (and we'll update pending image observer when the cache is - // updated). - const auto* cached_first_line_style = - StyleRef().GetCachedPseudoStyle(kPseudoIdFirstLine); - if (!cached_first_line_style) + const auto* first_line_style = FirstLineStyleWithoutFallback(); + if (!first_line_style) return; - if (auto* first_line_container = NearestInnerBlockWithFirstLine()) { - for (const auto* layer = &cached_first_line_style->BackgroundLayers(); - layer; layer = layer->Next()) { + for (const auto* layer = &first_line_style->BackgroundLayers(); layer; + layer = layer->Next()) { if (layer->GetImage() && image == layer->GetImage()->Data()) { first_line_container->SetShouldDoFullPaintInvalidationForFirstLine(); break;
diff --git a/third_party/blink/renderer/core/layout/layout_block_flow_line.cc b/third_party/blink/renderer/core/layout/layout_block_flow_line.cc index 8b719f5..eee0e9cc 100644 --- a/third_party/blink/renderer/core/layout/layout_block_flow_line.cc +++ b/third_party/blink/renderer/core/layout/layout_block_flow_line.cc
@@ -2697,7 +2697,7 @@ void LayoutBlockFlow::SetShouldDoFullPaintInvalidationForFirstLine() { DCHECK(ChildrenInline()); if (RootInlineBox* first_root_box = FirstRootBox()) - first_root_box->SetShouldDoFullPaintInvalidationRecursively(); + first_root_box->SetShouldDoFullPaintInvalidationForFirstLine(); else if (const NGPaintFragment* paint_fragment = PaintFragment()) paint_fragment->SetShouldDoFullPaintInvalidationForFirstLine(); }
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index 31972be..228911dc 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -1983,8 +1983,18 @@ DCHECK(style); StyleDifference diff; - if (style_) + if (style_) { diff = style_->VisualInvalidationDiff(GetDocument(), *style); + if (const auto* cached_inherited_first_line_style = + style_->GetCachedPseudoStyle(kPseudoIdFirstLineInherited)) { + // Merge the difference to the first line style because even if the new + // style is the same as the old style, the new style may have some higher + // priority properties overriding first line style. + // See external/wpt/css/css-pseudo/first-line-change-inline-color*.html. + diff.Merge(cached_inherited_first_line_style->VisualInvalidationDiff( + GetDocument(), *style)); + } + } diff = AdjustStyleDifference(diff); @@ -2124,7 +2134,10 @@ void LayoutObject::UpdateFirstLineImageObservers( const ComputedStyle* new_style) { bool has_new_first_line_style = - new_style && new_style->HasPseudoStyle(kPseudoIdFirstLine); + new_style && new_style->HasPseudoStyle(kPseudoIdFirstLine) && + BehavesLikeBlockContainer(); + DCHECK(!has_new_first_line_style || new_style == Style()); + if (!bitfields_.RegisteredAsFirstLineImageObserver() && !has_new_first_line_style) return; @@ -2139,36 +2152,31 @@ ? first_line_style_map.at(this) : nullptr; - // Don't call CacheFirstLineStyle() which will update the cache, because this - // function can be called when the object has not been inserted into the tree - // and we can't update the pseudo style cache which may depend on ancestors. - const auto* cached_new_first_line_style = - has_new_first_line_style - ? new_style->GetCachedPseudoStyle(kPseudoIdFirstLine) - : nullptr; + // UpdateFillImages() may indirectly call LayoutBlock::ImageChanged() which + // will invalidate the first line style cache and remove a reference to + // new_first_line_style, so hold a reference here. + scoped_refptr<const ComputedStyle> new_first_line_style = + has_new_first_line_style ? FirstLineStyleWithoutFallback() : nullptr; - if (has_new_first_line_style) { - // If cached_new_first_line_style is null, it means that the new first line - // style has not been cached yet. Will check again when the object's first - // line style is actually used and cached. - bitfields_.SetPendingUpdateFirstLineImageObservers( - !cached_new_first_line_style); - } + if (new_first_line_style && !new_first_line_style->HasBackgroundImage()) + new_first_line_style = nullptr; - if (cached_new_first_line_style && - !cached_new_first_line_style->HasBackgroundImage()) - cached_new_first_line_style = nullptr; - - if (old_first_line_style || cached_new_first_line_style) { - UpdateFillImages(old_first_line_style - ? &old_first_line_style->BackgroundLayers() - : nullptr, - cached_new_first_line_style - ? &cached_new_first_line_style->BackgroundLayers() - : nullptr); - if (cached_new_first_line_style) { + if (old_first_line_style || new_first_line_style) { + UpdateFillImages( + old_first_line_style ? &old_first_line_style->BackgroundLayers() + : nullptr, + new_first_line_style ? &new_first_line_style->BackgroundLayers() + : nullptr); + if (new_first_line_style) { + // The cached first line style may have been invalidated during + // UpdateFillImages, so get it again. However, the new cached first line + // style should be the same as the previous new_first_line_style. + DCHECK(FillLayer::ImagesIdentical( + &new_first_line_style->BackgroundLayers(), + &FirstLineStyleWithoutFallback()->BackgroundLayers())); + new_first_line_style = FirstLineStyleWithoutFallback(); bitfields_.SetRegisteredAsFirstLineImageObserver(true); - first_line_style_map.Set(this, cached_new_first_line_style); + first_line_style_map.Set(this, std::move(new_first_line_style)); } else { bitfields_.SetRegisteredAsFirstLineImageObserver(false); first_line_style_map.erase(this); @@ -2402,7 +2410,7 @@ if (Parent() && has_old_first_line_style && has_new_first_line_style) { if (const auto* old_first_line_style = old_style->GetCachedPseudoStyle(kPseudoIdFirstLine)) { - if (auto new_first_line_style = UncachedFirstLineStyle()) { + if (const auto* new_first_line_style = FirstLineStyleWithoutFallback()) { diff = old_first_line_style->VisualInvalidationDiff( GetDocument(), *new_first_line_style); has_diff = true; @@ -3369,75 +3377,50 @@ UpdateLayout(); } -enum StyleCacheState { kCached, kUncached }; +const ComputedStyle* LayoutObject::FirstLineStyleWithoutFallback() const { + DCHECK(GetDocument().GetStyleEngine().UsesFirstLineRules()); -static scoped_refptr<const ComputedStyle> FirstLineStyleForCachedUncachedType( - StyleCacheState type, - const LayoutObject* layout_object, - const ComputedStyle* style) { - DCHECK(layout_object); - - const LayoutObject* layout_object_for_first_line_style = layout_object; - if (layout_object->IsBeforeOrAfterContent()) { - if (!layout_object->Parent()) + if (IsBeforeOrAfterContent() || IsText()) { + if (!Parent()) return nullptr; - layout_object_for_first_line_style = layout_object->Parent(); + return Parent()->FirstLineStyleWithoutFallback(); } - if (layout_object_for_first_line_style->BehavesLikeBlockContainer()) { + if (BehavesLikeBlockContainer()) { + if (const ComputedStyle* cached = + StyleRef().GetCachedPseudoStyle(kPseudoIdFirstLine)) + return cached; + if (const LayoutBlock* first_line_block = - To<LayoutBlock>(layout_object_for_first_line_style) - ->EnclosingFirstLineStyleBlock()) { - if (type == kCached) - return first_line_block->GetCachedPseudoStyle(kPseudoIdFirstLine, - style); - return first_line_block->GetUncachedPseudoStyle( - PseudoStyleRequest(kPseudoIdFirstLine), style); + To<LayoutBlock>(this)->EnclosingFirstLineStyleBlock()) { + if (first_line_block->Style() == Style()) + return first_line_block->GetCachedPseudoStyle(kPseudoIdFirstLine); + + // We can't use first_line_block->GetCachedPseudoStyle() because it's + // based on first_line_block's style. We need to get the uncached first + // line style based on this object's style and cache the result in it. + return StyleRef().AddCachedPseudoStyle( + first_line_block->GetUncachedPseudoStyle( + PseudoStyleRequest(kPseudoIdFirstLine), Style())); } - } else if (!layout_object_for_first_line_style->IsAnonymous() && - layout_object_for_first_line_style->IsLayoutInline() && - !layout_object_for_first_line_style->GetNode() - ->IsFirstLetterPseudoElement()) { - const ComputedStyle* parent_style = - layout_object_for_first_line_style->Parent()->FirstLineStyle(); - if (parent_style != layout_object_for_first_line_style->Parent()->Style()) { - if (type == kCached) { - // A first-line style is in effect. Cache a first-line style for - // ourselves. - return layout_object_for_first_line_style->GetCachedPseudoStyle( - kPseudoIdFirstLineInherited, parent_style); - } - return layout_object_for_first_line_style->GetUncachedPseudoStyle( - PseudoStyleRequest(kPseudoIdFirstLineInherited), parent_style); + } else if (!IsAnonymous() && IsLayoutInline() && + !GetNode()->IsFirstLetterPseudoElement()) { + if (const ComputedStyle* cached = + StyleRef().GetCachedPseudoStyle(kPseudoIdFirstLineInherited)) + return cached; + + if (const ComputedStyle* parent_first_line_style = + Parent()->FirstLineStyleWithoutFallback()) { + // A first-line style is in effect. Get uncached first line style based on + // parent_first_line_style and cache the result in this object's style. + return StyleRef().AddCachedPseudoStyle(GetUncachedPseudoStyle( + kPseudoIdFirstLineInherited, parent_first_line_style)); } } return nullptr; } -scoped_refptr<const ComputedStyle> LayoutObject::UncachedFirstLineStyle() - const { - if (!GetDocument().GetStyleEngine().UsesFirstLineRules()) - return nullptr; - - DCHECK(!IsText()); - - return FirstLineStyleForCachedUncachedType(kUncached, this, style_.get()); -} - -const ComputedStyle* LayoutObject::CachedFirstLineStyle() const { - DCHECK(GetDocument().GetStyleEngine().UsesFirstLineRules()); - - if (scoped_refptr<const ComputedStyle> style = - FirstLineStyleForCachedUncachedType( - kCached, IsText() ? Parent() : this, style_.get())) - return style.get(); - - return style_.get(); -} - -const ComputedStyle* LayoutObject::GetCachedPseudoStyle( - PseudoId pseudo, - const ComputedStyle* parent_style) const { +const ComputedStyle* LayoutObject::GetCachedPseudoStyle(PseudoId pseudo) const { DCHECK_NE(pseudo, kPseudoIdBefore); DCHECK_NE(pseudo, kPseudoIdAfter); if (!GetNode()) @@ -3447,15 +3430,7 @@ if (!element) return nullptr; - const auto* cached_pseudo_style = element->CachedStyleForPseudoElement( - PseudoStyleRequest(pseudo), parent_style); - if (cached_pseudo_style && pseudo == kPseudoIdFirstLine && - bitfields_.PendingUpdateFirstLineImageObservers()) { - // Update image observers now after we have updated the first line - // style cache. - const_cast<LayoutObject*>(this)->UpdateFirstLineImageObservers(Style()); - } - return cached_pseudo_style; + return element->CachedStyleForPseudoElement(PseudoStyleRequest(pseudo)); } scoped_refptr<ComputedStyle> LayoutObject::GetUncachedPseudoStyle(
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 7a7a448..8464139 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -1137,12 +1137,12 @@ bool IsRenderedLegendInternal() const; - // The pseudo element style can be cached or uncached. Use the cached method + // The pseudo element style can be cached or uncached. Use the cached method // if the pseudo element doesn't respect any pseudo classes (and therefore - // has no concept of changing state). - const ComputedStyle* GetCachedPseudoStyle( - PseudoId, - const ComputedStyle* parent_style = nullptr) const; + // has no concept of changing state). The cached pseudo style always inherits + // from the originating element's style (because we can cache only one + // version), while the uncached pseudo style can inherit from any style. + const ComputedStyle* GetCachedPseudoStyle(PseudoId) const; scoped_refptr<ComputedStyle> GetUncachedPseudoStyle( const PseudoStyleRequest&, const ComputedStyle* parent_style = nullptr) const; @@ -1735,6 +1735,8 @@ } /* The following methods are inlined in LayoutObjectInlines.h */ + // If first line style is requested and there is no applicable first line + // style, the functions will return the style of this object. inline const ComputedStyle* FirstLineStyle() const; inline const ComputedStyle& FirstLineStyleRef() const; inline const ComputedStyle* Style(bool first_line) const; @@ -2637,11 +2639,14 @@ LayoutBlock* ContainingBlockForFixedPosition( AncestorSkipInfo* = nullptr) const; - private: - // Used only by applyFirstLineChanges to get a first line style based off of a - // given new style, without accessing the cache. - scoped_refptr<const ComputedStyle> UncachedFirstLineStyle() const; + // Returns the first line style declared in CSS. The style may be declared on + // an ancestor block (see EnclosingFirstLineStyleBlock()) that applies to this + // object. Returns nullptr if there is no applicable first line style. + // Whether the style applies is based on CSS rules, regardless of whether this + // object is really in the first line which is unknown before layout. + const ComputedStyle* FirstLineStyleWithoutFallback() const; + private: // Adjusts a visual rect in the space of |visual_rect| to be in the space of // the |paint_invalidation_container|, if needed. They can be different only // if |paint_invalidation_container| is a composited scroller. @@ -2687,7 +2692,6 @@ LayoutFlowThread* LocateFlowThreadContainingBlock() const; void RemoveFromLayoutFlowThreadRecursive(LayoutFlowThread*); - const ComputedStyle* CachedFirstLineStyle() const; StyleDifference AdjustStyleDifference(StyleDifference) const; #if DCHECK_IS_ON() @@ -2827,7 +2831,6 @@ descendant_effective_allowed_touch_action_changed_(false), is_effective_root_scroller_(false), is_global_root_scroller_(false), - pending_update_first_line_image_observers_(false), registered_as_first_line_image_observer_(false), is_html_legend_element_(false), has_non_collapsed_border_decoration_(false), @@ -3077,11 +3080,6 @@ ADD_BOOLEAN_BITFIELD(is_effective_root_scroller_, IsEffectiveRootScroller); ADD_BOOLEAN_BITFIELD(is_global_root_scroller_, IsGlobalRootScroller); - // First line style is resolvable only after the object is inserted into - // the tree, so we should set this flag when the object set a style having - // first line style before it is inserted into the tree. - ADD_BOOLEAN_BITFIELD(pending_update_first_line_image_observers_, - PendingUpdateFirstLineImageObservers); // Indicates whether this object has been added as a first line image // observer. ADD_BOOLEAN_BITFIELD(registered_as_first_line_image_observer_,
diff --git a/third_party/blink/renderer/core/layout/layout_object_inlines.h b/third_party/blink/renderer/core/layout/layout_object_inlines.h index d5cb8e3..e48a354 100644 --- a/third_party/blink/renderer/core/layout/layout_object_inlines.h +++ b/third_party/blink/renderer/core/layout/layout_object_inlines.h
@@ -16,9 +16,11 @@ // these methods. inline const ComputedStyle* LayoutObject::FirstLineStyle() const { - return GetDocument().GetStyleEngine().UsesFirstLineRules() - ? CachedFirstLineStyle() - : Style(); + if (GetDocument().GetStyleEngine().UsesFirstLineRules()) { + if (const ComputedStyle* first_line_style = FirstLineStyleWithoutFallback()) + return first_line_style; + } + return Style(); } inline const ComputedStyle& LayoutObject::FirstLineStyleRef() const {
diff --git a/third_party/blink/renderer/core/layout/layout_object_test.cc b/third_party/blink/renderer/core/layout/layout_object_test.cc index 28a54ec..61a6eba 100644 --- a/third_party/blink/renderer/core/layout/layout_object_test.cc +++ b/third_party/blink/renderer/core/layout/layout_object_test.cc
@@ -1040,4 +1040,28 @@ UpdateAllLifecyclePhasesForTest(); } +TEST_F(LayoutObjectTest, FirstLineBackgroundImageChangeStyleCrash) { + SetBodyInnerHTML(R"HTML( + <style id="style"> + #target::first-line { + background-image: url(data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==); + } + </style> + <div id="target">Target</div> + )HTML"); + + // These should not crash. + GetDocument().getElementById("target")->setAttribute(html_names::kStyleAttr, + "color: blue"); + UpdateAllLifecyclePhasesForTest(); + + GetDocument().getElementById("target")->setAttribute(html_names::kStyleAttr, + "display: none"); + UpdateAllLifecyclePhasesForTest(); + + auto* style_element = GetDocument().getElementById("style"); + style_element->setTextContent(style_element->textContent() + "dummy"); + UpdateAllLifecyclePhasesForTest(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_text_fragment_test.cc b/third_party/blink/renderer/core/layout/layout_text_fragment_test.cc index c0230fb..165d4b05 100644 --- a/third_party/blink/renderer/core/layout/layout_text_fragment_test.cc +++ b/third_party/blink/renderer/core/layout/layout_text_fragment_test.cc
@@ -392,4 +392,56 @@ 1)); // "(x |<span>xx</span>" } +TEST_P(ParameterizedLayoutTextFragmentTest, SetTextWithFirstLetter) { + // Note: |V8TestingScope| is needed for |Text::splitText()|. + V8TestingScope scope; + + SetBodyInnerHTML( + "<style>div::first-letter {color: red;}</style>" + "<div id=sample>a</div>"); + const Element& sample = *GetElementById("sample"); + // |letter_x| is "a" then "" finally "x" + Text& letter_x = *To<Text>(sample.firstChild()); + ASSERT_TRUE(letter_x.GetLayoutObject()->IsTextFragment()); + EXPECT_TRUE(letter_x.GetLayoutObject()->GetFirstLetterPart()); + EXPECT_TRUE(ToLayoutTextFragment(letter_x.GetLayoutObject()) + ->IsRemainingTextLayoutObject()); + ASSERT_TRUE(letter_x.GetLayoutObject()->GetFirstLetterPart()); + EXPECT_EQ("a", letter_x.GetLayoutObject()->GetFirstLetterPart()->GetText()); + + // Make <div>"" "a"</div> + Text& letter_a = *letter_x.splitText(0, ASSERT_NO_EXCEPTION); + UpdateAllLifecyclePhasesForTest(); + + EXPECT_TRUE(letter_a.GetLayoutObject()->IsTextFragment()) + << "'a' is still first-letter"; + EXPECT_TRUE(letter_a.GetLayoutObject()->GetFirstLetterPart()); + EXPECT_TRUE(ToLayoutTextFragment(letter_a.GetLayoutObject()) + ->IsRemainingTextLayoutObject()); + ASSERT_TRUE(letter_a.GetLayoutObject()->GetFirstLetterPart()); + EXPECT_EQ("a", letter_a.GetLayoutObject()->GetFirstLetterPart()->GetText()); + EXPECT_TRUE(letter_x.GetLayoutObject()->IsTextFragment()); + EXPECT_FALSE(letter_x.GetLayoutObject()->GetFirstLetterPart()); + + // Make <div>"x" "a"</div> + letter_x.setTextContent("x"); + UpdateAllLifecyclePhasesForTest(); + + // See |FirstLetterPseudoElement::DetachLayoutTree()| which updates remaining + // part |LayoutTextFragment|. + EXPECT_TRUE(letter_a.GetLayoutObject()->IsTextFragment()) + << "We still use LayoutTextFragment for 'a'"; + EXPECT_FALSE(letter_a.GetLayoutObject()->GetFirstLetterPart()); + EXPECT_FALSE(ToLayoutTextFragment(letter_a.GetLayoutObject()) + ->IsRemainingTextLayoutObject()); + EXPECT_FALSE(ToLayoutTextFragment(letter_a.GetLayoutObject()) + ->GetFirstLetterPseudoElement()); + ASSERT_TRUE(letter_x.GetLayoutObject()->IsTextFragment()) + << "'x' is first letter-part"; + EXPECT_TRUE(ToLayoutTextFragment(letter_x.GetLayoutObject()) + ->IsRemainingTextLayoutObject()); + ASSERT_TRUE(letter_x.GetLayoutObject()->GetFirstLetterPart()); + EXPECT_EQ("x", letter_x.GetLayoutObject()->GetFirstLetterPart()->GetText()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/line/inline_box.cc b/third_party/blink/renderer/core/layout/line/inline_box.cc index ce4ee01..32e388df 100644 --- a/third_party/blink/renderer/core/layout/line/inline_box.cc +++ b/third_party/blink/renderer/core/layout/line/inline_box.cc
@@ -352,13 +352,14 @@ return Root().Block().FlipForWritingMode(point); } -void InlineBox::SetShouldDoFullPaintInvalidationRecursively() { +void InlineBox::SetShouldDoFullPaintInvalidationForFirstLine() { + GetLineLayoutItem().StyleRef().ClearCachedPseudoStyles(); GetLineLayoutItem().SetShouldDoFullPaintInvalidation(); if (!IsInlineFlowBox()) return; for (InlineBox* child = ToInlineFlowBox(this)->FirstChild(); child; child = child->NextOnLine()) - child->SetShouldDoFullPaintInvalidationRecursively(); + child->SetShouldDoFullPaintInvalidationForFirstLine(); } void InlineBox::SetLineLayoutItemShouldDoFullPaintInvalidationIfNeeded() {
diff --git a/third_party/blink/renderer/core/layout/line/inline_box.h b/third_party/blink/renderer/core/layout/line/inline_box.h index bd7a4bc..2d5dc20 100644 --- a/third_party/blink/renderer/core/layout/line/inline_box.h +++ b/third_party/blink/renderer/core/layout/line/inline_box.h
@@ -374,8 +374,8 @@ } // Set all LineLayoutItems in the inline box subtree should do full paint - // invalidation. - void SetShouldDoFullPaintInvalidationRecursively(); + // invalidation and clear the first line style cache. + void SetShouldDoFullPaintInvalidationForFirstLine(); #define ADD_BOOLEAN_BITFIELD(field_name_, MethodNameBase) \ public: \
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc index efe866f3..70e2e40 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -1468,6 +1468,23 @@ ComputeCanBreakAfter(item_result, auto_wrap_, break_iterator_); } +bool NGLineBreaker::ShouldHangTraillingSpaces(const NGInlineItem& item) { + if (!item.Length()) + return false; + + const ComputedStyle& style = *item.Style(); + if (!auto_wrap_ || (!style.CollapseWhiteSpace() && + style.WhiteSpace() == EWhiteSpace::kBreakSpaces)) + return false; + + const String& text = Text(); + for (unsigned i = item.StartOffset(); i < item.EndOffset(); ++i) { + if (!IsBreakableSpace(text[i])) + return false; + } + return true; +} + // Handles when the last item overflows. // At this point, item_results does not fit into the current line, and there // are no break opportunities in item_results.back(). @@ -1513,7 +1530,15 @@ DCHECK(item_result->shape_result || (item_result->break_anywhere_if_overflow && !override_break_anywhere_)); - if (width_to_rewind < 0 && item_result->may_break_inside) { + if (width_to_rewind <= 0) { + if (!width_to_rewind || !item_result->may_break_inside) { + if (ShouldHangTraillingSpaces(item)) { + Rewind(i, line_info); + state_ = LineBreakState::kTrailing; + return; + } + continue; + } // When the text fits but its right margin does not, the break point // must not be at the end. LayoutUnit item_available_width =
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h index 3ba1558..a90313b 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -134,6 +134,7 @@ const ShapeResult&, LayoutUnit available_width, NGLineInfo*); + bool ShouldHangTraillingSpaces(const NGInlineItem&); bool HandleTextForFastMinContent(NGInlineItemResult*, const NGInlineItem&, const ShapeResult&,
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index fc2d4d8..f3fa0c65 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -738,7 +738,7 @@ ContentSecurityPolicy* DocumentLoader::CreateCSP( const ResourceResponse& response, - const String& origin_policy_string) { + const base::Optional<WebOriginPolicy>& origin_policy) { auto* csp = MakeGarbageCollected<ContentSecurityPolicy>(); csp->SetOverrideURLForSelf(response.CurrentRequestUrl()); @@ -747,19 +747,18 @@ // Handle OriginPolicy. We can skip the entire block if the OP policies have // already been passed down. - if (!csp->HasPolicyFromSource( + if (origin_policy.has_value() && + !csp->HasPolicyFromSource( kContentSecurityPolicyHeaderSourceOriginPolicy)) { - std::unique_ptr<OriginPolicy> origin_policy = OriginPolicy::From( - StringUTF8Adaptor(origin_policy_string).AsStringPiece()); - if (origin_policy) { - for (auto policy : origin_policy->GetContentSecurityPolicies()) { - csp->DidReceiveHeader(WTF::String::FromUTF8(policy.policy.data(), - policy.policy.length()), - policy.report_only - ? kContentSecurityPolicyHeaderTypeReport - : kContentSecurityPolicyHeaderTypeEnforce, - kContentSecurityPolicyHeaderSourceOriginPolicy); - } + for (const auto& policy : origin_policy->content_security_policies) { + csp->DidReceiveHeader(policy, kContentSecurityPolicyHeaderTypeEnforce, + kContentSecurityPolicyHeaderSourceOriginPolicy); + } + + for (const auto& policy : + origin_policy->content_security_policies_report_only) { + csp->DidReceiveHeader(policy, kContentSecurityPolicyHeaderTypeReport, + kContentSecurityPolicyHeaderSourceOriginPolicy); } } } @@ -1199,7 +1198,7 @@ } http_content_type_ = g_null_atom; // TODO(dgozman): check whether clearing origin policy is intended behavior. - origin_policy_ = String(); + origin_policy_ = base::nullopt; probe::WillSendNavigationRequest(probe::ToCoreProbeSink(GetFrame()), main_resource_identifier_, this, url_, http_method_, http_body_.get()); @@ -1448,21 +1447,12 @@ // Headers go first, which means that the per-page headers override the // origin policy features. void MergeFeaturesFromOriginPolicy(WTF::StringBuilder& feature_policy, - const String& origin_policy_string) { - if (origin_policy_string.IsEmpty()) - return; - - std::unique_ptr<OriginPolicy> origin_policy = OriginPolicy::From( - StringUTF8Adaptor(origin_policy_string).AsStringPiece()); - if (!origin_policy) - return; - - for (const auto& policy : origin_policy->GetFeaturePolicies()) { + const WebOriginPolicy& origin_policy) { + for (const auto& policy : origin_policy.features) { if (!feature_policy.IsEmpty()) { feature_policy.Append(','); } - feature_policy.Append( - WTF::String::FromUTF8(policy.data(), policy.length())); + feature_policy.Append(policy); } } @@ -1482,7 +1472,9 @@ // are sent in didCommitNavigation(). WTF::StringBuilder feature_policy; feature_policy.Append(response_.HttpHeaderField(http_names::kFeaturePolicy)); - MergeFeaturesFromOriginPolicy(feature_policy, origin_policy_); + if (origin_policy_.has_value()) { + MergeFeaturesFromOriginPolicy(feature_policy, origin_policy_.value()); + } DocumentInit init = DocumentInit::Create()
diff --git a/third_party/blink/renderer/core/loader/document_loader.h b/third_party/blink/renderer/core/loader/document_loader.h index b5e42faa..772a994 100644 --- a/third_party/blink/renderer/core/loader/document_loader.h +++ b/third_party/blink/renderer/core/loader/document_loader.h
@@ -42,6 +42,7 @@ #include "third_party/blink/public/web/web_frame_load_type.h" #include "third_party/blink/public/web/web_navigation_params.h" #include "third_party/blink/public/web/web_navigation_type.h" +#include "third_party/blink/public/web/web_origin_policy.h" #include "third_party/blink/renderer/bindings/core/v8/source_location.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/weak_identifier_map.h" @@ -330,8 +331,9 @@ void CommitData(const char* bytes, size_t length); - ContentSecurityPolicy* CreateCSP(const ResourceResponse&, - const String& origin_policy_string); + ContentSecurityPolicy* CreateCSP( + const ResourceResponse&, + const base::Optional<WebOriginPolicy>& origin_policy); void StartLoadingInternal(); void FinishedLoading(base::TimeTicks finish_time); void CancelLoadAfterCSPDenied(const ResourceResponse&); @@ -393,7 +395,7 @@ scoped_refptr<EncodedFormData> http_body_; AtomicString http_content_type_; WebURLRequest::PreviewsState previews_state_; - String origin_policy_; + base::Optional<WebOriginPolicy> origin_policy_; scoped_refptr<const SecurityOrigin> requestor_origin_; KURL unreachable_url_; int error_code_;
diff --git a/third_party/blink/renderer/core/loader/resource/font_resource_test.cc b/third_party/blink/renderer/core/loader/resource/font_resource_test.cc index c03c194..887b0669 100644 --- a/third_party/blink/renderer/core/loader/resource/font_resource_test.cc +++ b/third_party/blink/renderer/core/loader/resource/font_resource_test.cc
@@ -128,7 +128,7 @@ CSSFontFaceSrcValue* src_value = CSSFontFaceSrcValue::Create( url.GetString(), url.GetString(), Referrer(document.Url(), document.GetReferrerPolicy()), - kDoNotCheckContentSecurityPolicy); + kDoNotCheckContentSecurityPolicy, OriginClean::kTrue); // Route font requests in this test through CSSFontFaceSrcValue::Fetch // instead of calling FontResource::Fetch directly. CSSFontFaceSrcValue
diff --git a/third_party/blink/renderer/core/paint/block_painter.cc b/third_party/blink/renderer/core/paint/block_painter.cc index 6c12d13c..180d375 100644 --- a/third_party/blink/renderer/core/paint/block_painter.cc +++ b/third_party/blink/renderer/core/paint/block_painter.cc
@@ -73,10 +73,7 @@ if (original_phase == PaintPhase::kMask) { layout_block_.PaintObject(local_paint_info, paint_offset); } else if (original_phase != PaintPhase::kSelfBlockBackgroundOnly && - original_phase != PaintPhase::kSelfOutlineOnly && - // For now all scrollers with overlay scrollbars are self-painting - // layers, so we don't need to traverse descendants here. - original_phase != PaintPhase::kOverlayScrollbars) { + original_phase != PaintPhase::kSelfOutlineOnly) { ScopedBoxContentsPaintState contents_paint_state(paint_state, layout_block_); layout_block_.PaintObject(contents_paint_state.GetPaintInfo(), @@ -110,12 +107,22 @@ layout_block_.PaintObject(local_paint_info, paint_offset); } - // We paint scrollbars after we painted the other things, so that the - // scrollbars will sit above them. + // Our scrollbar widgets paint exactly when we tell them to, so that they work + // properly with z-index. We paint after we painted the background/border, so + // that the scrollbars will sit above the background/border. local_paint_info.phase = original_phase; - if (auto* scrollable_area = layout_block_.GetScrollableArea()) { - ScrollableAreaPainter(*scrollable_area) - .PaintOverflowControls(local_paint_info, RoundedIntPoint(paint_offset)); + PaintOverflowControlsIfNeeded(local_paint_info, paint_offset); +} + +void BlockPainter::PaintOverflowControlsIfNeeded( + const PaintInfo& paint_info, + const PhysicalOffset& paint_offset) { + if (layout_block_.HasOverflowClip() && + layout_block_.StyleRef().Visibility() == EVisibility::kVisible && + ShouldPaintSelfBlockBackground(paint_info.phase)) { + ScrollableAreaPainter(*layout_block_.Layer()->GetScrollableArea()) + .PaintOverflowControls(paint_info, RoundedIntPoint(paint_offset), + false /* painting_overlay_controls */); } }
diff --git a/third_party/blink/renderer/core/paint/block_painter.h b/third_party/blink/renderer/core/paint/block_painter.h index 1c9e74725..76b51d3 100644 --- a/third_party/blink/renderer/core/paint/block_painter.h +++ b/third_party/blink/renderer/core/paint/block_painter.h
@@ -32,6 +32,8 @@ void PaintContents(const PaintInfo&, const PhysicalOffset& paint_offset); void PaintChildren(const PaintInfo&); void PaintChild(const LayoutBox&, const PaintInfo&); + void PaintOverflowControlsIfNeeded(const PaintInfo&, + const PhysicalOffset& paint_offset); // See ObjectPainter::PaintAllPhasesAtomically(). void PaintAllChildPhasesAtomically(const LayoutBox&, const PaintInfo&);
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index b4193c4..2c1fa94 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -2955,7 +2955,12 @@ } bool CompositedLayerMapping::NeedsToReparentOverflowControls() const { - return owning_layer_.NeedsReorderOverlayScrollbars(); + const ComputedStyle& style = owning_layer_.GetLayoutObject().StyleRef(); + return owning_layer_.GetScrollableArea() && + owning_layer_.GetScrollableArea()->HasOverlayScrollbars() && + !style.IsStackingContext() && + (style.IsStacked() || + owning_layer_.IsNonStackedWithInFlowStackedDescendant()); } GraphicsLayer* CompositedLayerMapping::DetachLayerForOverflowControls() { @@ -3173,6 +3178,13 @@ paint_info.paint_layer->SubpixelAccumulation()); PaintLayerPainter(*paint_info.paint_layer) .PaintLayerContents(context, painting_info, paint_layer_flags); + + if (paint_info.paint_layer->ContainsDirtyOverlayScrollbars()) { + PaintLayerPainter(*paint_info.paint_layer) + .PaintLayerContents( + context, painting_info, + paint_layer_flags | kPaintLayerPaintingOverlayScrollbars); + } } else { PaintLayerPaintingInfo painting_info( paint_info.paint_layer, CullRect(dirty_rect), kGlobalPaintNormalPhase,
diff --git a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc index 084bd945..d27f2aa 100644 --- a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc
@@ -166,8 +166,9 @@ pending_reparents.Set(&layer, child_layers.size()); // Set or overwrite the entry in |pending_reparents| for this scroller. - // Overlay scrollbars need to paint on top of all content under the scroller, - // so keep overwriting if we find a PaintLayer that is later in paint order. + // Overlay controls need to paint on top of all content under the + // scroller, so keep overwriting if we find a PaintLayer that is + // later in paint order. const PaintLayer* scroll_parent = layer.ScrollParent(); if (style.IsStacked() && scroll_parent && scroll_parent->HasCompositedLayerMapping() &&
diff --git a/third_party/blink/renderer/core/paint/frame_painter.cc b/third_party/blink/renderer/core/paint/frame_painter.cc index a3cbfbc..b1b9a2e 100644 --- a/third_party/blink/renderer/core/paint/frame_painter.cc +++ b/third_party/blink/renderer/core/paint/frame_painter.cc
@@ -103,6 +103,11 @@ layer_painter.Paint(context, cull_rect, updated_global_paint_flags, root_layer_paint_flags); + if (root_layer->ContainsDirtyOverlayScrollbars()) { + layer_painter.PaintOverlayScrollbars(context, cull_rect, + updated_global_paint_flags); + } + // Regions may have changed as a result of the visibility/z-index of element // changing. if (document->AnnotatedRegionsDirty())
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc index df51e78..eb671ad 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -192,13 +192,11 @@ PaintObject(info, paint_offset); } - // We paint scrollbars after we painted other things, so that the scrollbars - // will sit above them. + // Our scrollbar widgets paint exactly when we tell them to, so that they work + // properly with z-index. We paint after we painted the background/border, so + // that the scrollbars will sit above the background/border. info.phase = original_phase; - if (box_fragment_.HasOverflowClip()) { - ScrollableAreaPainter(*PhysicalFragment().Layer()->GetScrollableArea()) - .PaintOverflowControls(info, RoundedIntPoint(paint_offset)); - } + PaintOverflowControlsIfNeeded(info, paint_offset); } void NGBoxFragmentPainter::RecordHitTestData( @@ -892,6 +890,19 @@ box_fragment_.GetLayoutObject() == paint_info.PaintContainer(); } +// Clone of BlockPainter::PaintOverflowControlsIfNeeded +void NGBoxFragmentPainter::PaintOverflowControlsIfNeeded( + const PaintInfo& paint_info, + const PhysicalOffset& paint_offset) { + if (box_fragment_.HasOverflowClip() && + box_fragment_.Style().Visibility() == EVisibility::kVisible && + ShouldPaintSelfBlockBackground(paint_info.phase)) { + ScrollableAreaPainter(*PhysicalFragment().Layer()->GetScrollableArea()) + .PaintOverflowControls(paint_info, RoundedIntPoint(paint_offset), + false /* painting_overlay_controls */); + } +} + bool NGBoxFragmentPainter::ShouldPaint( const ScopedPaintState& paint_state) const { // TODO(layout-dev): Add support for scrolling, see BlockPainter::ShouldPaint.
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h index 91e7ace..88e9030 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
@@ -94,6 +94,8 @@ void PaintFloatingChildren(NGPaintFragment::ChildList, const PaintInfo&); void PaintFloats(const PaintInfo&); void PaintMask(const PaintInfo&, const PhysicalOffset& paint_offset); + void PaintOverflowControlsIfNeeded(const PaintInfo&, + const PhysicalOffset& paint_offset); void PaintAtomicInline(const PaintInfo&); void PaintBackground(const PaintInfo&, const PhysicalRect&,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_paint_fragment.cc b/third_party/blink/renderer/core/paint/ng/ng_paint_fragment.cc index 6793b9b..de12ac6e 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_paint_fragment.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_paint_fragment.cc
@@ -911,9 +911,10 @@ } void NGPaintFragment::SetShouldDoFullPaintInvalidationRecursively() { - if (LayoutObject* layout_object = GetMutableLayoutObject()) + if (LayoutObject* layout_object = GetMutableLayoutObject()) { + layout_object->StyleRef().ClearCachedPseudoStyles(); layout_object->SetShouldDoFullPaintInvalidation(); - + } for (NGPaintFragment* child : Children()) child->SetShouldDoFullPaintInvalidationRecursively(); } @@ -924,6 +925,7 @@ if (NGPaintFragment* line_box = FirstLineBox()) { line_box->SetShouldDoFullPaintInvalidationRecursively(); + GetLayoutObject()->StyleRef().ClearCachedPseudoStyles(); GetMutableLayoutObject()->SetShouldDoFullPaintInvalidation(); } }
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc index 45d5f64..7eb9e44 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.cc +++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -147,6 +147,7 @@ needs_position_update_(!IsRootLayer()), #endif has3d_transformed_descendant_(false), + contains_dirty_overlay_scrollbars_(false), needs_ancestor_dependent_compositing_inputs_update_( !RuntimeEnabledFeatures::CompositeAfterPaintEnabled()), child_needs_compositing_inputs_update_( @@ -176,7 +177,7 @@ needs_compositing_layer_assignment_(false), descendant_needs_compositing_layer_assignment_(false), has_self_painting_layer_descendant_(false), - needs_reorder_overlay_scrollbars_(false), + is_non_stacked_with_in_flow_stacked_descendant_(false), #if DCHECK_IS_ON() layer_list_mutation_allowed_(true), #endif @@ -222,12 +223,6 @@ ClearCompositedLayerMapping(true); } - // Reset this flag before disposing scrollable_area_ to prevent - // PaintLayerScrollableArea::WillRemoveScrollbar() from dirtying the z-order - // list of the stacking context. If this layer is removed from the parent, - // the z-order list should have been invalidated in RemoveChild(). - needs_reorder_overlay_scrollbars_ = false; - if (scrollable_area_) scrollable_area_->Dispose(); @@ -667,10 +662,14 @@ has_non_contained_absolute_position_descendant_ = false; has_stacked_descendant_in_current_stacking_context_ = false; has_self_painting_layer_descendant_ = false; + is_non_stacked_with_in_flow_stacked_descendant_ = false; bool can_contain_abs = GetLayoutObject().CanContainAbsolutePositionObjects(); + const ComputedStyle& style = GetLayoutObject().StyleRef(); + bool is_stacked = style.IsStacked(); + for (PaintLayer* child = FirstChild(); child; child = child->NextSibling()) { const ComputedStyle& child_style = child->GetLayoutObject().StyleRef(); @@ -714,6 +713,14 @@ has_self_painting_layer_descendant_ || child->HasSelfPaintingLayerDescendant() || child->IsSelfPaintingLayer(); + + if (!is_stacked) { + if (child->IsNonStackedWithInFlowStackedDescendant()) + is_non_stacked_with_in_flow_stacked_descendant_ = true; + else if (child_style.IsStacked() && + !child->GetLayoutObject().IsOutOfFlowPositioned()) + is_non_stacked_with_in_flow_stacked_descendant_ = true; + } } UpdateStackingNode(); @@ -1348,7 +1355,7 @@ // ancestorStackingContextNode() can be null in the case where we're // building up generated content layers. This is ok, since the lists will // start off dirty in that case anyway. - child->DirtyStackingContextZOrderLists(); + PaintLayerStackingNode::DirtyStackingContextZOrderLists(*child); MarkAncestorChainForFlagsUpdate(); } @@ -1391,7 +1398,7 @@ Compositor()->SetNeedsCompositingUpdate(kCompositingUpdateRebuildTree); } // Dirty the z-order list in which we are contained. - old_child->DirtyStackingContextZOrderLists(); + PaintLayerStackingNode::DirtyStackingContextZOrderLists(*old_child); SetNeedsCompositingInputsUpdate(); } @@ -1424,7 +1431,7 @@ return; if (old_style && old_style->IsStacked()) { - DirtyStackingContextZOrderLists(); + PaintLayerStackingNode::DirtyStackingContextZOrderLists(*this); MarkAncestorChainForFlagsUpdate(); } @@ -3515,23 +3522,6 @@ return nullptr; } -void PaintLayer::DirtyStackingContextZOrderLists() { - auto* stacking_context = AncestorStackingContext(); - if (!stacking_context) - return; - - // This invalidation code intentionally refers to stale state. - DisableCompositingQueryAsserts disabler; - - // Changes of stacking may result in graphics layers changing size - // due to new contents painting into them. - if (auto* mapping = stacking_context->GetCompositedLayerMapping()) - mapping->SetNeedsGraphicsLayerUpdate(kGraphicsLayerUpdateSubtree); - - if (stacking_context->StackingNode()) - stacking_context->StackingNode()->DirtyZOrderLists(); -} - DisableCompositingQueryAsserts::DisableCompositingQueryAsserts() : disabler_(&g_compositing_query_mode, kCompositingQueriesAreAllowed) {}
diff --git a/third_party/blink/renderer/core/paint/paint_layer.h b/third_party/blink/renderer/core/paint/paint_layer.h index 725923a..9a9dbe22 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.h +++ b/third_party/blink/renderer/core/paint/paint_layer.h
@@ -611,6 +611,13 @@ bool BackgroundIsKnownToBeOpaqueInRect(const PhysicalRect&, bool should_check_children) const; + bool ContainsDirtyOverlayScrollbars() const { + return contains_dirty_overlay_scrollbars_; + } + void SetContainsDirtyOverlayScrollbars(bool dirty_scrollbars) { + contains_dirty_overlay_scrollbars_ = dirty_scrollbars; + } + // If the input CompositorFilterOperation is not empty, it will be populated // only if |filter_on_effect_node_dirty_| is true or the reference box has // changed. Otherwise it will be populated unconditionally. @@ -876,10 +883,9 @@ DCHECK(!needs_descendant_dependent_flags_update_); return has_self_painting_layer_descendant_; } - - // See PaintLayerStackingNode::layer_to_overlay_scrollbars_painting_after_. - bool NeedsReorderOverlayScrollbars() const { - return needs_reorder_overlay_scrollbars_; + bool IsNonStackedWithInFlowStackedDescendant() const { + DCHECK(!needs_descendant_dependent_flags_update_); + return is_non_stacked_with_in_flow_stacked_descendant_; } // Returns true if there is a descendant with blend-mode that is @@ -1106,8 +1112,6 @@ return descendant_needs_compositing_layer_assignment_; } - void DirtyStackingContextZOrderLists(); - private: void SetNeedsCompositingInputsUpdateInternal(); @@ -1271,10 +1275,6 @@ // PaintLayerPaintOrderIterator. PaintLayerStackingNode* StackingNode() const { return stacking_node_.get(); } - void SetNeedsReorderOverlayScrollbars(bool b) { - needs_reorder_overlay_scrollbars_ = b; - } - // Self-painting layer is an optimization where we avoid the heavy Layer // painting machinery for a Layer allocated only to handle the overflow clip // case. @@ -1299,6 +1299,8 @@ // in a preserves3D hierarchy. Hint to do 3D-aware hit testing. unsigned has3d_transformed_descendant_ : 1; + unsigned contains_dirty_overlay_scrollbars_ : 1; + unsigned needs_ancestor_dependent_compositing_inputs_update_ : 1; unsigned child_needs_compositing_inputs_update_ : 1; @@ -1353,8 +1355,7 @@ unsigned descendant_needs_compositing_layer_assignment_ : 1; unsigned has_self_painting_layer_descendant_ : 1; - - unsigned needs_reorder_overlay_scrollbars_ : 1; + unsigned is_non_stacked_with_in_flow_stacked_descendant_ : 1; #if DCHECK_IS_ON() mutable unsigned layer_list_mutation_allowed_ : 1;
diff --git a/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h b/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h index 5bd84d94..32ee38c 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h +++ b/third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h
@@ -57,14 +57,6 @@ PaintLayer* Next(); - const Vector<PaintLayer*>* LayersPaintingOverlayScrollbarsAfter( - const PaintLayer* layer) const { - return root_.stacking_node_ - ? root_.stacking_node_->LayersPaintingOverlayScrollbarsAfter( - layer) - : nullptr; - } - private: const PaintLayer& root_; unsigned remaining_children_;
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.cc b/third_party/blink/renderer/core/paint/paint_layer_painter.cc index 3341c7874..0f91221 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.cc
@@ -14,7 +14,6 @@ #include "third_party/blink/renderer/core/paint/paint_info.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_layer_paint_order_iterator.h" -#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" #include "third_party/blink/renderer/core/paint/scrollable_area_painter.h" #include "third_party/blink/renderer/platform/geometry/float_point_3d.h" #include "third_party/blink/renderer/platform/graphics/graphics_layer.h" @@ -492,13 +491,13 @@ (is_painting_root_layer && !(paint_flags & kPaintLayerPaintingSkipRootBackground))); bool should_paint_neg_z_order_list = - !is_painting_overlay_scrollbars && - (is_painting_scrolling_content ? is_painting_overflow_contents - : is_painting_composited_background); + (is_painting_scrolling_content && is_painting_overflow_contents) || + (!is_painting_scrolling_content && is_painting_composited_background); bool should_paint_own_contents = is_painting_composited_foreground && should_paint_content; bool should_paint_normal_flow_and_pos_z_order_lists = - is_painting_composited_foreground && !is_painting_overlay_scrollbars; + is_painting_composited_foreground; + bool should_paint_overlay_scrollbars = is_painting_overlay_scrollbars; bool is_video = paint_layer_.GetLayoutObject().IsVideo(); base::Optional<ScopedPaintChunkProperties> @@ -557,13 +556,9 @@ result = kMayBeClippedByCullRect; } - if (paint_layer_.GetScrollableArea() && - paint_layer_.GetScrollableArea()->HasOverlayScrollbars()) { - if (is_painting_overlay_scrollbars || - !paint_layer_.NeedsReorderOverlayScrollbars()) { - PaintOverlayScrollbarsForFragments(layer_fragments, context, - local_painting_info, paint_flags); - } + if (should_paint_overlay_scrollbars) { + PaintOverflowControlsForFragments(layer_fragments, context, + local_painting_info, paint_flags); } if (is_video && should_paint_self_outline) { @@ -703,44 +698,44 @@ if (PaintLayerPainter(*child).Paint(context, painting_info, paint_flags) == kMayBeClippedByCullRect) result = kMayBeClippedByCullRect; - - if (const auto* layers_painting_overlay_scrollbars_after = - iterator.LayersPaintingOverlayScrollbarsAfter(child)) { - for (auto* reparent_scrollbar_layer : - *layers_painting_overlay_scrollbars_after) { - DCHECK(reparent_scrollbar_layer->NeedsReorderOverlayScrollbars()); - if (PaintLayerPainter(*reparent_scrollbar_layer) - .Paint(context, painting_info, - kPaintLayerPaintingOverlayScrollbars) == - kMayBeClippedByCullRect) - result = kMayBeClippedByCullRect; - } - } } return result; } -void PaintLayerPainter::PaintOverlayScrollbarsForFragments( +void PaintLayerPainter::PaintOverflowControlsForFragments( const PaintLayerFragments& layer_fragments, GraphicsContext& context, const PaintLayerPaintingInfo& painting_info, PaintLayerFlags paint_flags) { - DCHECK(paint_layer_.GetScrollableArea() && - paint_layer_.GetScrollableArea()->HasOverlayScrollbars()); - - // We don't need to paint composited scrollbars. - if (paint_layer_.GetScrollableArea()->HasLayerForHorizontalScrollbar() || - paint_layer_.GetScrollableArea()->HasLayerForVerticalScrollbar()) + PaintLayerScrollableArea* scrollable_area = paint_layer_.GetScrollableArea(); + if (!scrollable_area) return; ForAllFragments( context, layer_fragments, [&](const PaintLayerFragment& fragment) { - if (!fragment.background_rect.IsEmpty()) { - PaintFragmentWithPhase(PaintPhase::kOverlayScrollbars, fragment, - context, fragment.background_rect, - painting_info, paint_flags); - } + ScopedPaintChunkProperties fragment_paint_chunk_properties( + context.GetPaintController(), + fragment.fragment_data->LocalBorderBoxProperties(), paint_layer_, + DisplayItem::kOverflowControls); + + // We need to apply the same clips and transforms that + // paintFragmentWithPhase would have. + PhysicalRect cull_rect = fragment.background_rect.Rect(); + PaintInfo paint_info( + context, PixelSnappedIntRect(cull_rect), + PaintPhase::kSelfBlockBackgroundOnly, + painting_info.GetGlobalPaintFlags(), paint_flags, + &painting_info.root_layer->GetLayoutObject(), + fragment.fragment_data + ? fragment.fragment_data->LogicalTopInFlowThread() + : LayoutUnit()); + // We pass IntPoint() as the paint offset here, because + // ScrollableArea::paintOverflowControls just ignores it and uses the + // offset found in a previous pass. + ScrollableAreaPainter(*scrollable_area) + .PaintOverflowControls(paint_info, IntPoint(), + true /* painting_overlay_controls */); }); } @@ -945,9 +940,14 @@ GraphicsContext& context, const CullRect& cull_rect, const GlobalPaintFlags paint_flags) { + if (!paint_layer_.ContainsDirtyOverlayScrollbars()) + return; + PaintLayerPaintingInfo painting_info(&paint_layer_, cull_rect, paint_flags, PhysicalOffset()); Paint(context, painting_info, kPaintLayerPaintingOverlayScrollbars); + + paint_layer_.SetContainsDirtyOverlayScrollbars(false); } void PaintLayerPainter::FillMaskingFragment(GraphicsContext& context,
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.h b/third_party/blink/renderer/core/paint/paint_layer_painter.h index 03be2fc..c16f278 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.h +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.h
@@ -94,10 +94,10 @@ GraphicsContext&, const PaintLayerPaintingInfo&, PaintLayerFlags); - void PaintOverlayScrollbarsForFragments(const PaintLayerFragments&, - GraphicsContext&, - const PaintLayerPaintingInfo&, - PaintLayerFlags); + void PaintOverflowControlsForFragments(const PaintLayerFragments&, + GraphicsContext&, + const PaintLayerPaintingInfo&, + PaintLayerFlags); void PaintMaskForFragments(const PaintLayerFragments&, GraphicsContext&, const PaintLayerPaintingInfo&,
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc index a8a2422..b1271a1 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -2621,25 +2621,9 @@ return page->GetScrollbarTheme(); } -void PaintLayerScrollableArea::DidAddScrollbar( - Scrollbar& scrollbar, - ScrollbarOrientation orientation) { - // Z-order of reparented scrollbar is updated along with the z-order lists. - if (scrollbar.IsOverlayScrollbar()) - layer_->DirtyStackingContextZOrderLists(); - - ScrollableArea::DidAddScrollbar(scrollbar, orientation); -} - void PaintLayerScrollableArea::WillRemoveScrollbar( Scrollbar& scrollbar, ScrollbarOrientation orientation) { - if (layer_->NeedsReorderOverlayScrollbars()) { - // Z-order of reparented scrollbar is updated along with the z-order lists. - DCHECK(scrollbar.IsOverlayScrollbar()); - layer_->DirtyStackingContextZOrderLists(); - } - if (!scrollbar.IsCustomScrollbar() && !(orientation == kHorizontalScrollbar ? LayerForHorizontalScrollbar() : LayerForVerticalScrollbar())) {
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h index a40d634..b9b0205c 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h
@@ -444,6 +444,13 @@ LayoutScrollbarPart* Resizer() const { return resizer_; } + const IntPoint& CachedOverlayScrollbarOffset() { + return cached_overlay_scrollbar_offset_; + } + void SetCachedOverlayScrollbarOffset(const IntPoint& offset) { + cached_overlay_scrollbar_offset_ = offset; + } + IntRect RectForHorizontalScrollbar(const IntRect& border_box_rect) const; IntRect RectForVerticalScrollbar(const IntRect& border_box_rect) const; @@ -521,7 +528,6 @@ // scrollbar. int HypotheticalScrollbarThickness(ScrollbarOrientation) const; - void DidAddScrollbar(Scrollbar&, ScrollbarOrientation) override; void WillRemoveScrollbar(Scrollbar&, ScrollbarOrientation) override; void InvalidatePaintOfScrollControlsIfNeeded(const PaintInvalidatorContext&); @@ -672,6 +678,8 @@ // This is the offset from the beginning of content flow. ScrollOffset scroll_offset_; + IntPoint cached_overlay_scrollbar_offset_; + // LayoutObject to hold our custom scroll corner. LayoutScrollbarPart* scroll_corner_;
diff --git a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc index 0a9abfb..2f318b0 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc
@@ -53,7 +53,6 @@ #include "third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h" #include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" -#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" namespace blink { @@ -87,83 +86,50 @@ pos_z_order_list_.clear(); neg_z_order_list_.clear(); - - for (auto& entry : layer_to_overlay_scrollbars_painting_after_.Values()) { - for (PaintLayer* layer : entry) - layer->SetNeedsReorderOverlayScrollbars(false); - } - layer_to_overlay_scrollbars_painting_after_.clear(); - z_order_lists_dirty_ = true; if (!layer_.GetLayoutObject().DocumentBeingDestroyed() && Compositor()) Compositor()->SetNeedsCompositingUpdate(kCompositingUpdateRebuildTree); } -static bool ZIndexLessThan(const PaintLayer* first, const PaintLayer* second) { - DCHECK(first->GetLayoutObject().StyleRef().IsStacked()); - DCHECK(second->GetLayoutObject().StyleRef().IsStacked()); - return first->GetLayoutObject().StyleRef().ZIndex() < - second->GetLayoutObject().StyleRef().ZIndex(); -} - -static void SetIfHigher(const PaintLayer*& first, const PaintLayer* second) { - if (!second) +void PaintLayerStackingNode::DirtyStackingContextZOrderLists( + PaintLayer& layer) { + auto* stacking_context = layer.AncestorStackingContext(); + if (!stacking_context) return; - DCHECK_GE(second->GetLayoutObject().StyleRef().ZIndex(), 0); - // |second| appears later in the tree, so it's higher than |first| if its - // z-index >= |first|'s z-index. - if (!first || !ZIndexLessThan(second, first)) - first = second; + + // This invalidation code intentionally refers to stale state. + DisableCompositingQueryAsserts disabler; + + // Changes of stacking may result in graphics layers changing size + // due to new contents painting into them. + if (auto* mapping = stacking_context->GetCompositedLayerMapping()) + mapping->SetNeedsGraphicsLayerUpdate(kGraphicsLayerUpdateSubtree); + + if (stacking_context->StackingNode()) + stacking_context->StackingNode()->DirtyZOrderLists(); } -// For finding the proper z-order of reparented overlay scrollbars. -struct PaintLayerStackingNode::HighestLayers { - const PaintLayer* highest_absolute_position = nullptr; - const PaintLayer* highest_fixed_position = nullptr; - const PaintLayer* highest_in_flow_stacked = nullptr; - - void Update(const PaintLayer& layer) { - const auto& style = layer.GetLayoutObject().StyleRef(); - // We only need to consider zero or positive z-index stacked child for - // candidates of causing reparent of overlay scrollbars of ancestors. - // A negative z-index child will not cause reparent of overlay scrollbars - // because the ancestor scroller either has auto z-index which is above - // the child or has negative z-index which is a stacking context. - if (!style.IsStacked() || style.ZIndex() < 0) - return; - - if (style.GetPosition() == EPosition::kAbsolute) - SetIfHigher(highest_absolute_position, &layer); - else if (style.GetPosition() == EPosition::kFixed) - SetIfHigher(highest_fixed_position, &layer); - else - SetIfHigher(highest_in_flow_stacked, &layer); - } - - void Merge(HighestLayers& child) { - SetIfHigher(highest_absolute_position, child.highest_absolute_position); - SetIfHigher(highest_fixed_position, child.highest_fixed_position); - SetIfHigher(highest_in_flow_stacked, child.highest_in_flow_stacked); - } -}; - void PaintLayerStackingNode::RebuildZOrderLists() { #if DCHECK_IS_ON() DCHECK(layer_.LayerListMutationAllowed()); #endif DCHECK(z_order_lists_dirty_); - layer_.SetNeedsReorderOverlayScrollbars(false); for (PaintLayer* child = layer_.FirstChild(); child; child = child->NextSibling()) - CollectLayers(*child, nullptr); + CollectLayers(*child); + + auto CompareZIndex = [](PaintLayer* first, PaintLayer* second) { + return first->GetLayoutObject().StyleRef().ZIndex() < + second->GetLayoutObject().StyleRef().ZIndex(); + }; // Sort the two lists. std::stable_sort(pos_z_order_list_.begin(), pos_z_order_list_.end(), - ZIndexLessThan); + CompareZIndex); std::stable_sort(neg_z_order_list_.begin(), neg_z_order_list_.end(), - ZIndexLessThan); + CompareZIndex); // Append layers for top layer elements after normal layer collection, to // ensure they are on top regardless of z-indexes. The layoutObjects of top @@ -194,18 +160,11 @@ z_order_lists_dirty_ = false; } -void PaintLayerStackingNode::CollectLayers(PaintLayer& paint_layer, - HighestLayers* highest_layers) { - paint_layer.SetNeedsReorderOverlayScrollbars(false); - +void PaintLayerStackingNode::CollectLayers(PaintLayer& paint_layer) { if (paint_layer.IsInTopLayer()) return; - if (highest_layers) - highest_layers->Update(paint_layer); - - const auto& object = paint_layer.GetLayoutObject(); - const auto& style = object.StyleRef(); + const ComputedStyle& style = paint_layer.GetLayoutObject().StyleRef(); if (style.IsStacked()) { auto& list = style.ZIndex() >= 0 ? pos_z_order_list_ : neg_z_order_list_; @@ -215,41 +174,9 @@ if (style.IsStackingContext()) return; - base::Optional<HighestLayers> subtree_highest_layers; - bool has_overlay_scrollbars = - paint_layer.GetScrollableArea() && - paint_layer.GetScrollableArea()->HasOverlayScrollbars(); - if (has_overlay_scrollbars) - subtree_highest_layers.emplace(); - for (PaintLayer* child = paint_layer.FirstChild(); child; - child = child->NextSibling()) { - CollectLayers(*child, subtree_highest_layers ? &*subtree_highest_layers - : highest_layers); - } - - if (has_overlay_scrollbars) { - const PaintLayer* layer_to_paint_overlay_scrollbars_after = - subtree_highest_layers->highest_in_flow_stacked; - if (object.CanContainFixedPositionObjects()) { - SetIfHigher(layer_to_paint_overlay_scrollbars_after, - subtree_highest_layers->highest_fixed_position); - } - if (object.CanContainAbsolutePositionObjects()) { - SetIfHigher(layer_to_paint_overlay_scrollbars_after, - subtree_highest_layers->highest_absolute_position); - } - if (layer_to_paint_overlay_scrollbars_after) { - layer_to_overlay_scrollbars_painting_after_ - .insert(layer_to_paint_overlay_scrollbars_after, PaintLayers()) - .stored_value->value.push_back(&paint_layer); - } - paint_layer.SetNeedsReorderOverlayScrollbars( - !!layer_to_paint_overlay_scrollbars_after); - - if (highest_layers) - highest_layers->Merge(*subtree_highest_layers); - } + child = child->NextSibling()) + CollectLayers(*child); } #if DCHECK_IS_ON() @@ -284,7 +211,7 @@ // Need to force requirements update, due to change of stacking order. paint_layer.SetNeedsCompositingRequirementsUpdate(); - paint_layer.DirtyStackingContextZOrderLists(); + DirtyStackingContextZOrderLists(paint_layer); if (paint_layer.StackingNode()) paint_layer.StackingNode()->DirtyZOrderLists();
diff --git a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h index 7f0f3c24..fb9288f 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h +++ b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h
@@ -50,7 +50,6 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_box_model_object.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" -#include "third_party/blink/renderer/platform/wtf/hash_map.h" #include "third_party/blink/renderer/platform/wtf/vector.h" namespace blink { @@ -97,8 +96,8 @@ explicit PaintLayerStackingNode(PaintLayer&); ~PaintLayerStackingNode(); - void DirtyZOrderLists(); void UpdateZOrderLists(); + static void DirtyStackingContextZOrderLists(PaintLayer&); // Returns whether a relevant style changed. static bool StyleDidChange(PaintLayer& paint_layer, @@ -115,21 +114,11 @@ return neg_z_order_list_; } - const PaintLayers* LayersPaintingOverlayScrollbarsAfter( - const PaintLayer* layer) const { - DCHECK(!z_order_lists_dirty_); - auto it = layer_to_overlay_scrollbars_painting_after_.find(layer); - return it == layer_to_overlay_scrollbars_painting_after_.end() ? nullptr - : &it->value; - } - - void ClearNeedsReorderOverlayScrollbars(); - private: + void DirtyZOrderLists(); void RebuildZOrderLists(); - struct HighestLayers; - void CollectLayers(PaintLayer&, HighestLayers*); + void CollectLayers(PaintLayer&); #if DCHECK_IS_ON() void UpdateStackingParentForZOrderLists( @@ -146,48 +135,6 @@ // Holds descendants within our stacking context with negative z-indices. PaintLayers neg_z_order_list_; - // Overlay scrollbars need to be painted above all scrollable contents, even - // if the contents are stacked in a stacking context which is an ancestor of - // the scrolling layer, for example: - // <div id="stacking-context" style="opacity: 0.5"> - // <div id="other" style="position: relative; z-index: 10></div> - // <div id="scroller" style="overflow: scroll"> - // <div id="child" style="position: relative">CHILD</div> - // </div> - // </div> - // and - // <div id="stacking-context" style="opacity: 0.5"> - // <div id="other" style="position: relative; z-index: 10></div> - // <div id="scroller" style="overflow: scroll; position: relative"> - // <div id="child" style="position: absolute; z-index: 5">CHILD</div> - // </div> - // </div> - // - // The paint order without reordering overlay scrollbars would be: - // stacking-context - // / | \ - // scroller child other - // | - // overlay scrollbars - // where the overlay scrollbars would be painted incorrectly below |child| - // which is scrollable by |scroller|. - // - // To paint the overlay scrollbars above all scrollable contents, we need to - // reorder the z-order of overlay scrollbars in the stacking context: - // stacking-context - // / | | \ - // scroller child | other - // | - // overlay scrollbars - // - // This map records which PaintLayers (the values of the map) have overlay - // scrollbars which should paint after the given PaintLayer (the key of the - // map). The value of the map is a list of PaintLayers because there may be - // more than one scroller in the same stacking context with overlay - // scrollbars. - HashMap<const PaintLayer*, PaintLayers> - layer_to_overlay_scrollbars_painting_after_; - // Indicates whether the z-order lists above are dirty. bool z_order_lists_dirty_ : 1;
diff --git a/third_party/blink/renderer/core/paint/paint_layer_test.cc b/third_party/blink/renderer/core/paint/paint_layer_test.cc index ef79f94..f64dce5 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_test.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_test.cc
@@ -4,7 +4,6 @@ #include "third_party/blink/renderer/core/paint/paint_layer.h" -#include "testing/gmock/include/gmock/gmock.h" #include "third_party/blink/renderer/core/dom/pseudo_element.h" #include "third_party/blink/renderer/core/html/html_iframe_element.h" #include "third_party/blink/renderer/core/layout/layout_box_model_object.h" @@ -17,9 +16,6 @@ namespace blink { -using ::testing::ElementsAre; -using ::testing::Pointee; - class PaintLayerTest : public PaintTestConfigurations, public RenderingTest { public: PaintLayerTest() @@ -454,333 +450,79 @@ EXPECT_FALSE(child->HasSelfPaintingLayerDescendant()); } -static const Vector<PaintLayer*>* LayersPaintingOverlayScrollbarsAfter( - const PaintLayer* layer) { - return PaintLayerPaintOrderIterator(*layer->AncestorStackingContext(), - kPositiveZOrderChildren) - .LayersPaintingOverlayScrollbarsAfter(layer); -} - -TEST_P(PaintLayerTest, ReorderOverlayScrollbars_StackedWithInFlowDescendant) { - SetBodyInnerHTML(R"HTML( - <div id='parent' style='overflow: auto; position: relative; - width: 100px; height: 100px'> - <div id='child' style='position: relative; height: 200px'></div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "position: relative; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "position: relative; width: 200px; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "width: 200px; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "position: relative; width: 200px; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_StackedWithOutOfFlowDescendant) { - SetBodyInnerHTML(R"HTML( - <style>#child { width: 200px; height: 200px; }</style> - <div id='parent' style='overflow: auto; position: relative; height: 100px'> - <div id='child' style='position: absolute'></div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr, - ""); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - - GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr, - "position: absolute"); - UpdateAllLifecyclePhasesForTest(); - child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); -} - -TEST_P(PaintLayerTest, ReorderOverlayScrollbars_StackedWithZIndexDescendant) { - SetBodyInnerHTML(R"HTML( - <style>#child { position: absolute; width: 200px; height: 200px; }</style> - <div id='parent' style='overflow: auto; position: relative; height: 100px'> - <div id='child' style='position: absolute; z-index: 1; - width: 200px; height: 200px'></div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr, - "z-index: -1"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); - - GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr, - "z-index: 2"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NestedStackedWithInFlowStackedChild) { - SetBodyInnerHTML(R"HTML( - <div id='ancestor' - style='overflow: auto; position: relative; height: 100px'> - <div id='parent' style='overflow: auto; height: 200px'> - <div id="child" style='position: relative; height: 300px'></div> - </div> - </div> - )HTML"); - auto* ancestor = GetPaintLayerByElementId("ancestor"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(ancestor->NeedsReorderOverlayScrollbars()); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent, ancestor))); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NestedStackedWithOutOfFlowStackedChild) { - SetBodyInnerHTML(R"HTML( - <div id='ancestor' - style='overflow: auto; position: relative; height: 100px'> - <div id='parent' style='overflow: auto; position: absolute; - width: 200px; height: 200px'> - <div id="child" style='position: absolute; width: 300px; height: 300px'> - </div> - </div> - </div> - )HTML"); - auto* ancestor = GetPaintLayerByElementId("ancestor"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(ancestor->NeedsReorderOverlayScrollbars()); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent, ancestor))); -} - -TEST_P(PaintLayerTest, ReorderOverlayScrollbars_MultipleChildren) { - SetBodyInnerHTML(R"HTML( - <style> - div { width: 200px; height: 200px; } - #parent { overflow: auto; width: 100px; height: 100px; } - </style> - <div id='parent'> - <div id="low-child" style='position: absolute; z-index: 1'></div> - <div id="middle-child" style='position: relative; z-index: 2'></div> - <div id="high-child" style='position: absolute; z-index: 3'></div> - </div> - )HTML"); - - auto* parent = GetPaintLayerByElementId("parent"); - auto* low_child = GetPaintLayerByElementId("low-child"); - auto* middle_child = GetPaintLayerByElementId("middle-child"); - auto* high_child = GetPaintLayerByElementId("high-child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(low_child)); - // The highest contained child by parent is middle_child because the - // absolute-position children are not contained. - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(middle_child), - Pointee(ElementsAre(parent))); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(high_child)); - - GetDocument().getElementById("parent")->setAttribute( - html_names::kStyleAttr, "position: absolute; z-index: 1"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(low_child)); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(middle_child)); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(high_child)); - - GetDocument().getElementById("parent")->setAttribute(html_names::kStyleAttr, - "position: absolute"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(low_child)); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(middle_child)); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(high_child), - Pointee(ElementsAre(parent))); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NonStackedWithInFlowDescendant) { - SetBodyInnerHTML(R"HTML( - <div id='parent' style='overflow: auto; width: 100px; height: 100px'> - <div id='child' style='position: relative; height: 200px'></div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "position: relative; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "position: relative; width: 200px; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "width: 200px; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - - GetDocument().getElementById("child")->setAttribute( - html_names::kStyleAttr, "position: relative; width: 200px; height: 80px"); - UpdateAllLifecyclePhasesForTest(); - child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NonStackedWithZIndexInFlowDescendant) { - SetBodyInnerHTML(R"HTML( - <style>#child { position: relative; height: 200px; }</style> - <div id='parent' style='overflow: auto; height: 100px'> - <div id='child' style='z-index: 1'> - </div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); - - GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr, - "z-index: -1"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); - - GetDocument().getElementById("child")->setAttribute(html_names::kStyleAttr, - "z-index: 2"); - UpdateAllLifecyclePhasesForTest(); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent))); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NonStackedWithOutOfFlowDescendant) { - SetBodyInnerHTML(R"HTML( - <div id='parent' style='overflow: auto; height: 100px'> - <div id='child' style='position: absolute; - width: 200px; height: 200px'></div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NonStackedWithNonStackedDescendant) { +TEST_P(PaintLayerTest, NonStackedWithInFlowDescendant) { SetBodyInnerHTML(R"HTML( <div id='parent' style='overflow: auto'> - <div id='child' style='overflow: auto'></div> - </div> - )HTML"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); -} - -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NestedNonStackedWithInFlowStackedChild) { - SetBodyInnerHTML(R"HTML( - <div id='ancestor' style='overflow: auto; height: 100px'> - <div id='parent' style='overflow: auto; height: 200px'> - <div id="child" style='position: relative; height: 300px'></div> + <div id='child' style='position: relative'> + <div></div> </div> </div> )HTML"); - auto* ancestor = GetPaintLayerByElementId("ancestor"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_TRUE(ancestor->NeedsReorderOverlayScrollbars()); - EXPECT_TRUE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_THAT(LayersPaintingOverlayScrollbarsAfter(child), - Pointee(ElementsAre(parent, ancestor))); + PaintLayer* parent = GetPaintLayerByElementId("parent"); + PaintLayer* child = GetPaintLayerByElementId("child"); + + EXPECT_TRUE(parent->IsNonStackedWithInFlowStackedDescendant()); + EXPECT_FALSE(child->IsNonStackedWithInFlowStackedDescendant()); } -TEST_P(PaintLayerTest, - ReorderOverlayScrollbars_NestedNonStackedWithOutOfFlowStackedChild) { +TEST_P(PaintLayerTest, NonStackedWithOutOfFlowDescendant) { SetBodyInnerHTML(R"HTML( - <div id='ancestor' style='overflow: auto; height: 100px'> - <div id='parent' style='overflow: auto; height: 200px'> - <div id="child" style='position: absolute; width: 300px; height: 300px'> - </div> + <div id='parent' style='overflow: auto'> + <div id='child' style='position: absolute'> + <div></div> </div> </div> )HTML"); - auto* ancestor = GetPaintLayerByElementId("ancestor"); - auto* parent = GetPaintLayerByElementId("parent"); - auto* child = GetPaintLayerByElementId("child"); - EXPECT_FALSE(ancestor->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(parent->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(child->NeedsReorderOverlayScrollbars()); - EXPECT_FALSE(LayersPaintingOverlayScrollbarsAfter(child)); + PaintLayer* parent = GetPaintLayerByElementId("parent"); + PaintLayer* child = GetPaintLayerByElementId("child"); + + EXPECT_FALSE(parent->IsNonStackedWithInFlowStackedDescendant()); + EXPECT_FALSE(child->IsNonStackedWithInFlowStackedDescendant()); +} + +TEST_P(PaintLayerTest, NonStackedWithNonStackedDescendant) { + SetBodyInnerHTML(R"HTML( + <div id='parent' style='overflow: auto'> + <div id='child' style='overflow: auto'> + <div></div> + </div> + </div> + )HTML"); + PaintLayer* parent = GetPaintLayerByElementId("parent"); + PaintLayer* child = GetPaintLayerByElementId("child"); + + EXPECT_FALSE(parent->IsNonStackedWithInFlowStackedDescendant()); + EXPECT_FALSE(child->IsNonStackedWithInFlowStackedDescendant()); +} + +TEST_P(PaintLayerTest, NonStackedWithInFlowStackedGrandchild) { + SetBodyInnerHTML(R"HTML( + <div id='parent' style='overflow: auto'> + <div id='child' style='overflow: auto'> + <div style='position: relative'></div> + </div> + </div> + )HTML"); + PaintLayer* parent = GetPaintLayerByElementId("parent"); + PaintLayer* child = GetPaintLayerByElementId("child"); + + EXPECT_TRUE(parent->IsNonStackedWithInFlowStackedDescendant()); + EXPECT_TRUE(child->IsNonStackedWithInFlowStackedDescendant()); +} + +TEST_P(PaintLayerTest, NonStackedWithOutOfFlowStackedGrandchild) { + SetBodyInnerHTML(R"HTML( + <div id='parent' style='overflow: auto'> + <div id='child' style='overflow: auto'> + <div style='position: absolute'></div> + </div> + </div> + )HTML"); + PaintLayer* parent = GetPaintLayerByElementId("parent"); + PaintLayer* child = GetPaintLayerByElementId("child"); + + EXPECT_FALSE(parent->IsNonStackedWithInFlowStackedDescendant()); + EXPECT_FALSE(child->IsNonStackedWithInFlowStackedDescendant()); } TEST_P(PaintLayerTest, SubsequenceCachingStackingContexts) {
diff --git a/third_party/blink/renderer/core/paint/paint_phase.h b/third_party/blink/renderer/core/paint/paint_phase.h index 34e57bf4..bf07703 100644 --- a/third_party/blink/renderer/core/paint/paint_phase.h +++ b/third_party/blink/renderer/core/paint/paint_phase.h
@@ -45,7 +45,7 @@ // Background phase // // Paint background of the current object and non-self-painting descendants. - kBlockBackground, + kBlockBackground = 0, // // The following two values are added besides the normal // kBlockBackground to distinguish backgrounds for the object itself @@ -53,40 +53,39 @@ // different scroll offsets and clips. // // Paint background of the current object only. - kSelfBlockBackgroundOnly, + kSelfBlockBackgroundOnly = 1, // Paint backgrounds of non-self-painting descendants only. The painter should // call each non-self-painting child's paint method by passing // paintInfo.forDescendants() which converts kDescendantBlockBackgroundsOnly // to kBlockBackground. - kDescendantBlockBackgroundsOnly, + kDescendantBlockBackgroundsOnly = 2, // Float phase - kFloat, + kFloat = 3, // Foreground phase - kForeground, + kForeground = 4, // Outline phase // // Paint outline for the current object and non-self-painting descendants. - kOutline, + kOutline = 5, // // Similar to the background phase, the following two values are added for // painting outlines of the object itself and for descendants. // // Paint outline for the current object only. - kSelfOutlineOnly, + kSelfOutlineOnly = 6, // Paint outlines of non-self-painting descendants only. The painter should // call each non-self-painting child's paint method by passing // paintInfo.forDescendants() which converts kDescendantOutlinesOnly to // kOutline. - kDescendantOutlinesOnly, + kDescendantOutlinesOnly = 7, // The below are auxiliary phases which are used to paint special effects. - kOverlayScrollbars, - kSelection, - kTextClip, - kMask, + kSelection = 8, + kTextClip = 9, + kMask = 10, kMax = kMask, // These values must be kept in sync with DisplayItem::Type and
diff --git a/third_party/blink/renderer/core/paint/scrollable_area_painter.cc b/third_party/blink/renderer/core/paint/scrollable_area_painter.cc index 22a3963..2dc2294f 100644 --- a/third_party/blink/renderer/core/paint/scrollable_area_painter.cc +++ b/third_party/blink/renderer/core/paint/scrollable_area_painter.cc
@@ -124,23 +124,56 @@ void ScrollableAreaPainter::PaintOverflowControls( const PaintInfo& paint_info, - const IntPoint& paint_offset) { + const IntPoint& paint_offset, + bool painting_overlay_controls) { // Don't do anything if we have no overflow. - const auto& box = *GetScrollableArea().GetLayoutBox(); - if (!box.HasOverflowClip() || - box.StyleRef().Visibility() != EVisibility::kVisible) + if (!GetScrollableArea().GetLayoutBox()->HasOverflowClip()) return; - // Overlay scrollbars are painted in the dedicated paint phase, and normal - // scrollbars are painted in the background paint phase. - if (GetScrollableArea().HasOverlayScrollbars()) { - if (paint_info.phase != PaintPhase::kOverlayScrollbars) + IntPoint adjusted_paint_offset = paint_offset; + if (painting_overlay_controls) + adjusted_paint_offset = GetScrollableArea().CachedOverlayScrollbarOffset(); + + CullRect adjusted_cull_rect = paint_info.GetCullRect(); + adjusted_cull_rect.MoveBy(-adjusted_paint_offset); + // Overlay scrollbars paint in a second pass through the layer tree so that + // they will paint on top of everything else. If this is the normal painting + // pass, paintingOverlayControls will be false, and we should just tell the + // root layer that there are overlay scrollbars that need to be painted. That + // will cause the second pass through the layer tree to run, and we'll paint + // the scrollbars then. In the meantime, cache tx and ty so that the second + // pass doesn't need to re-enter the LayoutTree to get it right. + if (GetScrollableArea().HasOverlayScrollbars() && + !painting_overlay_controls) { + GetScrollableArea().SetCachedOverlayScrollbarOffset(paint_offset); + // It's not necessary to do the second pass if the scrollbars paint into + // layers. + if ((GetScrollableArea().HorizontalScrollbar() && + GetScrollableArea().LayerForHorizontalScrollbar()) || + (GetScrollableArea().VerticalScrollbar() && + GetScrollableArea().LayerForVerticalScrollbar())) return; - } else if (!ShouldPaintSelfBlockBackground(paint_info.phase)) { + if (!OverflowControlsIntersectRect(adjusted_cull_rect)) + return; + + LayoutView* layout_view = GetScrollableArea().GetLayoutBox()->View(); + + PaintLayer* painting_root = + GetScrollableArea().Layer()->EnclosingLayerWithCompositedLayerMapping( + kIncludeSelf); + if (!painting_root) + painting_root = layout_view->Layer(); + + painting_root->SetContainsDirtyOverlayScrollbars(true); return; } + // This check is required to avoid painting custom CSS scrollbars twice. + if (painting_overlay_controls && !GetScrollableArea().HasOverlayScrollbars()) + return; + GraphicsContext& context = paint_info.context; + const auto& box = *GetScrollableArea().GetLayoutBox(); const auto* fragment = paint_info.FragmentToPaint(box); if (!fragment) return; @@ -158,9 +191,6 @@ } } - CullRect adjusted_cull_rect = paint_info.GetCullRect(); - adjusted_cull_rect.MoveBy(-paint_offset); - if (GetScrollableArea().HorizontalScrollbar() && !GetScrollableArea().LayerForHorizontalScrollbar()) { GetScrollableArea().HorizontalScrollbar()->Paint(context, @@ -170,27 +200,51 @@ !GetScrollableArea().LayerForVerticalScrollbar()) { GetScrollableArea().VerticalScrollbar()->Paint(context, adjusted_cull_rect); } - if (!GetScrollableArea().LayerForScrollCorner()) { // We fill our scroll corner with white if we have a scrollbar that doesn't // run all the way up to the edge of the box. - PaintScrollCorner(context, paint_offset, paint_info.GetCullRect()); + PaintScrollCorner(context, adjusted_paint_offset, paint_info.GetCullRect()); // Paint our resizer last, since it sits on top of the scroll corner. - PaintResizer(context, paint_offset, paint_info.GetCullRect()); + PaintResizer(context, adjusted_paint_offset, paint_info.GetCullRect()); } } -void ScrollableAreaPainter::PaintScrollCorner(GraphicsContext& context, - const IntPoint& paint_offset, - const CullRect& cull_rect) { +bool ScrollableAreaPainter::OverflowControlsIntersectRect( + const CullRect& cull_rect) const { + const IntRect border_box = + GetScrollableArea().GetLayoutBox()->PixelSnappedBorderBoxRect( + GetScrollableArea().Layer()->SubpixelAccumulation()); + + if (cull_rect.Intersects( + GetScrollableArea().RectForHorizontalScrollbar(border_box))) + return true; + + if (cull_rect.Intersects( + GetScrollableArea().RectForVerticalScrollbar(border_box))) + return true; + + if (cull_rect.Intersects(GetScrollableArea().ScrollCornerRect())) + return true; + + if (cull_rect.Intersects(GetScrollableArea().ResizerCornerRect( + border_box, kResizerForPointer))) + return true; + + return false; +} + +void ScrollableAreaPainter::PaintScrollCorner( + GraphicsContext& context, + const IntPoint& paint_offset, + const CullRect& adjusted_cull_rect) { IntRect abs_rect = GetScrollableArea().ScrollCornerRect(); if (abs_rect.IsEmpty()) return; abs_rect.MoveBy(paint_offset); if (const auto* scroll_corner = GetScrollableArea().ScrollCorner()) { - if (!cull_rect.Intersects(abs_rect)) + if (!adjusted_cull_rect.Intersects(abs_rect)) return; ScrollbarPainter::PaintIntoRect(*scroll_corner, context, PhysicalOffset(paint_offset),
diff --git a/third_party/blink/renderer/core/paint/scrollable_area_painter.h b/third_party/blink/renderer/core/paint/scrollable_area_painter.h index 86346c3..d6c884a 100644 --- a/third_party/blink/renderer/core/paint/scrollable_area_painter.h +++ b/third_party/blink/renderer/core/paint/scrollable_area_painter.h
@@ -26,7 +26,10 @@ PaintLayerScrollableArea& paint_layer_scrollable_area) : scrollable_area_(&paint_layer_scrollable_area) {} - void PaintOverflowControls(const PaintInfo&, const IntPoint& paint_offset); + void PaintOverflowControls(const PaintInfo&, + const IntPoint& paint_offset, + bool painting_overlay_controls); + void PaintResizer(GraphicsContext&, const IntPoint& paint_offset, const CullRect&); @@ -36,6 +39,7 @@ private: void DrawPlatformResizerImage(GraphicsContext&, IntRect resizer_corner_rect); + bool OverflowControlsIntersectRect(const CullRect&) const; PaintLayerScrollableArea& GetScrollableArea() const; const DisplayItemClient& DisplayItemClientForCorner() const;
diff --git a/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/index.mjs b/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/index.mjs index 129ab45..6c7be3d 100644 --- a/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/index.mjs +++ b/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/index.mjs
@@ -79,6 +79,7 @@ let thumbElement = this[_containerElement].appendChild(factory.createElement('span')); thumbElement.id = 'thumb'; + thumbElement.part.add('thumb'); this[_rippleElement] = thumbElement.appendChild(factory.createElement('span')); this[_rippleElement].id = 'ripple';
diff --git a/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/style.mjs b/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/style.mjs index 4dea6e8..5f76cbb 100644 --- a/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/style.mjs +++ b/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/style.mjs
@@ -44,11 +44,11 @@ box-sizing: border-box; display: inline-block; margin-inline-start: calc(-100% + ${THUMB_MARGIN_START}); - max-inline-size: ${THUMB_WIDTH}; - min-inline-size: ${THUMB_WIDTH}; + inline-size: ${THUMB_WIDTH}; } -#thumb.transitioning { +/* :host::part(thumbTransitioning) doesn't work. crbug.com/980506 */ +#thumb[part~="thumbTransitioning"] { transition: all linear 0.1s; } @@ -80,7 +80,7 @@ vertical-align: top; } -#trackFill.transitioning { +#trackFill[part~="trackFillTransitioning"] { transition: all linear 0.1s; } @@ -113,8 +113,7 @@ } :host(:not(:disabled):hover) #thumb { - max-inline-size: 26px; - min-inline-size: 26px; + inline-size: 26px; } :host([on]:not(:disabled):hover) #thumb { @@ -163,13 +162,17 @@ * @param {!Element} element */ export function markTransition(element) { - const CLASS_NAME = 'transitioning'; - element.classList.add(CLASS_NAME); + // Should check hasAttribute() to avoid creating a DOMTokenList instance. + if (!element.hasAttribute('part') || element.part.length < 1) { + return; + } + let partName = element.part[0] + 'Transitioning'; + element.part.add(partName); let durations = element.computedStyleMap().getAll('transition-duration'); if (!durations.some(duration => duration.value > 0)) { - // If the element will have no transitions, we remove CLASS_NAME + // If the element will have no transitions, we remove the part name // immediately. - element.classList.remove(CLASS_NAME); + element.part.remove(partName); return; } // If the element will have transitions, initialize counters and listeners @@ -188,7 +191,7 @@ // events; crbug.com/979556. if (e.target === element && element.runningTransitions > 0 && --element.runningTransitions === 0) { - element.classList.remove(CLASS_NAME); + element.part.remove(partName); } }; element.addEventListener('transitionend', handleEndOrCancel);
diff --git a/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/track.mjs b/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/track.mjs index 8fb0a8ac8..3c645c8c 100644 --- a/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/track.mjs +++ b/third_party/blink/renderer/core/script/resources/layered_api/elements/switch/track.mjs
@@ -49,8 +49,10 @@ _initializeDOM(factory) { this[_trackElement] = factory.createElement('div'); this[_trackElement].id = 'track'; + this[_trackElement].part.add('track'); this[_fillElement] = factory.createElement('span'); this[_fillElement].id = 'trackFill'; + this[_fillElement].part.add('trackFill'); this[_trackElement].appendChild(this[_fillElement]); this[_slotElement] = factory.createElement('slot'); this._addSlot();
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index 5c171223..cafab62c 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -235,34 +235,60 @@ return Difference::kEqual; if (!old_style || !new_style) return Difference::kInherited; - if (old_style->Display() != new_style->Display() && - (old_style->IsDisplayFlexibleOrGridBox() || - old_style->IsDisplayLayoutCustomBox() || - old_style->Display() == EDisplay::kContents || - new_style->IsDisplayFlexibleOrGridBox() || - new_style->IsDisplayLayoutCustomBox() || - new_style->Display() == EDisplay::kContents)) { + + // For inline elements, the new computed first line style will be |new_style| + // inheriting from the parent's first line style. If |new_style| is different + // from |old_style|'s cached inherited first line style, the new computed + // first line style may be different from the old even if |new_style| and + // |old_style| equal. Especially if the difference is on inherited properties, + // we need to propagate the difference to descendants. + // See external/wpt/css/css-pseudo/first-line-change-inline-color*.html. + auto inherited_first_line_style_diff = Difference::kEqual; + if (const ComputedStyle* cached_inherited_first_line_style = + old_style->GetCachedPseudoStyle(kPseudoIdFirstLineInherited)) { + DCHECK(!new_style->GetCachedPseudoStyle(kPseudoIdFirstLineInherited)); + inherited_first_line_style_diff = + ComputeDifferenceIgnoringInheritedFirstLineStyle( + *cached_inherited_first_line_style, *new_style); + } + return std::max( + inherited_first_line_style_diff, + ComputeDifferenceIgnoringInheritedFirstLineStyle(*old_style, *new_style)); +} + +ComputedStyle::Difference +ComputedStyle::ComputeDifferenceIgnoringInheritedFirstLineStyle( + const ComputedStyle& old_style, + const ComputedStyle& new_style) { + DCHECK_NE(&old_style, &new_style); + if (old_style.Display() != new_style.Display() && + (old_style.IsDisplayFlexibleOrGridBox() || + old_style.IsDisplayLayoutCustomBox() || + old_style.Display() == EDisplay::kContents || + new_style.IsDisplayFlexibleOrGridBox() || + new_style.IsDisplayLayoutCustomBox() || + new_style.Display() == EDisplay::kContents)) { return Difference::kDisplayAffectingDescendantStyles; } - if (!old_style->NonIndependentInheritedEqual(*new_style)) + if (!old_style.NonIndependentInheritedEqual(new_style)) return Difference::kInherited; - if (!old_style->LoadingCustomFontsEqual(*new_style) || - old_style->JustifyItems() != new_style->JustifyItems()) + if (!old_style.LoadingCustomFontsEqual(new_style) || + old_style.JustifyItems() != new_style.JustifyItems()) return Difference::kInherited; - bool non_inherited_equal = old_style->NonInheritedEqual(*new_style); - if (!non_inherited_equal && old_style->HasExplicitlyInheritedProperties()) { + bool non_inherited_equal = old_style.NonInheritedEqual(new_style); + if (!non_inherited_equal && old_style.HasExplicitlyInheritedProperties()) { return Difference::kInherited; } - if (!old_style->IndependentInheritedEqual(*new_style)) + if (!old_style.IndependentInheritedEqual(new_style)) return Difference::kIndependentInherited; if (non_inherited_equal) { - DCHECK(*old_style == *new_style); - if (PseudoStylesEqual(*old_style, *new_style)) + DCHECK(old_style == new_style); + if (PseudoStylesEqual(old_style, new_style)) return Difference::kEqual; return Difference::kPseudoStyle; } - if (new_style->HasAnyPublicPseudoStyles() || - old_style->HasAnyPublicPseudoStyles()) + if (new_style.HasAnyPublicPseudoStyles() || + old_style.HasAnyPublicPseudoStyles()) return Difference::kPseudoStyle; return Difference::kNonInherited; } @@ -459,7 +485,7 @@ } const ComputedStyle* ComputedStyle::AddCachedPseudoStyle( - scoped_refptr<ComputedStyle> pseudo) const { + scoped_refptr<const ComputedStyle> pseudo) const { DCHECK(pseudo); DCHECK_GT(pseudo->StyleType(), kPseudoIdNone);
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h index cec12c8b6..f5ebe21 100644 --- a/third_party/blink/renderer/core/style/computed_style.h +++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -87,7 +87,7 @@ class StyleSelfAlignmentData; class TransformationMatrix; -typedef Vector<scoped_refptr<ComputedStyle>, 4> PseudoStyleCache; +typedef Vector<scoped_refptr<const ComputedStyle>, 4> PseudoStyleCache; namespace css_longhand { @@ -364,11 +364,18 @@ IsAtShadowBoundary = kNotAtShadowBoundary); void CopyNonInheritedFromCached(const ComputedStyle&); - PseudoId StyleType() const { return static_cast<PseudoId>(StyleTypeInternal()); } + PseudoId StyleType() const { + return static_cast<PseudoId>(StyleTypeInternal()); + } void SetStyleType(PseudoId style_type) { SetStyleTypeInternal(style_type); } const ComputedStyle* GetCachedPseudoStyle(PseudoId) const; - const ComputedStyle* AddCachedPseudoStyle(scoped_refptr<ComputedStyle>) const; + const ComputedStyle* AddCachedPseudoStyle( + scoped_refptr<const ComputedStyle>) const; + void ClearCachedPseudoStyles() const { + if (cached_pseudo_styles_) + cached_pseudo_styles_->clear(); + } /** * ComputedStyle properties @@ -2678,6 +2685,10 @@ Top(), Right(), Bottom(), Left()); } + static Difference ComputeDifferenceIgnoringInheritedFirstLineStyle( + const ComputedStyle& old_style, + const ComputedStyle& new_style); + FRIEND_TEST_ALL_PREFIXES( ComputedStyleTest, UpdatePropertySpecificDifferencesRespectsTransformAnimation);
diff --git a/third_party/blink/renderer/core/style/style_difference.h b/third_party/blink/renderer/core/style/style_difference.h index b3cf6266..9129296 100644 --- a/third_party/blink/renderer/core/style/style_difference.h +++ b/third_party/blink/renderer/core/style/style_difference.h
@@ -44,6 +44,20 @@ scroll_anchor_disabling_property_changed_(false), compositing_reasons_changed_(false) {} + void Merge(StyleDifference other) { + paint_invalidation_type_ = + std::max(paint_invalidation_type_, other.paint_invalidation_type_); + layout_type_ = std::max(layout_type_, other.layout_type_); + needs_collect_inlines_ |= other.needs_collect_inlines_; + needs_reshape_ |= other.needs_reshape_; + recompute_overflow_ |= other.recompute_overflow_; + visual_rect_update_ |= other.visual_rect_update_; + property_specific_differences_ |= other.property_specific_differences_; + scroll_anchor_disabling_property_changed_ |= + other.scroll_anchor_disabling_property_changed_; + compositing_reasons_changed_ |= other.compositing_reasons_changed_; + } + bool HasDifference() const { return paint_invalidation_type_ || layout_type_ || needs_collect_inlines_ || needs_reshape_ || property_specific_differences_ ||
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc index 4a2118df..ca59e6d 100644 --- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc +++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
@@ -710,7 +710,7 @@ void SVGSMILElement::AddInstanceTime(BeginOrEnd begin_or_end, SMILTime time, SMILTimeWithOrigin::Origin origin) { - SMILTime elapsed = this->Elapsed(); + SMILTime elapsed = Elapsed(); if (elapsed.IsUnresolved()) return; SMILTimeWithOrigin time_with_origin(time, origin); @@ -788,8 +788,8 @@ preliminary_active_duration = std::min(RepeatingDuration(), resolved_end - resolved_begin); - SMILTime min_value = this->MinValue(); - SMILTime max_value = this->MaxValue(); + SMILTime min_value = MinValue(); + SMILTime max_value = MaxValue(); if (min_value > max_value) { // Ignore both. // http://www.w3.org/TR/2001/REC-smil-animation-20010904/#MinMax @@ -903,7 +903,7 @@ } void SVGSMILElement::EndListChanged(SMILTime) { - SMILTime elapsed = this->Elapsed(); + SMILTime elapsed = Elapsed(); if (is_waiting_for_first_interval_) { ResolveFirstInterval(); } else if (elapsed < interval_.end && interval_.begin.IsFinite()) { @@ -1048,7 +1048,7 @@ if (GetActiveState() == kActive) { // If duration is indefinite the value does not actually change over time. // Same is true for <set>. - SMILTime simple_duration = this->SimpleDuration(); + SMILTime simple_duration = SimpleDuration(); if (simple_duration.IsIndefinite() || IsSVGSetElement(*this)) { SMILTime repeating_duration_end = interval_.begin + RepeatingDuration(); // We are supposed to do freeze semantics when repeating ends, even if the @@ -1151,7 +1151,8 @@ float percent = CalculateAnimationPercent(elapsed); unsigned repeat = CalculateAnimationRepeat(elapsed); - bool restarted_interval = MaybeRestartInterval(elapsed); + bool restarted_interval = + MaybeRestartInterval(elapsed) == RestartedInterval::kDidRestartInterval; ActiveState old_active_state = GetActiveState(); active_state_ = DetermineActiveState(elapsed);
diff --git a/third_party/blink/renderer/core/svg/graphics/filters/svg_filter_builder.cc b/third_party/blink/renderer/core/svg/graphics/filters/svg_filter_builder.cc index f704944..a2080f07 100644 --- a/third_party/blink/renderer/core/svg/graphics/filters/svg_filter_builder.cc +++ b/third_party/blink/renderer/core/svg/graphics/filters/svg_filter_builder.cc
@@ -96,7 +96,7 @@ effect->DisposeImageFilters(); - FilterEffectSet& effect_references = this->EffectReferences(effect); + FilterEffectSet& effect_references = EffectReferences(effect); for (FilterEffect* effect_reference : effect_references) InvalidateDependentEffects(effect_reference); }
diff --git a/third_party/blink/renderer/core/svg/svg_animation_element.cc b/third_party/blink/renderer/core/svg/svg_animation_element.cc index a1aa8f4..d13f760b 100644 --- a/third_party/blink/renderer/core/svg/svg_animation_element.cc +++ b/third_party/blink/renderer/core/svg/svg_animation_element.cc
@@ -469,7 +469,7 @@ return; } - CalcMode calc_mode = this->GetCalcMode(); + CalcMode calc_mode = GetCalcMode(); if (IsSVGAnimateElement(*this)) { SVGAnimateElement& animate_element = ToSVGAnimateElement(*this); if (!animate_element.AnimatedPropertyTypeSupportsAddition()) @@ -527,8 +527,8 @@ key_points_.size() != key_times_.size()) return; - AnimationMode animation_mode = this->GetAnimationMode(); - CalcMode calc_mode = this->GetCalcMode(); + AnimationMode animation_mode = GetAnimationMode(); + CalcMode calc_mode = GetCalcMode(); if (calc_mode == kCalcModeSpline) { unsigned splines_count = key_splines_.size(); if (!splines_count || @@ -601,8 +601,8 @@ return; float effective_percent; - CalcMode calc_mode = this->GetCalcMode(); - AnimationMode animation_mode = this->GetAnimationMode(); + CalcMode calc_mode = GetCalcMode(); + AnimationMode animation_mode = GetAnimationMode(); if (animation_mode == kValuesAnimation) { String from; String to;
diff --git a/third_party/blink/renderer/core/svg/svg_clip_path_element.cc b/third_party/blink/renderer/core/svg/svg_clip_path_element.cc index 9767ed1..676b342 100644 --- a/third_party/blink/renderer/core/svg/svg_clip_path_element.cc +++ b/third_party/blink/renderer/core/svg/svg_clip_path_element.cc
@@ -46,7 +46,7 @@ SVGElement::InvalidationGuard invalidation_guard(this); LayoutSVGResourceContainer* layout_object = - ToLayoutSVGResourceContainer(this->GetLayoutObject()); + ToLayoutSVGResourceContainer(GetLayoutObject()); if (layout_object) layout_object->InvalidateCacheAndMarkForLayout(); return;
diff --git a/third_party/blink/renderer/core/svg/svg_element.cc b/third_party/blink/renderer/core/svg/svg_element.cc index 664b43e..4105e7b6 100644 --- a/third_party/blink/renderer/core/svg/svg_element.cc +++ b/third_party/blink/renderer/core/svg/svg_element.cc
@@ -583,7 +583,7 @@ &in_relative_length_clients_invalidation_, true); #endif - if (LayoutObject* layout_object = this->GetLayoutObject()) { + if (LayoutObject* layout_object = GetLayoutObject()) { if (HasRelativeLengths() && layout_object->IsSVGResourceContainer()) { ToLayoutSVGResourceContainer(layout_object) ->InvalidateCacheAndMarkForLayout(
diff --git a/third_party/blink/renderer/core/svg/svg_mask_element.cc b/third_party/blink/renderer/core/svg/svg_mask_element.cc index 827e479..e194b0f 100644 --- a/third_party/blink/renderer/core/svg/svg_mask_element.cc +++ b/third_party/blink/renderer/core/svg/svg_mask_element.cc
@@ -130,7 +130,7 @@ } LayoutSVGResourceContainer* layout_object = - ToLayoutSVGResourceContainer(this->GetLayoutObject()); + ToLayoutSVGResourceContainer(GetLayoutObject()); if (layout_object) layout_object->InvalidateCacheAndMarkForLayout();
diff --git a/third_party/blink/renderer/core/svg/svg_parsing_error.h b/third_party/blink/renderer/core/svg/svg_parsing_error.h index 03affa67..5ddcde5 100644 --- a/third_party/blink/renderer/core/svg/svg_parsing_error.h +++ b/third_party/blink/renderer/core/svg/svg_parsing_error.h
@@ -68,7 +68,7 @@ SVGParsingError(SVGParseStatus status = SVGParseStatus::kNoError, size_t locus = 0) : status_(static_cast<unsigned>(status)), locus_(CheckLocus(locus)) { - DCHECK_EQ(this->Status(), status); + DCHECK_EQ(Status(), status); } SVGParseStatus Status() const { return static_cast<SVGParseStatus>(status_); }
diff --git a/third_party/blink/renderer/core/svg/svg_path_element.cc b/third_party/blink/renderer/core/svg/svg_path_element.cc index cb1383fe..c4f1cdf 100644 --- a/third_party/blink/renderer/core/svg/svg_path_element.cc +++ b/third_party/blink/renderer/core/svg/svg_path_element.cc
@@ -47,7 +47,7 @@ } const StylePath* SVGPathElement::GetStylePath() const { - if (LayoutObject* layout_object = this->GetLayoutObject()) { + if (LayoutObject* layout_object = GetLayoutObject()) { const StylePath* style_path = layout_object->StyleRef().SvgStyle().D(); if (style_path) return style_path; @@ -99,7 +99,7 @@ MutableCSSPropertyValueSet* style) { SVGAnimatedPropertyBase* property = PropertyFromAttribute(name); if (property == path_) { - SVGAnimatedPath* path = this->GetPath(); + SVGAnimatedPath* path = GetPath(); // If this is a <use> instance, return the referenced path to maximize // geometry sharing. if (const SVGElement* element = CorrespondingElement())
diff --git a/third_party/blink/renderer/core/svg/svg_svg_element.cc b/third_party/blink/renderer/core/svg/svg_svg_element.cc index 3ca5f74..42aa9532 100644 --- a/third_party/blink/renderer/core/svg/svg_svg_element.cc +++ b/third_party/blink/renderer/core/svg/svg_svg_element.cc
@@ -249,7 +249,7 @@ // height attributes can affect the replaced size so we need // to mark it for updating. if (width_or_height_changed) { - LayoutObject* layout_object = this->GetLayoutObject(); + LayoutObject* layout_object = GetLayoutObject(); // If the element is not attached, we cannot be sure if it is (going to // be) an outermost root, so always mark presentation attributes dirty in // that case. @@ -451,7 +451,7 @@ transform.Translate(x_->CurrentValue()->Value(length_context), y_->CurrentValue()->Value(length_context)); } else if (mode == kScreenScope) { - if (LayoutObject* layout_object = this->GetLayoutObject()) { + if (LayoutObject* layout_object = GetLayoutObject()) { TransformationMatrix matrix; // Adjust for the zoom level factored into CSS coordinates (WK bug // #96361).
diff --git a/third_party/blink/renderer/core/timing/performance_entry_names.json5 b/third_party/blink/renderer/core/timing/performance_entry_names.json5 index e6d0782..318edbd1 100644 --- a/third_party/blink/renderer/core/timing/performance_entry_names.json5 +++ b/third_party/blink/renderer/core/timing/performance_entry_names.json5
@@ -7,9 +7,9 @@ data: [ "element", "event", - "firstInput", - "largestContentfulPaint", - "layoutShift", + "first-input", + "largest-contentful-paint", + "layout-shift", "longtask", "mark", "measure",
diff --git a/third_party/blink/renderer/core/timing/performance_observer_test.cc b/third_party/blink/renderer/core/timing/performance_observer_test.cc index 62094a6a..78c50da 100644 --- a/third_party/blink/renderer/core/timing/performance_observer_test.cc +++ b/third_party/blink/renderer/core/timing/performance_observer_test.cc
@@ -69,7 +69,7 @@ NonThrowableExceptionState exception_state; PerformanceObserverInit* options = PerformanceObserverInit::Create(); - options->setType("layoutShift"); + options->setType("layout-shift"); options->setBuffered(true); EXPECT_EQ(0, NumPerformanceEntries());
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc index b8fe4cfc..99336cd 100644 --- a/third_party/blink/renderer/core/timing/window_performance.cc +++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -414,7 +414,7 @@ PerformanceEventTiming* entry) { if (!entry) return; - DCHECK_EQ("firstInput", entry->entryType()); + DCHECK_EQ("first-input", entry->entryType()); if (HasObserverFor(PerformanceEntry::kFirstInput)) { UseCounter::Count(GetExecutionContext(), WebFeature::kEventTimingExplicitlyRequested);
diff --git a/third_party/blink/renderer/core/timing/window_performance_test.cc b/third_party/blink/renderer/core/timing/window_performance_test.cc index 5f6cb7b..3981098 100644 --- a/third_party/blink/renderer/core/timing/window_performance_test.cc +++ b/third_party/blink/renderer/core/timing/window_performance_test.cc
@@ -342,7 +342,7 @@ performance_->getEntriesByName("click", "event").size()); } -// Test for existence of 'firstInput' given different types of first events. +// Test for existence of 'first-input' given different types of first events. TEST_F(WindowPerformanceTest, FirstInput) { struct { AtomicString event_type; @@ -352,14 +352,14 @@ {"mousedown", true}, {"mousemove", false}, {"mouseover", false}}; for (const auto& input : inputs) { - // firstInput does not have a |duration| threshold so use close values. + // first-input does not have a |duration| threshold so use close values. performance_->RegisterEventTiming( input.event_type, GetTimeOrigin(), GetTimeOrigin() + base::TimeDelta::FromMilliseconds(1), GetTimeOrigin() + base::TimeDelta::FromMilliseconds(2), false); SimulateSwapPromise(GetTimeOrigin() + base::TimeDelta::FromMilliseconds(3)); PerformanceEntryVector firstInputs = - performance_->getEntriesByType("firstInput"); + performance_->getEntriesByType("first-input"); EXPECT_GE(1u, firstInputs.size()); EXPECT_EQ(input.should_report, firstInputs.size() == 1u); ResetPerformance(); @@ -377,9 +377,9 @@ GetTimeOrigin() + base::TimeDelta::FromMilliseconds(2), false); } SimulateSwapPromise(GetTimeOrigin() + base::TimeDelta::FromMilliseconds(3)); - ASSERT_EQ(1u, performance_->getEntriesByType("firstInput").size()); + ASSERT_EQ(1u, performance_->getEntriesByType("first-input").size()); EXPECT_EQ("mousedown", - performance_->getEntriesByType("firstInput")[0]->name()); + performance_->getEntriesByType("first-input")[0]->name()); } // Test that pointerdown followed by pointerup works as a 'firstInput'. @@ -394,14 +394,14 @@ performance_->RegisterEventTiming("pointerdown", start_time, processing_start, processing_end, false); SimulateSwapPromise(swap_time); - EXPECT_EQ(0u, performance_->getEntriesByType("firstInput").size()); + EXPECT_EQ(0u, performance_->getEntriesByType("first-input").size()); performance_->RegisterEventTiming("pointerup", start_time, processing_start, processing_end, false); SimulateSwapPromise(swap_time); - EXPECT_EQ(1u, performance_->getEntriesByType("firstInput").size()); + EXPECT_EQ(1u, performance_->getEntriesByType("first-input").size()); // The name of the entry should be "pointerdown". - EXPECT_EQ(1u, - performance_->getEntriesByName("pointerdown", "firstInput").size()); + EXPECT_EQ( + 1u, performance_->getEntriesByName("pointerdown", "first-input").size()); } } // namespace blink
diff --git a/third_party/blink/renderer/devtools/front_end/Images/mediumIcons.svg b/third_party/blink/renderer/devtools/front_end/Images/mediumIcons.svg index db69efe..94635fb 100644 --- a/third_party/blink/renderer/devtools/front_end/Images/mediumIcons.svg +++ b/third_party/blink/renderer/devtools/front_end/Images/mediumIcons.svg
@@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="96"><defs><linearGradient id="a"><stop offset="0" stop-color="#d7687d"/><stop offset="1" stop-color="#b21402"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#606eda"/><stop offset="1" stop-color="#021db2"/></linearGradient><linearGradient xlink:href="#a" id="m" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 -.41667 -.41667 0 25 10)" x2="24"/><linearGradient xlink:href="#b" id="k" gradientUnits="userSpaceOnUse" gradientTransform="translate(-.714 -69.286) scale(.71429)" x1="113" y1="104" x2="127" y2="104"/></defs><path d="M3 36h10v9.008A1.99 1.99 0 0 1 11 47H5c-1.105 0-2-.9-2-1.992zm-1-2h12v1H2zm3-1h6v1H5zM29.526 38.25h-1.474v-.75c0-.414-.33-.75-.737-.75h-1.473V36c0-.414-.33-.75-.737-.75h-.737v-1.5a.743.743 0 0 0-.494-.7.494.494 0 0 0-.243-.05C19.968 33 17 36.022 17 39.75s2.968 6.75 6.631 6.75c3.663 0 6.632-3.022 6.632-6.75V39c0-.414-.33-.75-.737-.75zm-9.947 2.25c-.611 0-1.106-.503-1.106-1.125s.495-1.125 1.106-1.125c.61 0 1.105.503 1.105 1.125s-.495 1.125-1.105 1.125zm1.105-4.125c0-.622.495-1.125 1.105-1.125.611 0 1.105.503 1.105 1.125 0 .621-.494 1.125-1.105 1.125-.61 0-1.105-.504-1.105-1.125zM22.894 45c-.61 0-1.105-.503-1.105-1.125 0-.62.495-1.125 1.105-1.125.611 0 1.106.504 1.106 1.125 0 .622-.495 1.125-1.106 1.125zm.369-3.75c-.61 0-1.105-.504-1.105-1.125S22.653 39 23.263 39s1.105.504 1.105 1.125-.495 1.125-1.105 1.125zm3.684 1.5c-.61 0-1.105-.504-1.105-1.125s.495-1.125 1.105-1.125 1.105.504 1.105 1.125-.495 1.125-1.105 1.125z" fill="#212121"/><path d="M40 38c3.314 0 6-.895 6-2s-2.686-2-6-2-6 .895-6 2 2.686 2 6 2zm-6 7c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2zm0-3c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2zm0-3c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2z"/><g fill="none"><path d="M48 32h16v16H48z"/><path d="M57 33h-5.005c-.54 0-.995.45-.995 1.007v11.986A1 1 0 0 0 51.995 47h8.01c.54 0 .995-.451.995-1.007V37l-4-4zm3.29 4H57v-3.29z" fill="#000"/></g><path d="M6.5 51.229V49h3v2.229a4.994 4.994 0 0 1 1.88 1.087l1.932-1.115 1.5 2.598-1.93 1.115a5.018 5.018 0 0 1 0 2.173l1.93 1.114-1.5 2.598-1.931-1.115A4.995 4.995 0 0 1 9.5 60.771v2.23h-3v-2.23a4.994 4.994 0 0 1-1.88-1.087L2.687 60.8l-1.5-2.598 1.93-1.114a5.018 5.018 0 0 1 0-2.173l-1.93-1.115 1.5-2.598 1.931 1.115A4.995 4.995 0 0 1 6.5 51.23zM8 58.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM18 51.999a1 1 0 0 1 .99-.999H24v3h-6v-2.001zM18 59h6v3h-5.01a.992.992 0 0 1-.99-.999V59zm0-4h6v3h-6zm7-4h5.01c.546 0 .99.443.99.999V54h-6v-3zm0 8h6v2.001a1 1 0 0 1-.99.999H25v-3zm0-4h6v3h-6z" fill="#212121"/><path d="M39.5 61a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zm0-2.2v-2.2h-3.3v-2.2h3.3v-2.2l3.3 3.3z"/><g transform="translate(-26 25)"><circle transform="matrix(1.2 0 0 1.2 72.4 21.2)" cx="10.5" cy="11.5" r="2.5" fill="#009802"/><path d="M78 25c-.544 0-1 .45-1 1v8c0 .54.45 1 1 1h3.031a3.533 3.533 0 0 1-.031-.5c0-.17.008-.337.031-.5H78v-8h3v3h3v1.5c.163-.023.33 0 .5 0 .17 0 .337-.023.5 0V28l-3-3zm4 1l2 2h-2z"/></g><path d="M8 66H3.997a1 1 0 0 0-.997.995v8.01c0 .54.446.995.997.995h6.006a1 1 0 0 0 .997-.995V69l-3-3zm0 1l2 2H8zm-4 0h3v3h3v5H4z"/><path d="M17 71.5a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0" fill="#9f9f9f"/><path d="M27 69.43l-.93-.93-2.57 2.57-2.57-2.57-.93.93L22.57 72 20 74.57l.93.93 2.57-2.57 2.57 2.57.93-.93L24.43 72z" fill-opacity=".36"/><path d="M27 68.93l-.93-.93-2.57 2.57L20.93 68l-.93.93 2.57 2.57L20 74.07l.93.93 2.57-2.57L26.07 75l.93-.93-2.57-2.57z" fill="#fff"/><path d="M33 71.5a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0" fill="#bebebe"/><path d="M43 69.43l-.93-.93-2.57 2.57-2.57-2.57-.93.93L38.57 72 36 74.57l.93.93 2.57-2.57 2.57 2.57.93-.93L40.43 72z" fill-opacity=".37"/><path d="M43 68.93l-.93-.93-2.57 2.57L36.93 68l-.93.93 2.57 2.57L36 74.07l.93.93 2.57-2.57L42.07 75l.93-.93-2.57-2.57z" fill="#fff"/><g transform="translate(49 65)"><path transform="translate(-111 -96)" d="M118 96c-3.87 0-7 3.13-7 7s3.13 7 7 7 7-3.13 7-7-3.13-7-7-7" fill="url(#c)"/><path d="M.5 7a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0" fill="#f27d82"/><path d="M10.5 4.93L9.57 4 7 6.57 4.43 4l-.93.93L6.07 7.5 3.5 10.07l.93.93L7 8.43 9.57 11l.93-.93L7.93 7.5z" fill-opacity=".36"/><path d="M10.5 4.43l-.93-.93L7 6.07 4.43 3.5l-.93.93L6.07 7 3.5 9.57l.93.93L7 7.93l2.57 2.57.93-.93L7.93 7z" fill="#fff"/><defs><linearGradient id="d"><stop stop-color="#d7687d" offset="0"/><stop stop-color="#b21402" offset="1"/></linearGradient><linearGradient id="c" x2="24" gradientTransform="matrix(0 -.58333 -.58333 0 118 110)" gradientUnits="userSpaceOnUse" xlink:href="#d"/></defs></g><g transform="translate(1 81)"><path transform="translate(-96 -96)" d="M103 110c3.87 0 7-3.13 7-7s-3.13-7-7-7-7 3.13-7 7 3.13 7 7 7" fill="url(#e)"/><path transform="translate(-96 -96)" d="M103 96.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13" fill="url(#f)"/><path d="M10.5 4.93L9.57 4 7 6.57 4.43 4l-.93.93L6.07 7.5 3.5 10.07l.93.93L7 8.43 9.57 11l.93-.93L7.93 7.5z" fill="#993c35"/><path d="M10.5 4.43l-.93-.93L7 6.07 4.43 3.5l-.93.93L6.07 7 3.5 9.57l.93.93L7 7.93l2.57 2.57.93-.93L7.93 7z" fill="#fff"/><defs><linearGradient id="f" x1="96.5" x2="109.5" y1="103" y2="103" gradientTransform="rotate(90 103 103)" gradientUnits="userSpaceOnUse" xlink:href="#g"/><linearGradient id="g"><stop stop-color="#e59290" offset="0"/><stop stop-color="#e99890" offset="1"/></linearGradient><linearGradient id="e" x1="113" x2="127" y1="104" y2="104" gradientTransform="rotate(90 112 95)" gradientUnits="userSpaceOnUse" xlink:href="#h"/><linearGradient id="h"><stop stop-color="#c0544f" offset="0"/><stop stop-color="#d08481" offset="1"/></linearGradient></defs></g><path d="M26.27 90.92a4.5 4.5 0 1 1 .73-.684l2.346 2.346-.707.707zm-2.692-.106a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7z" fill="#5b5b5b"/><text style="line-height:0%" x="-11.403" y="91.208" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.403" y="91.208" style="line-height:1.25" font-size="10">1</tspan></text><text style="line-height:0%" x="-11.144" y="75.675" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.144" y="75.675" style="line-height:1.25" font-size="10">2</tspan></text><text style="line-height:0%" x="-11.066" y="60.143" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.066" y="60.143" style="line-height:1.25" font-size="10">3</tspan></text><text style="line-height:0%" x="-11.266" y="44.611" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.266" y="44.611" style="line-height:1.25" font-size="10">4</tspan></text><text style="line-height:0%" x="5.935" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="5.935" y="108.082" style="line-height:1.25" font-size="10">a</tspan></text><text style="line-height:0%" x="21.659" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="21.659" y="108.082" style="line-height:1.25" font-size="10">b</tspan></text><text style="line-height:0%" x="37.384" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="37.384" y="108.082" style="line-height:1.25" font-size="10">c</tspan></text><text style="line-height:0%" x="53.108" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="53.108" y="108.082" style="line-height:1.25" font-size="10">d</tspan></text><g fill="none"><path d="M48 96H32V80h16z"/><path d="M40 81c-3.864 0-7 3.136-7 7s3.136 7 7 7 7-3.136 7-7-3.136-7-7-7zm-5.5 7c0-3.032 2.468-5.5 5.5-5.5s5.5 2.468 5.5 5.5-2.468 5.5-5.5 5.5a5.507 5.507 0 0 1-5.5-5.5zm6.5 4v-5h-2v5zm-2-6h2v-2h-2z" fill="#000"/></g><g transform="matrix(1.39974 0 0 1.39343 65.054 81.02)" mask="url(#i)"><path d="M1 9l4-8 4 8z" stroke="#c19600" stroke-width="2" stroke-linejoin="round"/><path d="M1 9l4-8 4 8z" fill="#f4bd00" stroke="#f5bd00" stroke-width="1.5" stroke-linejoin="round"/><path d="M3.75 2.75h2.5v2.5L5.75 7h-1.5l-.5-1.75v-2.5m0 5.25h2.5v1.25h-2.5" fill="#ad8601"/><mask id="i"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-60)" d="M64 3h2v2.25L65.5 7h-1L64 5.25V3m0 5h2v1h-2"/></mask></g><g transform="matrix(1.36 0 0 1.34 65.3 65.5)" mask="url(#j)"><path transform="translate(-80)" d="M85 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#k)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#2a53cd"/><mask id="j"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-80)" d="M83.93 2.14c-.03-.53.55-.97 1.06-.83.5.12.79.73.56 1.18-.2.44-.79.61-1.2.36a.812.812 0 0 1-.42-.71zm1.7 5.46h.67v.53h-2.89V7.6h.66V3.99h-.66v-.53h2.22z"/></mask></g><g transform="matrix(1.37 0 0 1.36 65.2 49.3)" mask="url(#l)"><path transform="translate(-20)" d="M25 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#m)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#eb3941"/><mask id="l"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-20)" d="M23 3l4 4M27 3l-4 4" stroke="#000"/></mask></g><path d="M72 33.333A6.67 6.67 0 0 0 65.333 40 6.67 6.67 0 0 0 72 46.667 6.67 6.67 0 0 0 78.667 40 6.67 6.67 0 0 0 72 33.333zm0 2c1.107 0 2 .894 2 2 0 1.107-.893 2-2 2s-2-.893-2-2c0-1.106.893-2 2-2zm0 9.467a4.8 4.8 0 0 1-4-2.147c.02-1.326 2.667-2.053 4-2.053 1.327 0 3.98.727 4 2.053a4.8 4.8 0 0 1-4 2.147z"/><path d="M64 32h16v16H64z" fill="none"/><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="-10.738" y="28.118" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".373"><tspan x="-10.738" y="28.118" style="line-height:1.25" font-size="10">5</tspan></text><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="68.649" y="107.697" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".351"><tspan x="68.649" y="107.697" style="line-height:1.25" font-size="10">e</tspan></text><path d="M65.25 24.75h1.5v-1.5h-1.5zm0 3h1.5v-1.5h-1.5zm0-6h1.5v-1.5h-1.5zm3 3h10.5v-1.5h-10.5zm0 3h10.5v-1.5h-10.5zm0-7.5v1.5h10.5v-1.5z"/><path d="M63 15h18v18H63zM47 79h18v18H47z" fill="none"/><path d="M62 85h-2.107a4.489 4.489 0 0 0-1.366-1.47l1.223-1.222-1.058-1.058-1.627 1.627a4.439 4.439 0 0 0-2.122 0l-1.635-1.627-1.058 1.058 1.215 1.222A4.547 4.547 0 0 0 52.108 85H50v1.5h1.568a4.978 4.978 0 0 0-.068.75V88H50v1.5h1.5v.75c0 .255.03.503.068.75H50v1.5h2.108A4.498 4.498 0 0 0 56 94.75a4.498 4.498 0 0 0 3.893-2.25H62V91h-1.567c.037-.248.067-.495.067-.75v-.75H62V88h-1.5v-.75c0-.255-.03-.503-.067-.75H62zm-4.5 6h-3v-1.5h3zm0-3h-3v-1.5h3z"/><g fill="none"><path opacity=".2" d="M48 16h16v16H48z"/><path d="M48.5 30h15L56 17zm8.5-2h-2v-2h2zm0-3h-2v-3h2z" fill="#000"/></g><text style="line-height:0%" x="32.47" y="23.902" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="32.47" y="23.902" style="line-height:1.25" font-weight="700" font-size="10">A</tspan></text><text style="line-height:0%" x="40.363" y="31.525" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="40.363" y="31.525" style="line-height:1.25" font-weight="700" font-size="10">B</tspan></text><path d="M37.955 29.089c-1.915-.292-2.12-.9-2.237-4.13h-1.22c.047 3.856.062 5.297 5.736 5.258l.316-.014-2.595-2.996a39.95 39.95 0 0 0 0 1.882z"/><g fill="none" fill-rule="evenodd"><path d="M0 16h16v16H0z"/><g fill="#000" fill-rule="nonzero"><path d="M9.58 27.313l1.417 1.294c-.86.577-1.89.913-2.997.913-3.004 0-5.44-2.471-5.44-5.52 0-.917.22-1.782.61-2.543l1.417 1.294c-.138.39-.214.81-.214 1.249 0 2.032 1.624 3.68 3.627 3.68.567 0 1.103-.132 1.58-.367zm1.826-2.046c.143-.395.22-.822.22-1.267 0-2.032-1.623-3.68-3.626-3.68-.573 0-1.116.135-1.598.375l-1.414-1.292A5.36 5.36 0 0 1 8 18.48c3.004 0 5.44 2.471 5.44 5.52 0 .924-.224 1.795-.619 2.56z"/><path d="M8 25.84v5.52l3.022-2.76zM8 22.16v-5.52L4.978 19.4z"/></g></g><g fill="none" fill-rule="evenodd"><path fill="#000" d="M20 20h2v6h-2zM26 22h2v6h-2z"/><path fill="#000" fill-rule="nonzero" d="M24.667 20.667l-3.667-4-3.667 4h4.584zM23.333 27.333l3.667 4 3.667-4h-4.584z"/><path d="M16 16h16v16H16z"/></g><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="-10.547" y="11.352" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".373"><tspan x="-10.547" y="11.352" style="line-height:1.25" font-size="10">6</tspan></text><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="85.725" y="108.235" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".351"><tspan x="85.725" y="108.235" style="line-height:1.25" font-size="10">f</tspan></text><g><path d="M1 1h14v14H1z" fill="none"/><path d="M12.287 6.857A4.37 4.37 0 0 0 4.121 5.69 3.497 3.497 0 0 0 1 9.167c0 1.93 1.57 3.5 3.5 3.5h7.583A2.918 2.918 0 0 0 15 9.75a2.903 2.903 0 0 0-2.713-2.893z"/></g><g><path d="M24.044 15a1.44 1.44 0 0 0 1.435-1.436h-2.871c0 .79.639 1.436 1.436 1.436zm4.307-4.308v-3.59c0-2.204-1.177-4.049-3.23-4.537v-.488C25.12 1.48 24.639 1 24.044 1c-.596 0-1.077.481-1.077 1.077v.488c-2.06.488-3.231 2.326-3.231 4.538v3.59L18.3 12.127v.718h11.487v-.718z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="96"><defs><linearGradient id="a"><stop offset="0" stop-color="#d7687d"/><stop offset="1" stop-color="#b21402"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#606eda"/><stop offset="1" stop-color="#021db2"/></linearGradient><linearGradient xlink:href="#a" id="m" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 -.41667 -.41667 0 25 10)" x2="24"/><linearGradient xlink:href="#b" id="k" gradientUnits="userSpaceOnUse" gradientTransform="translate(-.714 -69.286) scale(.71429)" x1="113" y1="104" x2="127" y2="104"/></defs><path d="M3 36h10v9.008A1.99 1.99 0 0 1 11 47H5c-1.105 0-2-.9-2-1.992zm-1-2h12v1H2zm3-1h6v1H5zM29.526 38.25h-1.474v-.75c0-.414-.33-.75-.737-.75h-1.473V36c0-.414-.33-.75-.737-.75h-.737v-1.5a.743.743 0 0 0-.494-.7.494.494 0 0 0-.243-.05C19.968 33 17 36.022 17 39.75s2.968 6.75 6.631 6.75c3.663 0 6.632-3.022 6.632-6.75V39c0-.414-.33-.75-.737-.75zm-9.947 2.25c-.611 0-1.106-.503-1.106-1.125s.495-1.125 1.106-1.125c.61 0 1.105.503 1.105 1.125s-.495 1.125-1.105 1.125zm1.105-4.125c0-.622.495-1.125 1.105-1.125.611 0 1.105.503 1.105 1.125 0 .621-.494 1.125-1.105 1.125-.61 0-1.105-.504-1.105-1.125zM22.894 45c-.61 0-1.105-.503-1.105-1.125 0-.62.495-1.125 1.105-1.125.611 0 1.106.504 1.106 1.125 0 .622-.495 1.125-1.106 1.125zm.369-3.75c-.61 0-1.105-.504-1.105-1.125S22.653 39 23.263 39s1.105.504 1.105 1.125-.495 1.125-1.105 1.125zm3.684 1.5c-.61 0-1.105-.504-1.105-1.125s.495-1.125 1.105-1.125 1.105.504 1.105 1.125-.495 1.125-1.105 1.125z" fill="#212121"/><path d="M40 38c3.314 0 6-.895 6-2s-2.686-2-6-2-6 .895-6 2 2.686 2 6 2zm-6 7c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2zm0-3c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2zm0-3c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2z"/><g fill="none"><path d="M48 32h16v16H48z"/><path d="M57 33h-5.005c-.54 0-.995.45-.995 1.007v11.986A1 1 0 0 0 51.995 47h8.01c.54 0 .995-.451.995-1.007V37l-4-4zm3.29 4H57v-3.29z" fill="#000"/></g><path d="M6.5 51.229V49h3v2.229a4.994 4.994 0 0 1 1.88 1.087l1.932-1.115 1.5 2.598-1.93 1.115a5.018 5.018 0 0 1 0 2.173l1.93 1.114-1.5 2.598-1.931-1.115A4.995 4.995 0 0 1 9.5 60.771v2.23h-3v-2.23a4.994 4.994 0 0 1-1.88-1.087L2.687 60.8l-1.5-2.598 1.93-1.114a5.018 5.018 0 0 1 0-2.173l-1.93-1.115 1.5-2.598 1.931 1.115A4.995 4.995 0 0 1 6.5 51.23zM8 58.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM18 51.999a1 1 0 0 1 .99-.999H24v3h-6v-2.001zM18 59h6v3h-5.01a.992.992 0 0 1-.99-.999V59zm0-4h6v3h-6zm7-4h5.01c.546 0 .99.443.99.999V54h-6v-3zm0 8h6v2.001a1 1 0 0 1-.99.999H25v-3zm0-4h6v3h-6z" fill="#212121"/><path d="M39.5 61a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zm0-2.2v-2.2h-3.3v-2.2h3.3v-2.2l3.3 3.3z"/><g transform="translate(-26 25)"><circle transform="matrix(1.2 0 0 1.2 72.4 21.2)" cx="10.5" cy="11.5" r="2.5" fill="#009802"/><path d="M78 25c-.544 0-1 .45-1 1v8c0 .54.45 1 1 1h3.031a3.533 3.533 0 0 1-.031-.5c0-.17.008-.337.031-.5H78v-8h3v3h3v1.5c.163-.023.33 0 .5 0 .17 0 .337-.023.5 0V28l-3-3zm4 1l2 2h-2z"/></g><path d="M8 66H3.997a1 1 0 0 0-.997.995v8.01c0 .54.446.995.997.995h6.006a1 1 0 0 0 .997-.995V69l-3-3zm0 1l2 2H8zm-4 0h3v3h3v5H4z"/><path d="M17 71.5a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0" fill="#9f9f9f"/><path d="M27 69.43l-.93-.93-2.57 2.57-2.57-2.57-.93.93L22.57 72 20 74.57l.93.93 2.57-2.57 2.57 2.57.93-.93L24.43 72z" fill-opacity=".36"/><path d="M27 68.93l-.93-.93-2.57 2.57L20.93 68l-.93.93 2.57 2.57L20 74.07l.93.93 2.57-2.57L26.07 75l.93-.93-2.57-2.57z" fill="#fff"/><path d="M33 71.5a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0" fill="#bebebe"/><path d="M43 69.43l-.93-.93-2.57 2.57-2.57-2.57-.93.93L38.57 72 36 74.57l.93.93 2.57-2.57 2.57 2.57.93-.93L40.43 72z" fill-opacity=".37"/><path d="M43 68.93l-.93-.93-2.57 2.57L36.93 68l-.93.93 2.57 2.57L36 74.07l.93.93 2.57-2.57L42.07 75l.93-.93-2.57-2.57z" fill="#fff"/><g transform="translate(49 65)"><path transform="translate(-111 -96)" d="M118 96c-3.87 0-7 3.13-7 7s3.13 7 7 7 7-3.13 7-7-3.13-7-7-7" fill="url(#c)"/><path d="M.5 7a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0" fill="#f27d82"/><path d="M10.5 4.93L9.57 4 7 6.57 4.43 4l-.93.93L6.07 7.5 3.5 10.07l.93.93L7 8.43 9.57 11l.93-.93L7.93 7.5z" fill-opacity=".36"/><path d="M10.5 4.43l-.93-.93L7 6.07 4.43 3.5l-.93.93L6.07 7 3.5 9.57l.93.93L7 7.93l2.57 2.57.93-.93L7.93 7z" fill="#fff"/><defs><linearGradient id="d"><stop stop-color="#d7687d" offset="0"/><stop stop-color="#b21402" offset="1"/></linearGradient><linearGradient id="c" x2="24" gradientTransform="matrix(0 -.58333 -.58333 0 118 110)" gradientUnits="userSpaceOnUse" xlink:href="#d"/></defs></g><g transform="translate(1 81)"><path transform="translate(-96 -96)" d="M103 110c3.87 0 7-3.13 7-7s-3.13-7-7-7-7 3.13-7 7 3.13 7 7 7" fill="url(#e)"/><path transform="translate(-96 -96)" d="M103 96.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13" fill="url(#f)"/><path d="M10.5 4.93L9.57 4 7 6.57 4.43 4l-.93.93L6.07 7.5 3.5 10.07l.93.93L7 8.43 9.57 11l.93-.93L7.93 7.5z" fill="#993c35"/><path d="M10.5 4.43l-.93-.93L7 6.07 4.43 3.5l-.93.93L6.07 7 3.5 9.57l.93.93L7 7.93l2.57 2.57.93-.93L7.93 7z" fill="#fff"/><defs><linearGradient id="f" x1="96.5" x2="109.5" y1="103" y2="103" gradientTransform="rotate(90 103 103)" gradientUnits="userSpaceOnUse" xlink:href="#g"/><linearGradient id="g"><stop stop-color="#e59290" offset="0"/><stop stop-color="#e99890" offset="1"/></linearGradient><linearGradient id="e" x1="113" x2="127" y1="104" y2="104" gradientTransform="rotate(90 112 95)" gradientUnits="userSpaceOnUse" xlink:href="#h"/><linearGradient id="h"><stop stop-color="#c0544f" offset="0"/><stop stop-color="#d08481" offset="1"/></linearGradient></defs></g><path d="M26.27 90.92a4.5 4.5 0 1 1 .73-.684l2.346 2.346-.707.707zm-2.692-.106a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7z" fill="#5b5b5b"/><text style="line-height:0%" x="-11.403" y="91.208" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.403" y="91.208" style="line-height:1.25" font-size="10">1</tspan></text><text style="line-height:0%" x="-11.144" y="75.675" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.144" y="75.675" style="line-height:1.25" font-size="10">2</tspan></text><text style="line-height:0%" x="-11.066" y="60.143" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.066" y="60.143" style="line-height:1.25" font-size="10">3</tspan></text><text style="line-height:0%" x="-11.266" y="44.611" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.266" y="44.611" style="line-height:1.25" font-size="10">4</tspan></text><text style="line-height:0%" x="5.935" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="5.935" y="108.082" style="line-height:1.25" font-size="10">a</tspan></text><text style="line-height:0%" x="21.659" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="21.659" y="108.082" style="line-height:1.25" font-size="10">b</tspan></text><text style="line-height:0%" x="37.384" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="37.384" y="108.082" style="line-height:1.25" font-size="10">c</tspan></text><text style="line-height:0%" x="53.108" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="53.108" y="108.082" style="line-height:1.25" font-size="10">d</tspan></text><g fill="none"><path d="M48 96H32V80h16z"/><path d="M40 81c-3.864 0-7 3.136-7 7s3.136 7 7 7 7-3.136 7-7-3.136-7-7-7zm-5.5 7c0-3.032 2.468-5.5 5.5-5.5s5.5 2.468 5.5 5.5-2.468 5.5-5.5 5.5a5.507 5.507 0 0 1-5.5-5.5zm6.5 4v-5h-2v5zm-2-6h2v-2h-2z" fill="#000"/></g><g transform="matrix(1.39974 0 0 1.39343 65.054 81.02)" mask="url(#i)"><path d="M1 9l4-8 4 8z" stroke="#c19600" stroke-width="2" stroke-linejoin="round"/><path d="M1 9l4-8 4 8z" fill="#f4bd00" stroke="#f5bd00" stroke-width="1.5" stroke-linejoin="round"/><path d="M3.75 2.75h2.5v2.5L5.75 7h-1.5l-.5-1.75v-2.5m0 5.25h2.5v1.25h-2.5" fill="#ad8601"/><mask id="i"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-60)" d="M64 3h2v2.25L65.5 7h-1L64 5.25V3m0 5h2v1h-2"/></mask></g><g transform="matrix(1.36 0 0 1.34 65.3 65.5)" mask="url(#j)"><path transform="translate(-80)" d="M85 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#k)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#2a53cd"/><mask id="j"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-80)" d="M83.93 2.14c-.03-.53.55-.97 1.06-.83.5.12.79.73.56 1.18-.2.44-.79.61-1.2.36a.812.812 0 0 1-.42-.71zm1.7 5.46h.67v.53h-2.89V7.6h.66V3.99h-.66v-.53h2.22z"/></mask></g><g transform="matrix(1.37 0 0 1.36 65.2 49.3)" mask="url(#l)"><path transform="translate(-20)" d="M25 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#m)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#eb3941"/><mask id="l"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-20)" d="M23 3l4 4M27 3l-4 4" stroke="#000"/></mask></g><path d="M72 33.333A6.67 6.67 0 0 0 65.333 40 6.67 6.67 0 0 0 72 46.667 6.67 6.67 0 0 0 78.667 40 6.67 6.67 0 0 0 72 33.333zm0 2c1.107 0 2 .894 2 2 0 1.107-.893 2-2 2s-2-.893-2-2c0-1.106.893-2 2-2zm0 9.467a4.8 4.8 0 0 1-4-2.147c.02-1.326 2.667-2.053 4-2.053 1.327 0 3.98.727 4 2.053a4.8 4.8 0 0 1-4 2.147z"/><path d="M64 32h16v16H64z" fill="none"/><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="-10.738" y="28.118" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".373"><tspan x="-10.738" y="28.118" style="line-height:1.25" font-size="10">5</tspan></text><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="68.649" y="107.697" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".351"><tspan x="68.649" y="107.697" style="line-height:1.25" font-size="10">e</tspan></text><path d="M65.25 24.75h1.5v-1.5h-1.5zm0 3h1.5v-1.5h-1.5zm0-6h1.5v-1.5h-1.5zm3 3h10.5v-1.5h-10.5zm0 3h10.5v-1.5h-10.5zm0-7.5v1.5h10.5v-1.5z"/><path d="M63 15h18v18H63zM47 79h18v18H47z" fill="none"/><path d="M62 85h-2.107a4.489 4.489 0 0 0-1.366-1.47l1.223-1.222-1.058-1.058-1.627 1.627a4.439 4.439 0 0 0-2.122 0l-1.635-1.627-1.058 1.058 1.215 1.222A4.547 4.547 0 0 0 52.108 85H50v1.5h1.568a4.978 4.978 0 0 0-.068.75V88H50v1.5h1.5v.75c0 .255.03.503.068.75H50v1.5h2.108A4.498 4.498 0 0 0 56 94.75a4.498 4.498 0 0 0 3.893-2.25H62V91h-1.567c.037-.248.067-.495.067-.75v-.75H62V88h-1.5v-.75c0-.255-.03-.503-.067-.75H62zm-4.5 6h-3v-1.5h3zm0-3h-3v-1.5h3z"/><g fill="none"><path opacity=".2" d="M48 16h16v16H48z"/><path d="M48.5 30h15L56 17zm8.5-2h-2v-2h2zm0-3h-2v-3h2z" fill="#000"/></g><text style="line-height:0%" x="32.47" y="23.902" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="32.47" y="23.902" style="line-height:1.25" font-weight="700" font-size="10">A</tspan></text><text style="line-height:0%" x="40.363" y="31.525" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="40.363" y="31.525" style="line-height:1.25" font-weight="700" font-size="10">B</tspan></text><path d="M37.955 29.089c-1.915-.292-2.12-.9-2.237-4.13h-1.22c.047 3.856.062 5.297 5.736 5.258l.316-.014-2.595-2.996a39.95 39.95 0 0 0 0 1.882z"/><g fill="none" fill-rule="evenodd"><path d="M0 16h16v16H0z"/><g fill="#000" fill-rule="nonzero"><path d="M9.58 27.313l1.417 1.294c-.86.577-1.89.913-2.997.913-3.004 0-5.44-2.471-5.44-5.52 0-.917.22-1.782.61-2.543l1.417 1.294c-.138.39-.214.81-.214 1.249 0 2.032 1.624 3.68 3.627 3.68.567 0 1.103-.132 1.58-.367zm1.826-2.046c.143-.395.22-.822.22-1.267 0-2.032-1.623-3.68-3.626-3.68-.573 0-1.116.135-1.598.375l-1.414-1.292A5.36 5.36 0 0 1 8 18.48c3.004 0 5.44 2.471 5.44 5.52 0 .924-.224 1.795-.619 2.56z"/><path d="M8 25.84v5.52l3.022-2.76zM8 22.16v-5.52L4.978 19.4z"/></g></g><g fill="none" fill-rule="evenodd"><path fill="#000" d="M20 20h2v6h-2zM26 22h2v6h-2z"/><path fill="#000" fill-rule="nonzero" d="M24.667 20.667l-3.667-4-3.667 4h4.584zM23.333 27.333l3.667 4 3.667-4h-4.584z"/><path d="M16 16h16v16H16z"/></g><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="-10.547" y="11.352" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".373"><tspan x="-10.547" y="11.352" style="line-height:1.25" font-size="10">6</tspan></text><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="85.725" y="108.235" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".351"><tspan x="85.725" y="108.235" style="line-height:1.25" font-size="10">f</tspan></text><g><path d="M1 1h14v14H1z" fill="none"/><path d="M12.287 6.857A4.37 4.37 0 0 0 4.121 5.69 3.497 3.497 0 0 0 1 9.167c0 1.93 1.57 3.5 3.5 3.5h7.583A2.918 2.918 0 0 0 15 9.75a2.903 2.903 0 0 0-2.713-2.893z"/></g><g><path d="M24.044 15a1.44 1.44 0 0 0 1.435-1.436h-2.871c0 .79.639 1.436 1.436 1.436zm4.307-4.308v-3.59c0-2.204-1.177-4.049-3.23-4.537v-.488C25.12 1.48 24.639 1 24.044 1c-.596 0-1.077.481-1.077 1.077v.488c-2.06.488-3.231 2.326-3.231 4.538v3.59L18.3 12.127v.718h11.487v-.718z"/></g><g><path d="M32 0h16v16H32z" fill="none"/><path d="M45.333 2.667H34.667c-.74 0-1.327.593-1.327 1.333l-.007 8c0 .74.594 1.333 1.334 1.333h10.666c.74 0 1.334-.593 1.334-1.333V4c0-.74-.594-1.333-1.334-1.333zm0 9.333H34.667V8h10.666zm0-6.667H34.667V4h10.666z"/></g></svg> \ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/Images/src/mediumIcons.svg b/third_party/blink/renderer/devtools/front_end/Images/src/mediumIcons.svg index 53230f4..cd38c234 100644 --- a/third_party/blink/renderer/devtools/front_end/Images/src/mediumIcons.svg +++ b/third_party/blink/renderer/devtools/front_end/Images/src/mediumIcons.svg
@@ -100,10 +100,10 @@ id="namedview4913" showgrid="true" inkscape:zoom="5.2149126" - inkscape:cx="-63.677407" + inkscape:cx="-97.043259" inkscape:cy="76.536441" - inkscape:window-x="0" - inkscape:window-y="0" + inkscape:window-x="2611" + inkscape:window-y="26" inkscape:window-maximized="0" inkscape:current-layer="svg4775"> <inkscape:grid @@ -872,4 +872,18 @@ d="m 12,22 c 1.1,0 2,-0.9 2,-2 h -4 c 0,1.1 0.89,2 2,2 z m 6,-6 V 11 C 18,7.93 16.36,5.36 13.5,4.68 V 4 C 13.5,3.17 12.83,2.5 12,2.5 11.17,2.5 10.5,3.17 10.5,4 V 4.68 C 7.63,5.36 6,7.92 6,11 v 5 l -2,2 v 1 h 16 v -1 z" inkscape:connector-curvature="0" /> </g> + <g + style="fill:#000000" + id="g232" + transform="matrix(0.66666667,0,0,0.66666667,32,0)"> + <path + id="path218" + d="M 0,0 H 24 V 24 H 0 Z" + inkscape:connector-curvature="0" + style="fill:none" /> + <path + id="path220" + d="M 20,4 H 4 C 2.89,4 2.01,4.89 2.01,6 L 2,18 c 0,1.11 0.89,2 2,2 h 16 c 1.11,0 2,-0.89 2,-2 V 6 C 22,4.89 21.11,4 20,4 Z m 0,14 H 4 V 12 H 20 Z M 20,8 H 4 V 6 h 16 z" + inkscape:connector-curvature="0" /> + </g> </svg>
diff --git a/third_party/blink/renderer/devtools/front_end/Images/src/optimize_svg.hashes b/third_party/blink/renderer/devtools/front_end/Images/src/optimize_svg.hashes index 6a00d835..8e823f0 100644 --- a/third_party/blink/renderer/devtools/front_end/Images/src/optimize_svg.hashes +++ b/third_party/blink/renderer/devtools/front_end/Images/src/optimize_svg.hashes
@@ -1,15 +1,15 @@ { "securityIcons.svg": "27676f7c1f1542659c7c49a8052259dc", - "accelerometer-back.svg": "342973eb940ef43b409b28c2c6b0d520", + "largeIcons.svg": "faf26930e93e7525a3cbcc595527662c", + "breakpoint.svg": "69cd92d807259c022791112809b97799", "breakpointConditional.svg": "4cf90210b2af2ed84db2f60b07bcde28", "checkboxCheckmark.svg": "f039bf85cee42ad5c30ca3bfdce7912a", "errorWave.svg": "e183fa242a22ed4784a92f6becbc2c45", "smallIcons.svg": "19940dda6f171380bfd7d04d0061b44c", - "mediumIcons.svg": "81ec104f4ca13f18d1389883e2f771c8", - "breakpoint.svg": "69cd92d807259c022791112809b97799", + "mediumIcons.svg": "0f1e355d25080d532dd89f4104fb176d", + "accelerometer-back.svg": "342973eb940ef43b409b28c2c6b0d520", "treeoutlineTriangles.svg": "2d26ab85d919f83d5021f2f385dffd0b", - "largeIcons.svg": "faf26930e93e7525a3cbcc595527662c", "chevrons.svg": "79b4b527771e30b6388ce664077b3409", "audits_logo.svg": "3a4893bd2ef5bb233e924f15e51af69a", - "accelerometer-front.svg": "a4dcdac47131aa923346c15e01bc644a" + "accelerometer-front.svg": "536ad784f667f32b2f3a94b6cce9e217" } \ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/ui/Icon.js b/third_party/blink/renderer/devtools/front_end/ui/Icon.js index 0b17d41..a30c64f 100644 --- a/third_party/blink/renderer/devtools/front_end/ui/Icon.js +++ b/third_party/blink/renderer/devtools/front_end/ui/Icon.js
@@ -169,6 +169,7 @@ 'mediumicon-fetch': {position: 'b5', spritesheet: 'mediumicons', isMask: true}, 'mediumicon-cloud': {position: 'a6', spritesheet: 'mediumicons', isMask: true}, 'mediumicon-bell': {position: 'b6', spritesheet: 'mediumicons', isMask: true}, + 'mediumicon-payment': {position: 'c6', spritesheet: 'mediumicons', isMask: true}, 'badge-navigator-file-sync': {position: 'a9', spritesheet: 'largeicons'}, 'largeicon-activate-breakpoints': {position: 'b9', spritesheet: 'largeicons', isMask: true},
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h index b7c6d144..4f17161 100644 --- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h +++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
@@ -71,6 +71,7 @@ scoped_refptr<SerializedScriptValue>); ~WorkletAnimation() override = default; + String animatorName() { return animator_name_; } AnimationEffect* effect() { return GetEffect(); } AnimationTimeline* timeline() { return timeline_; } String playState();
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl index 76a7624..f4be444 100644 --- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl +++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
@@ -16,6 +16,7 @@ MeasureAs=WorkletAnimationConstructor, RuntimeEnabled=AnimationWorklet ] interface WorkletAnimation { + readonly attribute DOMString animatorName; readonly attribute AnimationEffect? effect; readonly attribute AnimationTimeline? timeline; readonly attribute AnimationPlayState playState;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h index a3a87b52..2ef24077 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h
@@ -89,13 +89,13 @@ double m22, double dx, double dy); - void setTransform(double m11, - double m12, - double m21, - double m22, - double dx, - double dy); - void setTransform(DOMMatrix2DInit*, ExceptionState&); + virtual void setTransform(double m11, + double m12, + double m21, + double m22, + double dx, + double dy); + virtual void setTransform(DOMMatrix2DInit*, ExceptionState&); DOMMatrix* getTransform(); void resetTransform();
diff --git a/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc b/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc index 888e9c61..a6aca7c 100644 --- a/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc +++ b/third_party/blink/renderer/modules/csspaint/css_paint_definition.cc
@@ -57,7 +57,8 @@ const FloatSize& container_size, float zoom, StylePropertyMapReadOnly* style_map, - const CSSStyleValueVector* paint_arguments) { + const CSSStyleValueVector* paint_arguments, + float device_scale_factor) { const FloatSize specified_size = GetSpecifiedSize(container_size, zoom); ScriptState::Scope scope(script_state_); @@ -71,7 +72,8 @@ // Do subpixel snapping for the |container_size|. auto* rendering_context = MakeGarbageCollected<PaintRenderingContext2D>( - RoundedIntSize(container_size), context_settings_, zoom); + RoundedIntSize(container_size), context_settings_, zoom, + device_scale_factor); PaintSize* paint_size = MakeGarbageCollected<PaintSize>(specified_size); CSSStyleValueVector empty_paint_arguments;
diff --git a/third_party/blink/renderer/modules/csspaint/css_paint_definition.h b/third_party/blink/renderer/modules/csspaint/css_paint_definition.h index c5becea..0caa2e6f 100644 --- a/third_party/blink/renderer/modules/csspaint/css_paint_definition.h +++ b/third_party/blink/renderer/modules/csspaint/css_paint_definition.h
@@ -54,7 +54,8 @@ sk_sp<PaintRecord> Paint(const FloatSize& container_size, float zoom, StylePropertyMapReadOnly*, - const CSSStyleValueVector*); + const CSSStyleValueVector*, + float device_scale_factor); const Vector<CSSPropertyID>& NativeInvalidationProperties() const { return native_invalidation_properties_; }
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc index f604a28..0988e3d 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc
@@ -12,10 +12,12 @@ PaintRenderingContext2D::PaintRenderingContext2D( const IntSize& container_size, const PaintRenderingContext2DSettings* context_settings, - float zoom) + float zoom, + float device_scale_factor) : container_size_(container_size), context_settings_(context_settings), - effective_zoom_(zoom) { + effective_zoom_(zoom), + device_scale_factor_(device_scale_factor) { InitializePaintRecorder(); clip_antialiasing_ = kAntiAliased; @@ -34,9 +36,13 @@ // Always save an initial frame, to support resetting the top level matrix // and clip. - canvas->scale(effective_zoom_, effective_zoom_); canvas->save(); + // No need to apply |device_scale_factor_| here. On the platform where the + // zoom_for_dsf is not enabled (currently Mac), the recording methods (e.g. + // setTransform) have their own logic to account for the device scale factor. + scale(effective_zoom_, effective_zoom_); + did_record_draw_commands_in_paint_recorder_ = false; } @@ -133,6 +139,29 @@ } } +// On a platform where zoom_for_dsf is not enabled, the recording canvas has its +// logic to account for the device scale factor. Therefore, when the transform +// of the canvas happen, we must divide the transformation matrix by the device +// scale factor such that the recording canvas would have the correct behavior. +void PaintRenderingContext2D::setTransform(double m11, + double m12, + double m21, + double m22, + double dx, + double dy) { + BaseRenderingContext2D::setTransform( + m11 / device_scale_factor_, m12 / device_scale_factor_, + m21 / device_scale_factor_, m22 / device_scale_factor_, + dx / device_scale_factor_, dy / device_scale_factor_); +} + +void PaintRenderingContext2D::setTransform(DOMMatrix2DInit* transform, + ExceptionState& exception_state) { + // The PaintRenderingContext2D APIs are running on worklet thread, therefore + // it is not possible to construct a DOMMatrix. + NOTREACHED(); +} + sk_sp<PaintRecord> PaintRenderingContext2D::GetRecord() { if (!did_record_draw_commands_in_paint_recorder_ && !!previous_frame_) { return previous_frame_; // Reuse the previous frame
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h index d02e835..ac51502 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h
@@ -34,7 +34,8 @@ public: PaintRenderingContext2D(const IntSize& container_size, const PaintRenderingContext2DSettings*, - float zoom); + float zoom, + float device_scale_factor); void Trace(blink::Visitor* visitor) override { visitor->Trace(context_settings_); @@ -84,6 +85,14 @@ bool CanCreateCanvas2dResourceProvider() const final { return false; } bool IsAccelerated() const final { return false; } + void setTransform(double m11, + double m12, + double m21, + double m22, + double dx, + double dy) final; + void setTransform(DOMMatrix2DInit*, ExceptionState&) final; + sk_sp<PaintRecord> GetRecord(); protected: @@ -103,7 +112,11 @@ // the HTML canvas which operates on physical pixels. In other words, the // paint worklet canvas needs to handle device scale factor and browser zoom, // and this is designed for that purpose. - float effective_zoom_; + const float effective_zoom_; + // On platforms where zoom_for_dsf is enabled, the |effective_zoom_| + // accounts for the device scale factor. For platforms where the feature is + // not enabled (currently Mac only), we need this extra variable. + const float device_scale_factor_; DISALLOW_COPY_AND_ASSIGN(PaintRenderingContext2D); };
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d_test.cc b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d_test.cc index 0f55f51..9f644349 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d_test.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d_test.cc
@@ -12,6 +12,7 @@ static const int kWidth = 50; static const int kHeight = 75; static const float kZoom = 1.0; +static const float kDeviceScaleFactor = 1.23; class PaintRenderingContext2DTest : public testing::Test { protected: @@ -24,8 +25,8 @@ PaintRenderingContext2DSettings* context_settings = PaintRenderingContext2DSettings::Create(); context_settings->setAlpha(false); - ctx_ = MakeGarbageCollected<PaintRenderingContext2D>(IntSize(kWidth, kHeight), - context_settings, kZoom); + ctx_ = MakeGarbageCollected<PaintRenderingContext2D>( + IntSize(kWidth, kHeight), context_settings, kZoom, kDeviceScaleFactor); } void TrySettingStrokeStyle(PaintRenderingContext2D* ctx, @@ -75,5 +76,37 @@ EXPECT_EQ(line_join_before, ctx_->lineJoin()); } +TEST_F(PaintRenderingContext2DTest, setTransformWithDeviceScaleFactor) { + DOMMatrix* matrix = ctx_->getTransform(); + EXPECT_TRUE(matrix->isIdentity()); + ctx_->setTransform(2.1, 2.5, 1.4, 2.3, 20, 50); + matrix = ctx_->getTransform(); + double epsilon = 0.000001; + EXPECT_NEAR(matrix->a(), 2.1 / kDeviceScaleFactor, epsilon); + EXPECT_NEAR(matrix->b(), 2.5 / kDeviceScaleFactor, epsilon); + EXPECT_NEAR(matrix->c(), 1.4 / kDeviceScaleFactor, epsilon); + EXPECT_NEAR(matrix->d(), 2.3 / kDeviceScaleFactor, epsilon); + EXPECT_NEAR(matrix->e(), 20 / kDeviceScaleFactor, epsilon); + EXPECT_NEAR(matrix->f(), 50 / kDeviceScaleFactor, epsilon); +} + +TEST_F(PaintRenderingContext2DTest, setTransformWithDefaultDeviceScaleFactor) { + PaintRenderingContext2DSettings* context_settings = + PaintRenderingContext2DSettings::Create(); + PaintRenderingContext2D* ctx = MakeGarbageCollected<PaintRenderingContext2D>( + IntSize(kWidth, kHeight), context_settings, kZoom, + 1.0 /* device_scale_factor */); + DOMMatrix* matrix = ctx->getTransform(); + EXPECT_TRUE(matrix->isIdentity()); + ctx->setTransform(1.2, 2.3, 3.4, 4.5, 56, 67); + matrix = ctx->getTransform(); + EXPECT_FLOAT_EQ(matrix->a(), 1.2); + EXPECT_FLOAT_EQ(matrix->b(), 2.3); + EXPECT_FLOAT_EQ(matrix->c(), 3.4); + EXPECT_FLOAT_EQ(matrix->d(), 4.5); + EXPECT_FLOAT_EQ(matrix->e(), 56); + EXPECT_FLOAT_EQ(matrix->f(), 67); +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet.cc index 3fab4d4..4e843449 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet.cc
@@ -13,6 +13,7 @@ #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/modules/csspaint/css_paint_definition.h" #include "third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope.h" #include "third_party/blink/renderer/modules/csspaint/paint_worklet_messaging_proxy.h" @@ -119,14 +120,26 @@ const LayoutObject& layout_object = static_cast<const LayoutObject&>(observer); float zoom = layout_object.StyleRef().EffectiveZoom(); + + // TODO(crbug.com/716231): Remove this hack once zoom_for_dsf is enabled on + // all platforms (currently not enabled on Mac). + float device_scale_factor = 1; + if (layout_object.GetFrame() && layout_object.GetFrame()->GetPage()) { + // The value of DeviceScaleFactorDeprecated would be 1 on a platform where + // zoom_for_dsf is enabled, even if we run chrome with + // --force-device-scale-factor with a value that is not 1. + device_scale_factor = + layout_object.GetFrame()->GetPage()->DeviceScaleFactorDeprecated(); + } + StylePropertyMapReadOnly* style_map = MakeGarbageCollected<PrepopulatedComputedStylePropertyMap>( layout_object.GetDocument(), layout_object.StyleRef(), layout_object.GetNode(), paint_definition->NativeInvalidationProperties(), paint_definition->CustomInvalidationProperties()); - sk_sp<PaintRecord> paint_record = - paint_definition->Paint(container_size, zoom, style_map, data); + sk_sp<PaintRecord> paint_record = paint_definition->Paint( + container_size, zoom, style_map, data, device_scale_factor); if (!paint_record) return nullptr; return PaintGeneratedImage::Create(paint_record, container_size);
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc index 626800e..1c34914 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc
@@ -177,9 +177,11 @@ paint_arguments.push_back(style_value->ToCSSStyleValue()); } - sk_sp<PaintRecord> result = - definition->Paint(FloatSize(input->GetSize()), input->EffectiveZoom(), - style_map, &paint_arguments); + // TODO(crbug.com/980594): find a proper way to detect whether zoom_for_dsf is + // enabled. + sk_sp<PaintRecord> result = definition->Paint( + FloatSize(input->GetSize()), input->EffectiveZoom(), style_map, + &paint_arguments, 1.0 /* device_scale_factor */); // CSSPaintDefinition::Paint returns nullptr if it fails, but for // OffThread-PaintWorklet we prefer to insert empty PaintRecords into the
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc index fcd47429..831a9e6e 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_test.cc
@@ -134,7 +134,8 @@ layout_object.GetNode(), definition->NativeInvalidationProperties(), definition->CustomInvalidationProperties()); scoped_refptr<Image> image = PaintGeneratedImage::Create( - definition->Paint(container_size, zoom, style_map, nullptr), + definition->Paint(container_size, zoom, style_map, nullptr, + 1.0 /* device_scale_factor */), container_size); EXPECT_NE(image, nullptr); }
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item.cc b/third_party/blink/renderer/platform/graphics/paint/display_item.cc index d1de073..8a46ce1 100644 --- a/third_party/blink/renderer/platform/graphics/paint/display_item.cc +++ b/third_party/blink/renderer/platform/graphics/paint/display_item.cc
@@ -40,10 +40,8 @@ case 7: return "PaintPhaseDescendantOutlinesOnly"; case 8: - return "PaintPhaseOverlayScrollbars"; - case 9: return "PaintPhaseSelection"; - case 10: + case 9: return "PaintPhaseTextClip"; case DisplayItem::kPaintPhaseMax: return "PaintPhaseMask";
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item.h b/third_party/blink/renderer/platform/graphics/paint/display_item.h index c248132..4434f62 100644 --- a/third_party/blink/renderer/platform/graphics/paint/display_item.h +++ b/third_party/blink/renderer/platform/graphics/paint/display_item.h
@@ -28,7 +28,7 @@ public: enum { // Must be kept in sync with core/paint/PaintPhase.h. - kPaintPhaseMax = 11, + kPaintPhaseMax = 10, }; // A display item type uniquely identifies a display item of a client.
diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc b/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc index 9ea7b68..7c142e6f 100644 --- a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc +++ b/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
@@ -147,6 +147,8 @@ rect.Width(), rect.Height(), color_type, kUnpremul_SkAlphaType, color_params.GetSkColorSpaceForSkSurfaces()); sk_sp<SkImage> sk_image = src_image->PaintImageForCurrentFrame().GetSkImage(); + if (!sk_image) + return false; bool read_pixels_successful = sk_image->readPixels( info, result.Data(), info.minRowBytes(), rect.X(), rect.Y()); DCHECK(read_pixels_successful ||
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index be1635a..1fce1c5 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1232,7 +1232,7 @@ }, { name: "PointerRawUpdate", - status: "experimental", + status: "stable", }, { name: "Portals",
diff --git a/third_party/blink/renderer/platform/scheduler/common/features.h b/third_party/blink/renderer/platform/scheduler/common/features.h index 019300a..36dde17 100644 --- a/third_party/blink/renderer/platform/scheduler/common/features.h +++ b/third_party/blink/renderer/platform/scheduler/common/features.h
@@ -155,6 +155,18 @@ extern const char PLATFORM_EXPORT kThrottleableTaskTypesListParam[]; extern const char PLATFORM_EXPORT kFreezableTaskTypesListParam[]; +// If enabled, the scheduler will bypass the priority-based anti-starvation +// logic that prevents indefinite starvation of lower priority tasks in the +// presence of higher priority tasks by occasionally selecting lower +// priority task queues over higher priority task queues. +// +// Note: this does not affect the anti-starvation logic that is in place for +// preventing delayed tasks from starving immediate tasks, which is always +// enabled. +const base::Feature kBlinkSchedulerDisableAntiStarvationForPriorities{ + "BlinkSchedulerDisableAntiStarvationForPriorities", + base::FEATURE_DISABLED_BY_DEFAULT}; + } // namespace scheduler } // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc index 9f7bb17b..0d709b78 100644 --- a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
@@ -5,8 +5,11 @@ #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" #include <utility> + +#include "base/feature_list.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" +#include "third_party/blink/renderer/platform/scheduler/common/features.h" #include "third_party/blink/renderer/platform/scheduler/common/tracing_helper.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h" @@ -20,11 +23,15 @@ WebThreadScheduler::CreateMainThreadScheduler( std::unique_ptr<base::MessagePump> message_pump, base::Optional<base::Time> initial_virtual_time) { - auto settings = base::sequence_manager::SequenceManager::Settings::Builder() - .SetMessagePumpType(base::MessagePump::Type::DEFAULT) - .SetRandomisedSamplingEnabled(true) - .SetAddQueueTimeToTasks(true) - .Build(); + auto settings = + base::sequence_manager::SequenceManager::Settings::Builder() + .SetMessagePumpType(base::MessagePump::Type::DEFAULT) + .SetRandomisedSamplingEnabled(true) + .SetAddQueueTimeToTasks(true) + .SetAntiStarvationLogicForPrioritiesDisabled( + base::FeatureList::IsEnabled( + kBlinkSchedulerDisableAntiStarvationForPriorities)) + .Build(); auto sequence_manager = message_pump ? base::sequence_manager::
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc index 0dbbb30c..72645360 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h" #include <memory> +#include <string> #include <utility> #include "base/bind.h" @@ -48,6 +49,25 @@ using base::sequence_manager::FakeTask; using base::sequence_manager::FakeTaskTiming; +enum class AntiStarvationLogic { + kEnabled, + kDisabled, +}; + +std::string ToString(AntiStarvationLogic type) { + switch (type) { + case AntiStarvationLogic::kEnabled: + return "AntiStarvationLogicEnabled"; + case AntiStarvationLogic::kDisabled: + return "AntiStarvationLogicDisabled"; + } +} + +std::string GetTestNameSuffix( + const testing::TestParamInfo<AntiStarvationLogic>& info) { + return "With" + ToString(info.param); +} + class FakeInputEvent : public blink::WebInputEvent { public: explicit FakeInputEvent(blink::WebInputEvent::Type event_type, @@ -308,7 +328,8 @@ return os << MainThreadSchedulerImpl::UseCaseToString(use_case); } -class MainThreadSchedulerImplTest : public testing::Test { +class MainThreadSchedulerImplTest + : public testing::TestWithParam<AntiStarvationLogic> { public: MainThreadSchedulerImplTest(std::vector<base::Feature> features_to_enable, std::vector<base::Feature> features_to_disable) { @@ -325,7 +346,12 @@ CreateTestTaskRunner(); Initialize(std::make_unique<MainThreadSchedulerImplForTest>( base::sequence_manager::SequenceManagerForTest::Create( - nullptr, test_task_runner_, test_task_runner_->GetMockTickClock()), + nullptr, test_task_runner_, test_task_runner_->GetMockTickClock(), + base::sequence_manager::SequenceManager::Settings::Builder() + .SetRandomisedSamplingEnabled(true) + .SetAntiStarvationLogicForPrioritiesDisabled( + GetParam() == AntiStarvationLogic::kDisabled) + .Build()), base::nullopt)); } @@ -812,7 +838,13 @@ DISALLOW_COPY_AND_ASSIGN(MainThreadSchedulerImplTest); }; -TEST_F(MainThreadSchedulerImplTest, TestPostDefaultTask) { +INSTANTIATE_TEST_SUITE_P(, + MainThreadSchedulerImplTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(MainThreadSchedulerImplTest, TestPostDefaultTask) { Vector<String> run_order; PostTestTasks(&run_order, "D1 D2 D3 D4"); @@ -820,7 +852,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("D1", "D2", "D3", "D4")); } -TEST_F(MainThreadSchedulerImplTest, TestPostDefaultAndCompositor) { +TEST_P(MainThreadSchedulerImplTest, TestPostDefaultAndCompositor) { Vector<String> run_order; PostTestTasks(&run_order, "D1 C1 P1"); base::RunLoop().RunUntilIdle(); @@ -829,7 +861,7 @@ EXPECT_THAT(run_order, testing::Contains("P1")); } -TEST_F(MainThreadSchedulerImplTest, TestRentrantTask) { +TEST_P(MainThreadSchedulerImplTest, TestRentrantTask) { int count = 0; Vector<int> run_order; default_task_runner_->PostTask( @@ -841,7 +873,7 @@ EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4)); } -TEST_F(MainThreadSchedulerImplTest, TestPostIdleTask) { +TEST_P(MainThreadSchedulerImplTest, TestPostIdleTask) { int run_count = 0; base::TimeTicks expected_deadline = Now() + base::TimeDelta::FromMilliseconds(2300); @@ -880,7 +912,7 @@ EXPECT_EQ(expected_deadline, deadline_in_task); } -TEST_F(MainThreadSchedulerImplTest, TestRepostingIdleTask) { +TEST_P(MainThreadSchedulerImplTest, TestRepostingIdleTask) { int run_count = 0; g_max_idle_task_reposts = 2; @@ -901,7 +933,7 @@ EXPECT_EQ(2, run_count); } -TEST_F(MainThreadSchedulerImplTest, TestIdleTaskExceedsDeadline) { +TEST_P(MainThreadSchedulerImplTest, TestIdleTaskExceedsDeadline) { int run_count = 0; // Post two UpdateClockToDeadlineIdleTestTask tasks. @@ -923,7 +955,7 @@ EXPECT_EQ(2, run_count); } -TEST_F(MainThreadSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { +TEST_P(MainThreadSchedulerImplTest, TestDelayedEndIdlePeriodCanceled) { int run_count = 0; base::TimeTicks deadline_in_task; @@ -963,7 +995,7 @@ EXPECT_EQ(1, run_count); // We should still be in the new idle period. } -TEST_F(MainThreadSchedulerImplTest, TestDefaultPolicy) { +TEST_P(MainThreadSchedulerImplTest, TestDefaultPolicy) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 P1 C1 D2 P2 C2"); @@ -977,7 +1009,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, TestDefaultPolicyWithSlowCompositor) { +TEST_P(MainThreadSchedulerImplTest, TestDefaultPolicyWithSlowCompositor) { RunSlowCompositorTask(); Vector<String> run_order; @@ -991,7 +1023,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_CompositorHandlesInput_WithTouchHandler) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1005,7 +1037,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_MainThreadHandlesInput_WithoutScrollUpdates) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1019,7 +1051,7 @@ EXPECT_EQ(UseCase::kMainThreadCustomInputHandling, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_MainThreadHandlesInput_WithoutPreventDefault) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1033,7 +1065,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_CompositorHandlesInput_LongGestureDuration) { EnableIdleTasks(); SimulateCompositorGestureStart(TouchEventPolicy::kSendTouchStart); @@ -1063,7 +1095,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_CompositorHandlesInput_WithoutTouchHandler) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1076,7 +1108,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_MainThreadHandlesInput_WithTouchHandler) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1094,7 +1126,7 @@ WebInputEventResult::kHandledSystem); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_MainThreadHandlesInput_WithoutTouchHandler) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1111,7 +1143,7 @@ WebInputEventResult::kHandledSystem); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_MainThreadHandlesInput_SingleEvent_PreventDefault) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); @@ -1132,7 +1164,7 @@ EXPECT_EQ(UseCase::kMainThreadCustomInputHandling, CurrentUseCase()); } -TEST_F( +TEST_P( MainThreadSchedulerImplTest, TestCompositorPolicy_MainThreadHandlesInput_SingleEvent_NoPreventDefault) { Vector<String> run_order; @@ -1153,7 +1185,7 @@ EXPECT_EQ(UseCase::kTouchstart, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) { +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); @@ -1169,7 +1201,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, Navigation_ResetsTaskCostEstimations) { +TEST_P(MainThreadSchedulerImplTest, Navigation_ResetsTaskCostEstimations) { Vector<String> run_order; scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); @@ -1188,7 +1220,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("C1", "T1")); } -TEST_F(MainThreadSchedulerImplTest, TestTouchstartPolicy_Compositor) { +TEST_P(MainThreadSchedulerImplTest, TestTouchstartPolicy_Compositor) { Vector<String> run_order; PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2"); @@ -1225,7 +1257,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("L1", "T1", "T2")); } -TEST_F(MainThreadSchedulerImplTest, TestTouchstartPolicy_MainThread) { +TEST_P(MainThreadSchedulerImplTest, TestTouchstartPolicy_MainThread) { Vector<String> run_order; PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2"); @@ -1274,7 +1306,7 @@ // TODO(alexclarke): Reenable once we've reinstaed the Loading // UseCase. -TEST_F(MainThreadSchedulerImplTest, DISABLED_LoadingUseCase) { +TEST_P(MainThreadSchedulerImplTest, DISABLED_LoadingUseCase) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2"); @@ -1304,7 +1336,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventConsumedOnCompositorThread_IgnoresMouseMove_WhenMouseUp) { RunSlowCompositorTask(); @@ -1321,7 +1353,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("D1", "C1", "D2", "C2", "I1")); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_IgnoresMouseMove_WhenMouseUp) { RunSlowCompositorTask(); @@ -1338,7 +1370,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("D1", "C1", "D2", "C2", "I1")); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventConsumedOnCompositorThread_MouseMove_WhenMouseDown) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); @@ -1356,7 +1388,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("D1", "D2", "C1", "C2", "I1")); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_MouseMove_WhenMouseDown) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); @@ -1375,7 +1407,7 @@ WebInputEventResult::kHandledSystem); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_MouseMove_WhenMouseDown_AfterMouseWheel) { // Simulate a main thread driven mouse wheel scroll gesture. SimulateMainThreadGestureStart(TouchEventPolicy::kSendTouchStart, @@ -1406,7 +1438,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("C1", "C2", "D1", "D2", "I1")); } -TEST_F(MainThreadSchedulerImplTest, EventForwardedToMainThread_MouseClick) { +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_MouseClick) { // A mouse click should be detected as main thread input handling, which means // we won't try to defer expensive tasks because of one. We can, however, // prioritize compositing/input handling. @@ -1430,7 +1462,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("C1", "C2", "D1", "D2", "I1")); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventConsumedOnCompositorThread_MouseWheel) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); @@ -1445,7 +1477,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_MouseWheel_PreventDefault) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); @@ -1460,7 +1492,7 @@ EXPECT_EQ(UseCase::kMainThreadCustomInputHandling, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_NoPreventDefault) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); @@ -1484,7 +1516,7 @@ EXPECT_EQ(UseCase::kMainThreadGesture, CurrentUseCase()); } -TEST_F( +TEST_P( MainThreadSchedulerImplTest, EventForwardedToMainThreadAndBackToCompositor_MouseWheel_NoPreventDefault) { Vector<String> run_order; @@ -1509,7 +1541,7 @@ EXPECT_EQ(UseCase::kCompositorGesture, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventConsumedOnCompositorThread_IgnoresKeyboardEvents) { RunSlowCompositorTask(); @@ -1526,7 +1558,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EventForwardedToMainThread_IgnoresKeyboardEvents) { RunSlowCompositorTask(); @@ -1547,7 +1579,7 @@ WebInputEventResult::kHandledSystem); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestMainthreadScrollingUseCaseDoesNotStarveDefaultTasks) { SimulateMainThreadGestureStart(TouchEventPolicy::kDontSendTouchStart, blink::WebInputEvent::kGestureScrollBegin); @@ -1565,12 +1597,22 @@ FakeInputEvent(blink::WebInputEvent::kGestureFlingStart), InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); base::RunLoop().RunUntilIdle(); - // Ensure that the default D1 task gets to run at some point before the final - // C2 compositor task. - EXPECT_THAT(run_order, testing::ElementsAre("C1", "D1", "C2")); + + switch (GetParam()) { + case AntiStarvationLogic::kEnabled: + // Ensure that the default D1 task gets to run at some point before the + // final C2 compositor task. + EXPECT_THAT(run_order, testing::ElementsAre("C1", "D1", "C2")); + break; + case AntiStarvationLogic::kDisabled: + // Without anti-starvation logic, the default D1 task should get stuck at + // the end. + EXPECT_THAT(run_order, testing::ElementsAre("C1", "C2", "D1")); + break; + } } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicyEnds_CompositorHandlesInput) { SimulateCompositorGestureStart(TouchEventPolicy::kDontSendTouchStart); EXPECT_EQ(UseCase::kCompositorGesture, @@ -1580,7 +1622,7 @@ EXPECT_EQ(UseCase::kNone, ForceUpdatePolicyAndGetCurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicyEnds_MainThreadHandlesInput) { SimulateMainThreadGestureStart(TouchEventPolicy::kDontSendTouchStart, blink::WebInputEvent::kGestureScrollBegin); @@ -1591,7 +1633,7 @@ EXPECT_EQ(UseCase::kNone, ForceUpdatePolicyAndGetCurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) { +TEST_P(MainThreadSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) { Vector<String> run_order; PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); @@ -1613,7 +1655,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("L1", "D1", "D2")); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestTouchstartPolicyEndsAfterConsecutiveTouchmoves) { Vector<String> run_order; PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); @@ -1642,7 +1684,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("L1")); } -TEST_F(MainThreadSchedulerImplTest, TestIsHighPriorityWorkAnticipated) { +TEST_P(MainThreadSchedulerImplTest, TestIsHighPriorityWorkAnticipated) { bool is_anticipated_before = false; bool is_anticipated_after = false; @@ -1710,7 +1752,7 @@ EXPECT_FALSE(is_anticipated_after); } -TEST_F(MainThreadSchedulerImplTest, TestShouldYield) { +TEST_P(MainThreadSchedulerImplTest, TestShouldYield) { bool should_yield_before = false; bool should_yield_after = false; @@ -1744,7 +1786,7 @@ EXPECT_TRUE(should_yield_after); } -TEST_F(MainThreadSchedulerImplTest, TestShouldYield_TouchStart) { +TEST_P(MainThreadSchedulerImplTest, TestShouldYield_TouchStart) { // Receiving a touchstart should immediately trigger yielding, even if // there's no immediately pending work in the compositor queue. EXPECT_FALSE(scheduler_->ShouldYieldForHighPriorityWork()); @@ -1755,7 +1797,7 @@ base::RunLoop().RunUntilIdle(); } -TEST_F(MainThreadSchedulerImplTest, SlowMainThreadInputEvent) { +TEST_P(MainThreadSchedulerImplTest, SlowMainThreadInputEvent) { EXPECT_EQ(UseCase::kNone, CurrentUseCase()); // An input event should bump us into input priority. @@ -1784,7 +1826,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, OnlyOnePendingUrgentPolicyUpdate) { +TEST_P(MainThreadSchedulerImplTest, OnlyOnePendingUrgentPolicyUpdate) { for (int i = 0; i < 4; i++) { scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); } @@ -1792,7 +1834,7 @@ EXPECT_EQ(1, scheduler_->update_policy_count_); } -TEST_F(MainThreadSchedulerImplTest, OnePendingDelayedAndOneUrgentUpdatePolicy) { +TEST_P(MainThreadSchedulerImplTest, OnePendingDelayedAndOneUrgentUpdatePolicy) { scheduler_->ScheduleDelayedPolicyUpdate(Now(), base::TimeDelta::FromMilliseconds(1)); scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); @@ -1802,7 +1844,7 @@ EXPECT_EQ(2, scheduler_->update_policy_count_); } -TEST_F(MainThreadSchedulerImplTest, OneUrgentAndOnePendingDelayedUpdatePolicy) { +TEST_P(MainThreadSchedulerImplTest, OneUrgentAndOnePendingDelayedUpdatePolicy) { scheduler_->EnsureUrgentPolicyUpdatePostedOnMainThread(); scheduler_->ScheduleDelayedPolicyUpdate(Now(), base::TimeDelta::FromMilliseconds(1)); @@ -1812,7 +1854,7 @@ EXPECT_EQ(2, scheduler_->update_policy_count_); } -TEST_F(MainThreadSchedulerImplTest, UpdatePolicyCountTriggeredByOneInputEvent) { +TEST_P(MainThreadSchedulerImplTest, UpdatePolicyCountTriggeredByOneInputEvent) { // We expect DidHandleInputEventOnCompositorThread to post an urgent policy // update. scheduler_->DidHandleInputEventOnCompositorThread( @@ -1833,7 +1875,7 @@ EXPECT_EQ(2, scheduler_->update_policy_count_); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, UpdatePolicyCountTriggeredByThreeInputEvents) { // We expect DidHandleInputEventOnCompositorThread to post // an urgent policy update. @@ -1883,7 +1925,7 @@ EXPECT_EQ(3, scheduler_->update_policy_count_); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, UpdatePolicyCountTriggeredByTwoInputEventsWithALongSeparatingDelay) { // We expect DidHandleInputEventOnCompositorThread to post an urgent policy // update. @@ -1921,7 +1963,7 @@ EXPECT_EQ(4, scheduler_->update_policy_count_); } -TEST_F(MainThreadSchedulerImplTest, EnsureUpdatePolicyNotTriggeredTooOften) { +TEST_P(MainThreadSchedulerImplTest, EnsureUpdatePolicyNotTriggeredTooOften) { EXPECT_EQ(0, scheduler_->update_policy_count_); scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); EXPECT_EQ(1, scheduler_->update_policy_count_); @@ -1975,7 +2017,7 @@ "none blocking input expected", "none")); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, BlockingInputExpectedSoonWhenBlockInputEventSeen) { SimulateCompositorGestureStart(TouchEventPolicy::kSendTouchStart); EXPECT_TRUE(HaveSeenABlockingGesture()); @@ -1983,7 +2025,7 @@ EXPECT_TRUE(BlockingInputExpectedSoon()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, BlockingInputNotExpectedSoonWhenNoBlockInputEventSeen) { SimulateCompositorGestureStart(TouchEventPolicy::kDontSendTouchStart); EXPECT_FALSE(HaveSeenABlockingGesture()); @@ -2004,6 +2046,8 @@ base::sequence_manager::SequenceManagerForTest::CreateOnCurrentThread( base::sequence_manager::SequenceManager::Settings::Builder() .SetTickClock(&clock_) + .SetAntiStarvationLogicForPrioritiesDisabled( + GetParam() == AntiStarvationLogic::kDisabled) .Build()), base::nullopt)); } @@ -2032,7 +2076,13 @@ DISALLOW_COPY_AND_ASSIGN(MainThreadSchedulerImplWithMessageLoopTest); }; -TEST_F(MainThreadSchedulerImplWithMessageLoopTest, +INSTANTIATE_TEST_SUITE_P(, + MainThreadSchedulerImplWithMessageLoopTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(MainThreadSchedulerImplWithMessageLoopTest, NonNestableIdleTaskDoesntExecuteInNestedLoop) { Vector<String> order; idle_task_runner_->PostIdleTask( @@ -2062,7 +2112,7 @@ EXPECT_THAT(order, testing::ElementsAre("1", "2", "4", "5", "3")); } -TEST_F(MainThreadSchedulerImplTest, TestBeginMainFrameNotExpectedUntil) { +TEST_P(MainThreadSchedulerImplTest, TestBeginMainFrameNotExpectedUntil) { base::TimeDelta ten_millis(base::TimeDelta::FromMilliseconds(10)); base::TimeTicks expected_deadline = Now() + ten_millis; base::TimeTicks deadline_in_task; @@ -2084,7 +2134,7 @@ EXPECT_EQ(expected_deadline, deadline_in_task); } -TEST_F(MainThreadSchedulerImplTest, TestLongIdlePeriod) { +TEST_P(MainThreadSchedulerImplTest, TestLongIdlePeriod) { base::TimeTicks expected_deadline = Now() + maximum_idle_period_duration(); base::TimeTicks deadline_in_task; int run_count = 0; @@ -2101,7 +2151,7 @@ EXPECT_EQ(expected_deadline, deadline_in_task); } -TEST_F(MainThreadSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) { +TEST_P(MainThreadSchedulerImplTest, TestLongIdlePeriodWithPendingDelayedTask) { base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(30); base::TimeTicks expected_deadline = Now() + pending_task_delay; base::TimeTicks deadline_in_task; @@ -2118,7 +2168,7 @@ EXPECT_EQ(expected_deadline, deadline_in_task); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestLongIdlePeriodWithLatePendingDelayedTask) { base::TimeDelta pending_task_delay = base::TimeDelta::FromMilliseconds(10); base::TimeTicks deadline_in_task; @@ -2145,7 +2195,7 @@ EXPECT_EQ(1, run_count); } -TEST_F(MainThreadSchedulerImplTest, TestLongIdlePeriodRepeating) { +TEST_P(MainThreadSchedulerImplTest, TestLongIdlePeriodRepeating) { Vector<base::TimeTicks> actual_deadlines; int run_count = 0; @@ -2184,7 +2234,7 @@ EXPECT_EQ(4, run_count); } -TEST_F(MainThreadSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { +TEST_P(MainThreadSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { base::TimeTicks deadline_in_task; int run_count = 0; @@ -2212,7 +2262,7 @@ (*run_count)++; } -TEST_F(MainThreadSchedulerImplTest, CanExceedIdleDeadlineIfRequired) { +TEST_P(MainThreadSchedulerImplTest, CanExceedIdleDeadlineIfRequired) { int run_count = 0; bool can_exceed_idle_deadline = false; @@ -2262,7 +2312,7 @@ EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); } -TEST_F(MainThreadSchedulerImplTest, TestRendererHiddenIdlePeriod) { +TEST_P(MainThreadSchedulerImplTest, TestRendererHiddenIdlePeriod) { int run_count = 0; g_max_idle_task_reposts = 2; @@ -2294,14 +2344,14 @@ EXPECT_EQ(2, run_count); } -TEST_F(MainThreadSchedulerImplTest, TimerQueueEnabledByDefault) { +TEST_P(MainThreadSchedulerImplTest, TimerQueueEnabledByDefault) { Vector<String> run_order; PostTestTasks(&run_order, "T1 T2"); base::RunLoop().RunUntilIdle(); EXPECT_THAT(run_order, testing::ElementsAre("T1", "T2")); } -TEST_F(MainThreadSchedulerImplTest, StopAndResumeRenderer) { +TEST_P(MainThreadSchedulerImplTest, StopAndResumeRenderer) { Vector<String> run_order; PostTestTasks(&run_order, "T1 T2"); @@ -2314,7 +2364,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("T1", "T2")); } -TEST_F(MainThreadSchedulerImplTest, StopAndThrottleTimerQueue) { +TEST_P(MainThreadSchedulerImplTest, StopAndThrottleTimerQueue) { Vector<String> run_order; PostTestTasks(&run_order, "T1 T2"); @@ -2326,7 +2376,7 @@ EXPECT_THAT(run_order, testing::ElementsAre()); } -TEST_F(MainThreadSchedulerImplTest, ThrottleAndPauseRenderer) { +TEST_P(MainThreadSchedulerImplTest, ThrottleAndPauseRenderer) { Vector<String> run_order; PostTestTasks(&run_order, "T1 T2"); @@ -2338,7 +2388,7 @@ EXPECT_THAT(run_order, testing::ElementsAre()); } -TEST_F(MainThreadSchedulerImplTest, MultipleStopsNeedMultipleResumes) { +TEST_P(MainThreadSchedulerImplTest, MultipleStopsNeedMultipleResumes) { Vector<String> run_order; PostTestTasks(&run_order, "T1 T2"); @@ -2361,7 +2411,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("T1", "T2")); } -TEST_F(MainThreadSchedulerImplTest, PauseRenderer) { +TEST_P(MainThreadSchedulerImplTest, PauseRenderer) { // Tasks in some queues don't fire when the renderer is paused. Vector<String> run_order; PostTestTasks(&run_order, "D1 C1 L1 I1 T1"); @@ -2377,11 +2427,11 @@ EXPECT_THAT(run_order, testing::ElementsAre("L1", "T1")); } -TEST_F(MainThreadSchedulerImplTest, UseCaseToString) { +TEST_P(MainThreadSchedulerImplTest, UseCaseToString) { CheckAllUseCaseToString(); } -TEST_F(MainThreadSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) { +TEST_P(MainThreadSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) { // This should not DCHECK because there was no corresponding compositor side // call to DidHandleInputEventOnCompositorThread with // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the @@ -2391,7 +2441,7 @@ WebInputEventResult::kHandledSystem); } -TEST_F(MainThreadSchedulerImplTest, BeginMainFrameOnCriticalPath) { +TEST_P(MainThreadSchedulerImplTest, BeginMainFrameOnCriticalPath) { ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); viz::BeginFrameArgs begin_frame_args = viz::BeginFrameArgs::Create( @@ -2406,7 +2456,7 @@ ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); } -TEST_F(MainThreadSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { +TEST_P(MainThreadSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { main_frame_scheduler_.reset(); page_scheduler_.reset(); scheduler_->Shutdown(); @@ -2416,14 +2466,14 @@ EXPECT_THAT(run_order, testing::ElementsAre()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EstimateLongestJankFreeTaskDuration_UseCase_NONE) { EXPECT_EQ(UseCase::kNone, CurrentUseCase()); EXPECT_EQ(rails_response_time(), scheduler_->EstimateLongestJankFreeTaskDuration()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EstimateLongestJankFreeTaskDuration_UseCase_kCompositorGesture) { SimulateCompositorGestureStart(TouchEventPolicy::kDontSendTouchStart); EXPECT_EQ(UseCase::kCompositorGesture, @@ -2434,7 +2484,7 @@ // TODO(alexclarke): Reenable once we've reinstaed the Loading // UseCase. -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, DISABLED_EstimateLongestJankFreeTaskDuration_UseCase_) { scheduler_->DidStartProvisionalLoad(true); EXPECT_EQ(UseCase::kLoading, ForceUpdatePolicyAndGetCurrentUseCase()); @@ -2442,7 +2492,7 @@ scheduler_->EstimateLongestJankFreeTaskDuration()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_GESTURE) { SimulateMainThreadGestureStart(TouchEventPolicy::kSendTouchStart, blink::WebInputEvent::kGestureScrollUpdate); @@ -2468,7 +2518,7 @@ scheduler_->EstimateLongestJankFreeTaskDuration()); } -TEST_F( +TEST_P( MainThreadSchedulerImplTest, EstimateLongestJankFreeTaskDuration_UseCase_MAIN_THREAD_CUSTOM_INPUT_HANDLING) { viz::BeginFrameArgs begin_frame_args = viz::BeginFrameArgs::Create( @@ -2493,7 +2543,7 @@ scheduler_->EstimateLongestJankFreeTaskDuration()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, EstimateLongestJankFreeTaskDuration_UseCase_SYNCHRONIZED_GESTURE) { SimulateCompositorGestureStart(TouchEventPolicy::kDontSendTouchStart); @@ -2553,7 +2603,7 @@ } } // namespace -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, SYNCHRONIZED_GESTURE_TimerTaskThrottling_TimersStopped) { SimulateCompositorGestureStart(TouchEventPolicy::kSendTouchStart); @@ -2610,7 +2660,7 @@ EXPECT_EQ(2u, count); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, SYNCHRONIZED_GESTURE_TimerTaskThrottling_task_not_expensive) { SimulateCompositorGestureStart(TouchEventPolicy::kSendTouchStart); @@ -2648,7 +2698,7 @@ EXPECT_EQ(500u, count); } -TEST_F(MainThreadSchedulerImplTest, DenyLongIdleDuringTouchStart) { +TEST_P(MainThreadSchedulerImplTest, DenyLongIdleDuringTouchStart) { scheduler_->DidHandleInputEventOnCompositorThread( FakeTouchEvent(blink::WebInputEvent::kTouchStart), InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); @@ -2668,7 +2718,7 @@ EXPECT_GE(next_time_to_check, base::TimeDelta()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, TestCompositorPolicy_TouchStartDuringFling) { scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); scheduler_->DidAnimateForInputOnCompositorThread(); @@ -2684,7 +2734,7 @@ EXPECT_EQ(UseCase::kTouchstart, ForceUpdatePolicyAndGetCurrentUseCase()); } -TEST_F(MainThreadSchedulerImplTest, SYNCHRONIZED_GESTURE_CompositingExpensive) { +TEST_P(MainThreadSchedulerImplTest, SYNCHRONIZED_GESTURE_CompositingExpensive) { SimulateCompositorGestureStart(TouchEventPolicy::kSendTouchStart); // With the compositor task taking 20ms, there is not enough time to run @@ -2723,7 +2773,7 @@ EXPECT_EQ(1000u, run_order.size()); } -TEST_F(MainThreadSchedulerImplTest, MAIN_THREAD_CUSTOM_INPUT_HANDLING) { +TEST_P(MainThreadSchedulerImplTest, MAIN_THREAD_CUSTOM_INPUT_HANDLING) { SimulateMainThreadGestureStart(TouchEventPolicy::kSendTouchStart, blink::WebInputEvent::kGestureScrollBegin); @@ -2764,7 +2814,7 @@ EXPECT_EQ(1000u, run_order.size()); } -TEST_F(MainThreadSchedulerImplTest, MAIN_THREAD_GESTURE) { +TEST_P(MainThreadSchedulerImplTest, MAIN_THREAD_GESTURE) { SimulateMainThreadGestureStart(TouchEventPolicy::kDontSendTouchStart, blink::WebInputEvent::kGestureScrollBegin); @@ -2808,7 +2858,7 @@ MOCK_METHOD1(OnRAILModeChanged, void(RAILMode rail_mode)); }; -TEST_F(MainThreadSchedulerImplTest, TestResponseRAILMode) { +TEST_P(MainThreadSchedulerImplTest, TestResponseRAILMode) { MockRAILModeObserver observer; scheduler_->AddRAILModeObserver(&observer); EXPECT_CALL(observer, OnRAILModeChanged(RAILMode::kResponse)); @@ -2820,7 +2870,7 @@ scheduler_->RemoveRAILModeObserver(&observer); } -TEST_F(MainThreadSchedulerImplTest, TestAnimateRAILMode) { +TEST_P(MainThreadSchedulerImplTest, TestAnimateRAILMode) { MockRAILModeObserver observer; scheduler_->AddRAILModeObserver(&observer); EXPECT_CALL(observer, OnRAILModeChanged(RAILMode::kAnimation)).Times(0); @@ -2831,7 +2881,7 @@ scheduler_->RemoveRAILModeObserver(&observer); } -TEST_F(MainThreadSchedulerImplTest, TestIdleRAILMode) { +TEST_P(MainThreadSchedulerImplTest, TestIdleRAILMode) { MockRAILModeObserver observer; scheduler_->AddRAILModeObserver(&observer); EXPECT_CALL(observer, OnRAILModeChanged(RAILMode::kAnimation)); @@ -2846,7 +2896,7 @@ scheduler_->RemoveRAILModeObserver(&observer); } -TEST_F(MainThreadSchedulerImplTest, TestLoadRAILMode) { +TEST_P(MainThreadSchedulerImplTest, TestLoadRAILMode) { MockRAILModeObserver observer; scheduler_->AddRAILModeObserver(&observer); EXPECT_CALL(observer, OnRAILModeChanged(RAILMode::kAnimation)); @@ -2861,7 +2911,7 @@ scheduler_->RemoveRAILModeObserver(&observer); } -TEST_F(MainThreadSchedulerImplTest, InputTerminatesLoadRAILMode) { +TEST_P(MainThreadSchedulerImplTest, InputTerminatesLoadRAILMode) { MockRAILModeObserver observer; scheduler_->AddRAILModeObserver(&observer); EXPECT_CALL(observer, OnRAILModeChanged(RAILMode::kAnimation)); @@ -2882,7 +2932,7 @@ scheduler_->RemoveRAILModeObserver(&observer); } -TEST_F(MainThreadSchedulerImplTest, UnthrottledTaskRunner) { +TEST_P(MainThreadSchedulerImplTest, UnthrottledTaskRunner) { // Ensure neither suspension nor timer task throttling affects an unthrottled // task runner. SimulateCompositorGestureStart(TouchEventPolicy::kSendTouchStart); @@ -2927,7 +2977,7 @@ EXPECT_EQ(500u, unthrottled_count); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, VirtualTimePolicyDoesNotAffectNewTimerTaskQueueIfVirtualTimeNotEnabled) { scheduler_->SetVirtualTimePolicy( PageSchedulerImpl::VirtualTimePolicy::kPause); @@ -2936,7 +2986,7 @@ EXPECT_FALSE(timer_tq->HasActiveFence()); } -TEST_F(MainThreadSchedulerImplTest, EnableVirtualTime) { +TEST_P(MainThreadSchedulerImplTest, EnableVirtualTime) { EXPECT_FALSE(scheduler_->IsVirtualTimeEnabled()); scheduler_->EnableVirtualTime( MainThreadSchedulerImpl::BaseTimeOverridePolicy::DO_NOT_OVERRIDE); @@ -2998,7 +3048,7 @@ scheduler_->GetVirtualTimeDomain()); } -TEST_F(MainThreadSchedulerImplTest, EnableVirtualTimeAfterThrottling) { +TEST_P(MainThreadSchedulerImplTest, EnableVirtualTimeAfterThrottling) { std::unique_ptr<PageSchedulerImpl> page_scheduler = base::WrapUnique(new PageSchedulerImpl(nullptr, scheduler_.get())); scheduler_->AddPageScheduler(page_scheduler.get()); @@ -3019,7 +3069,7 @@ EXPECT_FALSE(scheduler_->task_queue_throttler()->IsThrottled(timer_tq)); } -TEST_F(MainThreadSchedulerImplTest, DisableVirtualTimeForTesting) { +TEST_P(MainThreadSchedulerImplTest, DisableVirtualTimeForTesting) { scheduler_->EnableVirtualTime( MainThreadSchedulerImpl::BaseTimeOverridePolicy::DO_NOT_OVERRIDE); @@ -3045,7 +3095,7 @@ EXPECT_FALSE(scheduler_->VirtualTimeControlTaskQueue()); } -TEST_F(MainThreadSchedulerImplTest, VirtualTimePauser) { +TEST_P(MainThreadSchedulerImplTest, VirtualTimePauser) { scheduler_->EnableVirtualTime( MainThreadSchedulerImpl::BaseTimeOverridePolicy::DO_NOT_OVERRIDE); scheduler_->SetVirtualTimePolicy( @@ -3066,7 +3116,7 @@ EXPECT_EQ(after, before); } -TEST_F(MainThreadSchedulerImplTest, VirtualTimePauserNonInstantTask) { +TEST_P(MainThreadSchedulerImplTest, VirtualTimePauserNonInstantTask) { scheduler_->EnableVirtualTime( MainThreadSchedulerImpl::BaseTimeOverridePolicy::DO_NOT_OVERRIDE); scheduler_->SetVirtualTimePolicy( @@ -3083,7 +3133,7 @@ EXPECT_GT(after, before); } -TEST_F(MainThreadSchedulerImplTest, VirtualTimeWithOneQueueWithoutVirtualTime) { +TEST_P(MainThreadSchedulerImplTest, VirtualTimeWithOneQueueWithoutVirtualTime) { // This test ensures that we do not do anything strange like stopping // processing task queues after we encountered one task queue with // DoNotUseVirtualTime trait. @@ -3129,7 +3179,7 @@ EXPECT_EQ(counter, kTaskQueueCount); } -TEST_F(MainThreadSchedulerImplTest, Tracing) { +TEST_P(MainThreadSchedulerImplTest, Tracing) { // This test sets renderer scheduler to some non-trivial state // (by posting tasks, creating child schedulers, etc) and converts it into a // traced value. This test checks that no internal checks fire during this. @@ -3182,7 +3232,7 @@ // // MaxEQT1 = 500ms is recorded and observed in histogram. // MaxEQT2 is recorded but not yet in histogram for not being flushed. -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, MaxQueueingTimeMetricRecordedOnlyDuringNavigation) { base::HistogramTester tester; // Start with a long task whose queueing time will be ignored. @@ -3202,7 +3252,7 @@ } // Only the max of all the queueing times is recorded. -TEST_F(MainThreadSchedulerImplTest, MaxQueueingTimeMetricRecordTheMax) { +TEST_P(MainThreadSchedulerImplTest, MaxQueueingTimeMetricRecordTheMax) { base::HistogramTester tester; scheduler_->DidCommitProvisionalLoad(false, false, false); // The smaller queuing time will be ignored. @@ -3215,7 +3265,7 @@ tester.ExpectUniqueSample("RendererScheduler.MaxQueueingTime", 500, 1); } -TEST_F(MainThreadSchedulerImplTest, DidCommitProvisionalLoad) { +TEST_P(MainThreadSchedulerImplTest, DidCommitProvisionalLoad) { scheduler_->OnFirstMeaningfulPaint(); EXPECT_FALSE(scheduler_->waiting_for_meaningful_paint()); @@ -3269,7 +3319,7 @@ EXPECT_TRUE(scheduler_->waiting_for_meaningful_paint()); // State cleared. } -TEST_F(MainThreadSchedulerImplTest, LoadingControlTasks) { +TEST_P(MainThreadSchedulerImplTest, LoadingControlTasks) { // Expect control loading tasks (M) to jump ahead of any regular loading // tasks (L). Vector<String> run_order; @@ -3279,7 +3329,7 @@ "L4", "L5", "L6")); } -TEST_F(MainThreadSchedulerImplTest, RequestBeginMainFrameNotExpected) { +TEST_P(MainThreadSchedulerImplTest, RequestBeginMainFrameNotExpected) { std::unique_ptr<PageSchedulerImplForTest> page_scheduler = std::make_unique<PageSchedulerImplForTest>(scheduler_.get()); scheduler_->AddPageScheduler(page_scheduler.get()); @@ -3301,7 +3351,7 @@ Mock::VerifyAndClearExpectations(page_scheduler.get()); } -TEST_F(MainThreadSchedulerImplTest, +TEST_P(MainThreadSchedulerImplTest, RequestBeginMainFrameNotExpected_MultipleCalls) { std::unique_ptr<PageSchedulerImplForTest> page_scheduler = std::make_unique<PageSchedulerImplForTest>(scheduler_.get()); @@ -3319,7 +3369,7 @@ } #if defined(OS_ANDROID) -TEST_F(MainThreadSchedulerImplTest, PauseTimersForAndroidWebView) { +TEST_P(MainThreadSchedulerImplTest, PauseTimersForAndroidWebView) { // Tasks in some queues don't fire when the timers are paused. Vector<String> run_order; PostTestTasks(&run_order, "D1 C1 L1 I1 T1"); @@ -3342,12 +3392,23 @@ CreateTestTaskRunner(); Initialize(std::make_unique<MainThreadSchedulerImplForTest>( base::sequence_manager::SequenceManagerForTest::Create( - nullptr, test_task_runner_, test_task_runner_->GetMockTickClock()), + nullptr, test_task_runner_, test_task_runner_->GetMockTickClock(), + base::sequence_manager::SequenceManager::Settings::Builder() + .SetRandomisedSamplingEnabled(true) + .SetAntiStarvationLogicForPrioritiesDisabled( + GetParam() == AntiStarvationLogic::kDisabled) + .Build()), base::Time::FromJsTime(1000000.0))); } }; -TEST_F(MainThreadSchedulerImplWithInitalVirtualTimeTest, VirtualTimeOverride) { +INSTANTIATE_TEST_SUITE_P(, + MainThreadSchedulerImplWithInitalVirtualTimeTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(MainThreadSchedulerImplWithInitalVirtualTimeTest, VirtualTimeOverride) { EXPECT_TRUE(scheduler_->IsVirtualTimeEnabled()); EXPECT_EQ(PageSchedulerImpl::VirtualTimePolicy::kPause, scheduler_->virtual_time_policy()); @@ -3365,7 +3426,13 @@ {}) {} }; -TEST_F(CompositingExperimentWithExplicitSignalsTest, CompositingAfterInput) { +INSTANTIATE_TEST_SUITE_P(, + CompositingExperimentWithExplicitSignalsTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(CompositingExperimentWithExplicitSignalsTest, CompositingAfterInput) { Vector<String> run_order; PostTestTasks(&run_order, "P1 T1 C1"); base::RunLoop().RunUntilIdle(); @@ -3401,7 +3468,13 @@ kUseWillBeginMainFrameForCompositingPrioritization}) {} }; -TEST_F(CompositingExperimentWithImplicitSignalsTest, CompositingAfterInput) { +INSTANTIATE_TEST_SUITE_P(, + CompositingExperimentWithImplicitSignalsTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(CompositingExperimentWithImplicitSignalsTest, CompositingAfterInput) { Vector<String> run_order; PostTestTasks(&run_order, "T1 C1 C2 P1 P2"); base::RunLoop().RunUntilIdle(); @@ -3409,7 +3482,7 @@ EXPECT_THAT(run_order, testing::ElementsAre("P1", "P2", "C1", "T1", "C2")); } -TEST_F(MainThreadSchedulerImplTest, EQTWithNestedLoop) { +TEST_P(MainThreadSchedulerImplTest, EQTWithNestedLoop) { AdvanceMockTickClockBy(base::TimeDelta::FromMilliseconds(100)); RunTask(base::BindLambdaForTesting([&] { @@ -3448,7 +3521,7 @@ base::TimeDelta::FromMicroseconds(400 + 50 + 50 + 1250))); } -TEST_F(MainThreadSchedulerImplTest, TaskQueueReferenceClearedOnShutdown) { +TEST_P(MainThreadSchedulerImplTest, TaskQueueReferenceClearedOnShutdown) { // Ensure that the scheduler clears its references to a task queue after // |shutdown| and doesn't try to update its policies. scoped_refptr<MainThreadTaskQueue> queue1 = scheduler_->NewTimerTaskQueue( @@ -3470,7 +3543,7 @@ EXPECT_EQ(queue2->GetTimeDomain(), scheduler_->GetVirtualTimeDomain()); } -TEST_F(MainThreadSchedulerImplTest, MicrotaskCheckpointTiming) { +TEST_P(MainThreadSchedulerImplTest, MicrotaskCheckpointTiming) { base::RunLoop().RunUntilIdle(); base::TimeTicks start_time = Now(); @@ -3505,7 +3578,13 @@ {}) {} }; -TEST_F(VeryHighPriorityForCompositingAlwaysExperimentTest, +INSTANTIATE_TEST_SUITE_P(, + VeryHighPriorityForCompositingAlwaysExperimentTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(VeryHighPriorityForCompositingAlwaysExperimentTest, TestCompositorPolicy) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2 P1"); @@ -3525,7 +3604,13 @@ {}) {} }; -TEST_F(VeryHighPriorityForCompositingWhenFastExperimentTest, +INSTANTIATE_TEST_SUITE_P(, + VeryHighPriorityForCompositingWhenFastExperimentTest, + testing::Values(AntiStarvationLogic::kEnabled, + AntiStarvationLogic::kDisabled), + GetTestNameSuffix); + +TEST_P(VeryHighPriorityForCompositingWhenFastExperimentTest, TestCompositorPolicy_FastCompositing) { Vector<String> run_order; PostTestTasks(&run_order, "I1 D1 C1 D2 C2 P1"); @@ -3537,7 +3622,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(VeryHighPriorityForCompositingWhenFastExperimentTest, +TEST_P(VeryHighPriorityForCompositingWhenFastExperimentTest, TestCompositorPolicy_SlowCompositing) { RunSlowCompositorTask(); Vector<String> run_order; @@ -3550,7 +3635,7 @@ EXPECT_EQ(UseCase::kNone, CurrentUseCase()); } -TEST_F(VeryHighPriorityForCompositingWhenFastExperimentTest, +TEST_P(VeryHighPriorityForCompositingWhenFastExperimentTest, TestCompositorPolicy_CompositingStaysAtHighest) { Vector<String> run_order; PostTestTasks(&run_order, "L1 I1 D1 C1 D2 P1 C2");
diff --git a/third_party/blink/tools/blinkpy/style/checkers/python.py b/third_party/blink/tools/blinkpy/style/checkers/python.py index c27fd9c6..329767d 100644 --- a/third_party/blink/tools/blinkpy/style/checkers/python.py +++ b/third_party/blink/tools/blinkpy/style/checkers/python.py
@@ -86,6 +86,7 @@ finder.path_from_chromium_base('third_party'), # for jinja2 finder.path_from_chromium_base('third_party', 'catapult', 'devil'), finder.path_from_chromium_base('third_party', 'pymock'), + finder.path_from_chromium_base('tools'), ]) return executive.run_command([ sys.executable,
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint index cc1c846..178b7a5 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint +++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint
@@ -441,9 +441,6 @@ crbug.com/940033 virtual/fractional_scrolling_threaded/fast/scrolling/wheel-scrolling-over-custom-scrollbar.html [ Failure ] crbug.com/940033 virtual/threaded/fast/scrolling/wheel-scrolling-over-custom-scrollbar.html [ Failure ] -crbug.com/918155 scrollbars/overlay-scrollbar-over-child-layer.html [ Failure ] -crbug.com/918155 virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbar-over-child-layer.html [ Failure ] - crbug.com/979389 ietestcenter/css3/bordersbackgrounds/background-attachment-local-scrolling.htm [ Failure ] # Crash during PictureLayer::GetPicture() when DisplayItemList is finished twice.
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 295a07c..84e45ce 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -245,6 +245,8 @@ crbug.com/414283 virtual/fractional_scrolling_threaded/fast/scrolling/fractional-scroll-offset-fixed-position-non-composited.html [ Failure ] crbug.com/414283 virtual/fractional_scrolling_threaded/fast/scrolling/fractional-scroll-offset-iframe-fixed-position.html [ Failure Pass ] +crbug.com/980969 [ Mac ] http/tests/input/discard-events-to-unstable-iframe.html [ Pass Failure ] + # Display locking, currently only available via a virtual test. crbug.com/882663 wpt_internal/display-lock [ Skip ] @@ -350,6 +352,7 @@ # Subpixel rounding differences that are incorrect. crbug.com/836886 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow.html [ Failure ] crbug.com/836886 compositing/overflow/scaled-overflow.html [ Failure ] +crbug.com/836886 compositing/scrollbars/nested-overlay-scrollbars.html [ Failure ] # Flaky subpixel AA difference (not necessarily incorrect, but flaky) crbug.com/921105 virtual/threaded/animations/skew-notsequential-compositor.html [ Failure Pass ] crbug.com/921105 virtual/disable-blink-gen-property-trees/animations/skew-notsequential-compositor.html [ Skip ] @@ -360,10 +363,6 @@ crbug.com/954591 external/wpt/css/css-transforms/composited-under-rotateY-180deg.html [ Failure ] crbug.com/954591 external/wpt/css/css-transforms/composited-under-rotateY-180deg-clip.html [ Failure ] -# Fixed in CompositeAfterPaint. -crbug.com/918155 virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbar-over-child-layer-nested-2.html [ Failure ] -crbug.com/918155 virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbar-over-child-layer-nested.html [ Failure ] - # ====== Paint team owned tests to here ====== crbug.com/922249 virtual/android/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure Pass ] @@ -2436,6 +2435,10 @@ crbug.com/626703 [ Win ] external/wpt/css/css-text/word-break/word-break-normal-lo-000.html [ Failure ] crbug.com/626703 external/wpt/css/css-text/word-break/word-break-normal-tdd-000.html [ Failure ] +crbug.com/972992 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html [ Failure ] +crbug.com/972992 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html [ Failure ] +crbug.com/974371 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html [ Failure ] + # The 'overflow-wrap: anywhere' feature is not implemented yet crbug.com/905315 external/wpt/css/css-text/overflow-wrap/overflow-wrap-anywhere-001.html [ Skip ] crbug.com/905315 external/wpt/css/css-text/overflow-wrap/overflow-wrap-anywhere-002.html [ Skip ] @@ -2915,8 +2918,6 @@ crbug.com/453002 [ Win ] fast/text/justify-ideograph-vertical.html [ Failure Pass ] crbug.com/453002 [ Win ] fast/text/orientation-sideways.html [ Failure Pass ] -crbug.com/600248 external/wpt/web-animations/interfaces/Animation/oncancel.html [ Pass Failure ] - crbug.com/611658 [ Win7 ] fast/forms/text/text-font-height-mismatch.html [ Failure ] crbug.com/611658 [ Win ] fast/text/emphasis-combined-text.html [ Failure ] @@ -3202,6 +3203,25 @@ crbug.com/968164 external/wpt/css/css-ui/webkit-appearance-menulist-button-001.html [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html [ Failure ] +crbug.com/626703 external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html [ Failure ] crbug.com/626703 [ Win7 ] external/wpt/referrer-policy/unsafe-url/attr-referrer/same-origin/http-http/img-tag/swap-origin-redirect/generic.http.html [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html [ Timeout ] crbug.com/626703 [ Win7 ] external/wpt/referrer-policy/unset-referrer-policy/attr-referrer/cross-origin/http-http/img-tag/swap-origin-redirect/insecure-protocol.http.html [ Timeout ] @@ -3791,9 +3811,7 @@ crbug.com/626703 external/wpt/mediacapture-record/MediaRecorder-destroy-script-execution.html [ Timeout ] crbug.com/626703 external/wpt/css/css-text/white-space/trailing-ideographic-space-002.html [ Failure ] crbug.com/626703 external/wpt/css/css-text/white-space/trailing-ideographic-space-004.html [ Failure ] -crbug.com/626703 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html [ Failure ] crbug.com/626703 external/wpt/css/css-fonts/variations/font-descriptor-range-reversed.html [ Failure ] -crbug.com/626703 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html [ Failure ] crbug.com/626703 external/wpt/html/rendering/replaced-elements/the-select-element/select-1-line-height.html [ Failure ] crbug.com/626703 external/wpt/css/css-will-change/will-change-abspos-cb-dynamic-001.html [ Failure ] crbug.com/626703 external/wpt/css/css-will-change/will-change-abspos-cb-001.html [ Failure ] @@ -6112,6 +6130,7 @@ # Allow failure until its appearance gets stable. crbug.com/972476 std-switch/switch-appearance.html [ Failure ] +crbug.com/972476 std-switch/switch-appearance-customization.html [ Failure ] # Sheriff 2019-05-20 crbug.com/963739 [ Fuchsia ] synthetic_gestures/smooth-scroll-tiny-delta.html [ Pass Timeout ] @@ -6198,6 +6217,8 @@ # Sheriff 2019-06-26 crbug.com/978966 [ Mac ] paint/markers/ellipsis-mixed-text-in-ltr-flow-with-markers.html [ Pass Failure ] +crbug.com/979253 external/wpt/css/css-pseudo/first-line-with-out-of-flow.html [ Failure ] + # Sheriff 2019-06-27 crbug.com/979193 [ Mac ] paint/invalidation/svg/relative-sized-use-on-symbol.xhtml [ Pass Failure ] crbug.com/979193 [ Mac ] paint/invalidation/svg/remove-background-property-on-root.html [ Pass Failure ] @@ -6213,5 +6234,10 @@ crbug.com/979593 [ Linux Win ] virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/registration-schedule-job.https.html [ Pass Failure ] crbug.com/979593 [ Linux Win ] virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/registration-schedule-job.https.html [ Pass Failure ] +# Sheriff 2019-07-03 +crbug.com/979490 [ Linux Win ] virtual/omt-worker-fetch/external/wpt/workers/modules/dedicated-worker-import-referrer.html [ Pass Timeout ] +crbug.com/980924 [ Linux Win Debug ] external/wpt/html/cross-origin/null.tentative.html [ Pass Failure ] +crbug.com/980283 [ Mac ] virtual/gpu/fast/canvas/image-object-in-canvas.html [ Pass Failure ] + # TODO(crbug.com/980588): reenable once WPT is fixed crbug.com/980588 external/wpt/screen-orientation/lock-unlock-check.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child.html b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child.html index 54f3f8b..45beb68 100644 --- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child.html +++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child.html
@@ -43,9 +43,9 @@ } </style> <div class="outer"> - <div class="scroller"> - <div class="content"></div> - </div> +<div class="scroller"> +<div class="content"></div> +</div> </div> <script> if (window.testRunner) {
diff --git a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.png b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.png index 1fa1711d..219172d 100644 --- a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.png +++ b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt index 32b2959..abd8db5 100644 --- a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -18,7 +18,7 @@ "backgroundColor": "#FFFFFF" }, { - "name": "LayoutNGBlockFlow (positioned) DIV id='outer'", + "name": "LayoutBlockFlow (positioned) DIV id='outer'", "position": [8, 8], "bounds": [404, 404] }, @@ -35,7 +35,7 @@ "transform": 1 }, { - "name": "LayoutNGBlockFlow (positioned) DIV id='inner'", + "name": "LayoutBlockFlow (positioned) DIV id='inner'", "position": [10, 510], "bounds": [204, 204], "transform": 1 @@ -60,7 +60,7 @@ "transform": 1 }, { - "name": "LayoutNGBlockFlow (positioned) DIV id='grey'", + "name": "LayoutBlockFlow (positioned) DIV id='grey'", "position": [12, 512], "bounds": [100, 800], "contentsOpaque": true, @@ -68,7 +68,7 @@ "transform": 1 }, { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='spacer')", + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')", "position": [12, 2512], "bounds": [5000, 1000], "transform": 1
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json index f4e47aa..7ec3f6e 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -68793,6 +68793,234 @@ {} ] ], + "css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-bold-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-script-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-script-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html": [ + [ + "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html", + [ + [ + "/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/text-transform/text-transform-capitalize-001.html": [ [ "css/css-text/text-transform/text-transform-capitalize-001.html", @@ -71657,6 +71885,42 @@ {} ] ], + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html": [ + [ + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html", + [ + [ + "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html": [ + [ + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html", + [ + [ + "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html": [ + [ + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html", + [ + [ + "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ [ "css/css-text/white-space/white-space-wrap-after-nowrap-001.html", @@ -115131,6 +115395,18 @@ {} ] ], + "mathml/relations/css-styling/mathvariant-auto.html": [ + [ + "mathml/relations/css-styling/mathvariant-auto.html", + [ + [ + "/mathml/relations/css-styling/mathvariant-auto-ref.html", + "==" + ] + ], + {} + ] + ], "mathml/relations/css-styling/mathvariant-bold-fraktur.html": [ [ "mathml/relations/css-styling/mathvariant-bold-fraktur.html", @@ -141233,6 +141509,63 @@ "css/css-text/text-justify/reference/text-justify-ref-001.html": [ [] ], + "css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-bold-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html": [ + [] + ], + "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html": [ + [] + ], "css/css-text/text-transform/reference/text-transform-capitalize-001-ref.html": [ [] ], @@ -141578,6 +141911,9 @@ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html": [ [] ], + "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html": [ + [] + ], "css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [ [] ], @@ -145940,6 +146276,9 @@ "css/cssom-view/resources/iframe2.html": [ [] ], + "css/cssom-view/scrollIntoView-direction-rtl-expected.txt": [ + [] + ], "css/cssom-view/scrollTop-display-change-ref.html": [ [] ], @@ -160511,6 +160850,9 @@ "mathml/relations/css-styling/mathsize-attribute-ref.html": [ [] ], + "mathml/relations/css-styling/mathvariant-auto-ref.html": [ + [] + ], "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [ [] ], @@ -172112,9 +172454,6 @@ "wake-lock/wakelock-state-is-global.https-expected.txt": [ [] ], - "wake-lock/wakelock-type.https-expected.txt": [ - [] - ], "wake-lock/wakelock-type.https.any.worker-expected.txt": [ [] ], @@ -211778,6 +212117,12 @@ {} ] ], + "css/cssom-view/scrollIntoView-direction-rtl.html": [ + [ + "css/cssom-view/scrollIntoView-direction-rtl.html", + {} + ] + ], "css/cssom-view/scrollIntoView-scrollMargin.html": [ [ "css/cssom-view/scrollIntoView-scrollMargin.html", @@ -375813,6 +376158,158 @@ "afbc036cce43268a4764e3dea75190a0ed44be3c", "visual" ], + "css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html": [ + "d41d618769e85a581ceada90e020d6fc979ad7d5", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html": [ + "d47cbf8abdb0713385fda7ac8b706fde0efa0474", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html": [ + "1c1d6e2770b116a083b1b6a9f892737b9fe42804", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html": [ + "86c1ea17c76b40a0a69ab1daf1ad563e810e4dcc", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-bold-001.tentative-ref.html": [ + "24b83003346051d35a7b769dc1bd95da14333269", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html": [ + "613cee6dc2e74f45d3cd227eb5960c66b7b4fdab", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html": [ + "36339bdd46de28d5d788391990e788bb75fd1d89", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html": [ + "a90f22bfbd280fabe2d12df7bf5bd2d7cbe0063f", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html": [ + "e4e70cf80361962930ab717021cf8b302a8a0f5e", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html": [ + "2de6be10a70552dd61fdb3f5d2d17a3f81e7041e", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html": [ + "e83fa69f01ae6b2e715f87b5ce6208970527fc28", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html": [ + "53c6314a82b35dcb5ed113a822b61f9210d115be", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html": [ + "1b5a74c9e82f6d995c8b558f70d8ae1840bc390c", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html": [ + "7786fc4751469d4c3c476995b39609ccbbf15dfb", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html": [ + "09f137a6242c31070665859827199cd2ed6f1f64", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html": [ + "bfca421f86912ae7163ab065ed065cfd63b68b68", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html": [ + "09ea7049898e228d4c22dbd25d0cea05613dd12c", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html": [ + "16a7909164e72ea9f27f7b4c41d1ed76b9256f82", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html": [ + "0c15bca02e99cf8d705b2720fec0cde4b85b87f3", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html": [ + "1de22315d0dfb4870d5ee218dfdc6312ca6cc8de", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html": [ + "e1a90faf3830652762652b763e4275a1b6033611", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html": [ + "b98e353aed0f9c9eb18b00b12a4223542fc4c318", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html": [ + "89b52e2e81778d3a2ce350dc954a72cdb95b66da", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html": [ + "e46fb3336cf50cc87120db6615b3359136f1be35", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html": [ + "e254e1c0d21df41a573694c5688ae07b40c76299", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html": [ + "6f6b44e4dde2390680e2952c5e85b0ecdafea68b", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html": [ + "8b75a6f8e1e0a9a6fb969e341e2c770015b7d1ce", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html": [ + "b73b81d68ce4a7604301a527f6392c43ba8b49a8", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html": [ + "7f71dc40e35aa9fa6add1492c103939162ac1300", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html": [ + "9a686d0ec77894f8551fb2690ff8c4506d8cf008", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html": [ + "f352596b6b953ee46f9886f300e56654e7bfddad", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html": [ + "c312cf662f19c5b8933142c3765b8da9addb4333", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html": [ + "6cbe296dfb72e50fc81d284aa88814a8ed03703f", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-script-001.tentative.html": [ + "130d7a054a6c6da6488a72016e8d85c59fbbd54a", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html": [ + "e4fa35e810cd10edb2b45e3158c9d0cda82edde1", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html": [ + "de0af7282ab664073af8103fa13f56280b25caad", + "reftest" + ], + "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html": [ + "7a1c9b0056899926c4f1dc91508fc10b6f833fdf", + "support" + ], + "css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html": [ + "24fa40bed2a69a7032ed8c83f5a5336ef7778e47", + "reftest" + ], "css/css-text/text-transform/reference/text-transform-capitalize-001-ref.html": [ "855ec1e87a9434dbedf9248e492ab125ef6fac6c", "support" @@ -377097,6 +377594,10 @@ "1b50b667c03adae2db1f985e847b0106f9c6ad07", "support" ], + "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html": [ + "72e4642022af70b543990934c615471600b2bd46", + "support" + ], "css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [ "80b2260cbbe6122e90c297ab1f2cd83917712030", "support" @@ -377345,6 +377846,18 @@ "15e47a7adba3d4fc5534eab8811e3c91518aa771", "reftest" ], + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html": [ + "becd4638eb068b26c00851390e393026796d7675", + "reftest" + ], + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html": [ + "f62e2e5c005d4043c02894eed87422fa6c59b824", + "reftest" + ], + "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html": [ + "820012e6ca10dec9065f7c5869c47b065b426033", + "reftest" + ], "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ "a484f1cf9167e468063cf2205493b8e71a254470", "reftest" @@ -396361,6 +396874,14 @@ "cc67ce76ed9d432656b37c9c81a20e86d1bafc8d", "testharness" ], + "css/cssom-view/scrollIntoView-direction-rtl-expected.txt": [ + "cbfe97a493f80136be713bbcc32e2a52b56dd8f6", + "support" + ], + "css/cssom-view/scrollIntoView-direction-rtl.html": [ + "fea92d1da5700ee0b1888941737cec9fbf9e98be", + "testharness" + ], "css/cssom-view/scrollIntoView-scrollMargin.html": [ "930702aa8792506df50120feaca86d3f76bc1a02", "testharness" @@ -396382,7 +396903,7 @@ "testharness" ], "css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [ - "4d67b4de3d4c754259213976aa8401bf13408a68", + "56bcf214517d5220d53939fc25316ab5d6fe3da6", "testharness" ], "css/cssom-view/scrollTop-display-change-ref.html": [ @@ -438601,140 +439122,148 @@ "803f236a6a9dc241d978393c3305c9770ad4786d", "reftest" ], + "mathml/relations/css-styling/mathvariant-auto-ref.html": [ + "f8eaf7a7751b68c7a0108420b4789cd6fba8a6b3", + "support" + ], + "mathml/relations/css-styling/mathvariant-auto.html": [ + "3390fc0f733789ef09444e2e131c724ae4388c3a", + "reftest" + ], "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [ - "b883b12b57dbc99c0049ba98c8d3574524c42505", + "44588948e7b85bae66a93de09bdff83be4acf4ce", "support" ], "mathml/relations/css-styling/mathvariant-bold-fraktur.html": [ - "8085ad50832e0e14d3eee810cf32410e6c6d7707", + "2bfb8b7d201b3d2cad7c9d7ca1471cfdd3e0e60d", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-italic-ref.html": [ - "1e71e89663698ea8e20a4ca20f1ab7879cf3ce60", + "c5eaa22e196c7e8858b0faeb6c35b0becade641d", "support" ], "mathml/relations/css-styling/mathvariant-bold-italic.html": [ - "1e1b0b0debd74e228f72df7e5a10040a9bcb3aea", + "5454b8623b93dacfb1ba80554688641da78817e1", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-ref.html": [ - "11cb2de250d689ca933f82939dad284e680aaf93", + "3a727872d6e285b1544764c2c0f46ce2d141a001", "support" ], "mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html": [ - "a57fd18bf2229eb538bd5b14ea5d7986c50738a1", + "ec292b8e91493bde90049a2d2de7af6882d5f5d3", "support" ], "mathml/relations/css-styling/mathvariant-bold-sans-serif.html": [ - "cd6cc7a0c5009d726f99c6a43b7304b8fd453be7", + "112c29216b2558c10953b5143778bf0c3bf67373", "reftest" ], "mathml/relations/css-styling/mathvariant-bold-script-ref.html": [ - "4203861f707f76a6ed949847451ff09e97bb8ebd", + "ef11f7fb8fabd25dd94cdb84ae8791083a8a66fc", "support" ], "mathml/relations/css-styling/mathvariant-bold-script.html": [ - "8ff7556dacd0496927b8d52e367d9e9150c4892d", + "47cf0160cef69eea82dfdd53daf428ef7315ff87", "reftest" ], "mathml/relations/css-styling/mathvariant-bold.html": [ - "f11594f82707a86f964c9a0aa2c1cfede0fabdb0", + "a14fadfdf7e408e204472aee047a08e86efaf03e", "reftest" ], "mathml/relations/css-styling/mathvariant-double-struck-ref.html": [ - "56db2591daed0f839645de0bfe0c24e22489ba39", + "686aa492e0f08ef340ae3de7c1856170743cfe72", "support" ], "mathml/relations/css-styling/mathvariant-double-struck.html": [ - "856672bcecd8f80249ab910ced30ece8c48171ac", + "4650617f93ee61fb78c833f6a50edbf475cfd8f4", "reftest" ], "mathml/relations/css-styling/mathvariant-fraktur-ref.html": [ - "5e0721cfcea5b61c267bb194c6bd1260d1388167", + "3d1dd50a7d4a3145bbc9d5b3b8507a06c7e21373", "support" ], "mathml/relations/css-styling/mathvariant-fraktur.html": [ - "8ef57a0e2b98c7daec4e7c9473803e18f81aa42f", + "72f20b78c68e40428ddc2572edbdb973dc18f861", "reftest" ], "mathml/relations/css-styling/mathvariant-initial-ref.html": [ - "722ce5f657da127eb9cbe31241a3728cbc11eaa7", + "597277aaec3c987280844e17fd4c497b8fce2436", "support" ], "mathml/relations/css-styling/mathvariant-initial.html": [ - "de4b89f7f5a5547eb3dccd66035125d604c64679", + "4f35d3847b9bd649b54e21bb757a68e5c72b6754", "reftest" ], "mathml/relations/css-styling/mathvariant-italic-ref.html": [ - "70643b3e61104ee6a6e79920d2c196e06233bab5", + "f503794efb1058fc5bdf904335e701931015e400", "support" ], "mathml/relations/css-styling/mathvariant-italic.html": [ - "4cf3de045630d50b933d0cd29b527ecdcb610d12", + "f30a2c7d84e7b555e876681c48d3d8cef96ca0c6", "reftest" ], "mathml/relations/css-styling/mathvariant-looped-ref.html": [ - "49bafef99b8420cbf01213e520acad24186af2f2", + "12ccb490a1f33d5477eeefa35d99472b43c9a328", "support" ], "mathml/relations/css-styling/mathvariant-looped.html": [ - "2a774c7716cb324f7627c3484af5e07228bccad6", + "a6732249a03dd797d7665e7564ca5f39b19f0d28", "reftest" ], "mathml/relations/css-styling/mathvariant-monospace-ref.html": [ - "9b695a1a447b7368eae8d50d0a98b9dcc5502754", + "bfa672afe535b2c3f004987b9badd2c79bc01258", "support" ], "mathml/relations/css-styling/mathvariant-monospace.html": [ - "1c23630ecf744436b83bd1baafd3e5f7e14fabb7", + "9e76b10e9dafe0298360acc3c687dd3387cf79ef", "reftest" ], "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html": [ - "f8ef62bd6a2f466df8a97cf6760ff9dd903201fe", + "2b992affe5d780abe7fe909554f06786f399d515", "support" ], "mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html": [ - "f67a6ab6db254d01e8000e774d40f406e8c47b78", + "832fd15b7bd3b66ee86698bd7ff42757db4dd188", "reftest" ], "mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html": [ - "b82cde87e294cb5fe62d0f7d667489ce9228e782", + "d7e23248c69bb203f47bd491e96a52865f4c63fc", "support" ], "mathml/relations/css-styling/mathvariant-sans-serif-italic.html": [ - "ab43df50c568d1fbb48bd7e9a65bb0623eb29978", + "77117986a384c5241c0dd891a5c9ff8a7449c854", "reftest" ], "mathml/relations/css-styling/mathvariant-sans-serif-ref.html": [ - "35e4b6567d2512a3a9e676a0d233c3ead8714ca8", + "1087565b42d79985ee55b0a9334c6ec71a081812", "support" ], "mathml/relations/css-styling/mathvariant-sans-serif.html": [ - "bfee81c0cb6825c83ee7ddd14c3d96994fc28d6b", + "afceecf6cd38287d848e61ba315c060954a87d6d", "reftest" ], "mathml/relations/css-styling/mathvariant-script-ref.html": [ - "725268a84e5ae12e7d75116ce518bd637de790a7", + "60ced85bc3a64735d4ce78fd6027ffd04451346c", "support" ], "mathml/relations/css-styling/mathvariant-script.html": [ - "dd7ab6a06db11746ce39a23ca11728090f23fefc", + "c7f93a8d6a051ff859c2f534dec33fad500905ab", "reftest" ], "mathml/relations/css-styling/mathvariant-stretched-ref.html": [ - "1450e19edf0ac6b73583d2abb7a3d921cec754f6", + "8ad8f7b9bb6df8cdb8f9cb14308cc5df76cd5614", "support" ], "mathml/relations/css-styling/mathvariant-stretched.html": [ - "8530c6880481f1629482902b2fdcb7205841c0a8", + "e2c828615a2864266c6f8b4771f70b6c1c91d5d9", "reftest" ], "mathml/relations/css-styling/mathvariant-tailed-ref.html": [ - "b8e6160fea526756851c77aa637e01abbc25aded", + "5273a28e6bf54411603d9d437aecd5e1ffcfd93d", "support" ], "mathml/relations/css-styling/mathvariant-tailed.html": [ - "823438ec12ae909a222f7b1a17872e6b577ce771", + "fa8bea41f470bbe83441bdea2693cd16b9b01320", "reftest" ], "mathml/relations/css-styling/visibility-1-ref.html": [ @@ -438886,7 +439415,7 @@ "support" ], "mathml/tools/mathvariant-transforms.py": [ - "51c7c187a170731aee47b3366bd8ce23a73f3611", + "cb863398f6ec753a3286e62c80f2c9e01adcc7e8", "support" ], "mathml/tools/percentscaledown.py": [ @@ -461274,7 +461803,7 @@ "support" ], "resize-observer/observe.html": [ - "ab7521cf72b697bb334977c6ab83cff8957844f4", + "7360264e6baff7b468c09ebf71e39c1936c2597c", "testharness" ], "resize-observer/resources/iframe.html": [ @@ -476685,10 +477214,6 @@ "d6289fff43c8717ac6e9ace59713e6fd70bd249d", "testharness" ], - "wake-lock/wakelock-type.https-expected.txt": [ - "409d107ad314e8b92d69fd27e40f2e6a89c9c63c", - "support" - ], "wake-lock/wakelock-type.https.any.js": [ "cc37c768272512ec412fb749cebd77afa8662ac3", "testharness" @@ -477826,11 +478351,11 @@ "testharness" ], "web-nfc/NFCWriter_push.https-expected.txt": [ - "7495de78b148dd6ebcd3c3bc2ba9a315c326dbb0", + "e7939625a7ed3ef5c68aedc893d5f07104cc2b9d", "support" ], "web-nfc/NFCWriter_push.https.html": [ - "f5bbfcd6194d02330ac25fddb09d89bfd0e54b57", + "5a14b4090afe7b7850a36129eb3f882ac1886267", "testharness" ], "web-nfc/NFCWriter_push_signal-manual.https-expected.txt": [ @@ -477854,7 +478379,7 @@ "testharness" ], "web-nfc/nfc_hw_disabled-manual.https-expected.txt": [ - "21c4cb1c3cdb39147f12b88075f0a85a889f3994", + "fd955dd5886bc597b07ff0d05dd4f70ba106c160", "support" ], "web-nfc/nfc_hw_disabled-manual.https.html": [
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/idlharness.any-expected.txt b/third_party/blink/web_tests/external/wpt/animation-worklet/idlharness.any-expected.txt index b6515dd..1bfd805 100644 --- a/third_party/blink/web_tests/external/wpt/animation-worklet/idlharness.any-expected.txt +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/idlharness.any-expected.txt
@@ -13,7 +13,7 @@ FAIL WorkletAnimation interface: existence and properties of interface prototype object assert_equals: prototype of WorkletAnimation.prototype is not Animation.prototype expected object "[object Animation]" but got object "[object Object]" PASS WorkletAnimation interface: existence and properties of interface prototype object's "constructor" property PASS WorkletAnimation interface: existence and properties of interface prototype object's @@unscopables property -FAIL WorkletAnimation interface: attribute animatorName assert_true: The prototype object must have a property "animatorName" expected true got false +PASS WorkletAnimation interface: attribute animatorName FAIL WorkletAnimation must be primary interface of new WorkletAnimation("name") assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Failed to construct 'WorkletAnimation': 2 arguments required, but only 1 present." FAIL Stringification of new WorkletAnimation("name") assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Failed to construct 'WorkletAnimation': 2 arguments required, but only 1 present." FAIL WorkletAnimation interface: new WorkletAnimation("name") must inherit property "animatorName" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Failed to construct 'WorkletAnimation': 2 arguments required, but only 1 present."
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-animator-name.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-animator-name.https.html new file mode 100644 index 0000000..bd886cc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-animator-name.https.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> + +<title>Worklet Animation's animator name should be accessible via animatorName property</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="common.js"></script> + +<script id="test_animator" type="text/worklet"> + class NoopAnimator { + animate(currentTime, effect) {} + } + registerAnimator('Tokyo', NoopAnimator); + registerAnimator('دزفول', NoopAnimator); +</script> + +<body></body> + +<script> +promise_test(async t => { + await runInAnimationWorklet(document.getElementById('test_animator').textContent); + + // An ascii name and a non-ascii one. + for (let name of ['Tokyo', 'دزفول']) { + const animation = new WorkletAnimation(name, new KeyframeEffect(document.body, {})); + assert_equals(name, animation.animatorName); + } +}, 'Verify that animatorName matches passed name'); +</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/hidpi/canvas-transform-ref.html b/third_party/blink/web_tests/external/wpt/css/css-paint-api/hidpi/canvas-transform-ref.html new file mode 100644 index 0000000..48d46e8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/hidpi/canvas-transform-ref.html
@@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<body> +<canvas id ="canvas" width="540" height="550"></canvas> +<script> +var canvas = document.getElementById('canvas'); +canvas.style.width = (canvas.width / devicePixelRatio) + 'px'; +canvas.style.height = (canvas.height / devicePixelRatio) + 'px'; +var ctx = canvas.getContext("2d"); +ctx.scale(devicePixelRatio, devicePixelRatio); +var fillW = 250; +var fillH = 50; +ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 100); +ctx.beginPath(); +ctx.rect(0, 0, fillW, fillH); +ctx.closePath(); +ctx.clip(); +ctx.fillStyle = 'green'; +ctx.fillRect(0, 0, fillW, fillH); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-paint-api/hidpi/canvas-transform.https.html b/third_party/blink/web_tests/external/wpt/css/css-paint-api/hidpi/canvas-transform.https.html new file mode 100644 index 0000000..d160a86 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-paint-api/hidpi/canvas-transform.https.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/#dom-css-paintworklet"> +<link rel="match" href="canvas-transform-ref.html"> +<style> +.container { + width: 270px; + height: 275px; +} + +#canvas-geometry { + background-image: paint(geometry); +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> +<body> +<div id="canvas-geometry" class="container"></div> + +<script id="code" type="text/worklet"> +// Regression test for crbug.com/970783. The canvas transform matrix should +// account for the devicePixelRatio, such that the clip bounds can be +// properly computed when applying clips. +registerPaint('geometry', class { + paint(ctx, geom) { + var fillW = 250; + var fillH = 50; + ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 100); + ctx.beginPath(); + ctx.rect(0, 0, fillW, fillH); + ctx.closePath(); + ctx.clip(); + ctx.fillStyle = 'green'; + ctx.fillRect(0, 0, fillW, fillH); + } +}); +</script> + +<script> + importWorkletAndTerminateTestAfterAsyncPaint(CSS.paintWorklet, document.getElementById('code').textContent); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-nested-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-nested-ref.html new file mode 100644 index 0000000..84becd9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-nested-ref.html
@@ -0,0 +1,2 @@ +<!DOCTYPE html> +<p style="color: blue">Blue <span style="color: green">This text should be green.</span> Blue</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-nested.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-nested.html new file mode 100644 index 0000000..4a58f1e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-nested.html
@@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> +<link rel="match" href="first-line-change-inline-color-nested-ref.html"> +<style> + #block { color: green; } + #block::first-line { color: blue; } + .green { color: green; } +</style> +<div id="block"> + <div> + <p>Blue <span id="target"><span>This text should be green.</span></span> Blue</p> + </div> +</div> +<script> +requestAnimationFrame(() => { + requestAnimationFrame(() => { + target.className = 'green'; + document.documentElement.removeAttribute('class'); + }); +}); +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-ref.html new file mode 100644 index 0000000..84becd9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color-ref.html
@@ -0,0 +1,2 @@ +<!DOCTYPE html> +<p style="color: blue">Blue <span style="color: green">This text should be green.</span> Blue</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color.html new file mode 100644 index 0000000..2a5be916 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-change-inline-color.html
@@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> +<link rel="match" href="first-line-change-inline-color-ref.html"> +<style> + #block { color: green; } + #block::first-line { color: blue; } + .green { color: green; } +</style> +<div id="block"> + <div> + <p>Blue <span id="target">This text should be green.</span> Blue</p> + </div> +</div> +<script> +requestAnimationFrame(() => { + requestAnimationFrame(() => { + target.className = 'green'; + document.documentElement.removeAttribute('class'); + }); +}); +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-on-ancestor-block-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-on-ancestor-block-ref.html new file mode 100644 index 0000000..7193bf25 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-on-ancestor-block-ref.html
@@ -0,0 +1,5 @@ +<!DOCTYPE html> +<div> + <span style="color: green">This text should be green.</span><br> + <span style="color: blue">This text should be blue.</span> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-on-ancestor-block.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-on-ancestor-block.html new file mode 100644 index 0000000..6b797107 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-on-ancestor-block.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> +<link rel="match" href="first-line-on-ancestor-block-ref.html"> +<style> + #block::first-line { color: green; } +</style> +<div id="block"> + <div> + <div style="color: blue"> + <div> + <span><span>This text should be green.</span></span><br> + This text should be blue. + </div> + </div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-with-out-of-flow-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-with-out-of-flow-ref.html new file mode 100644 index 0000000..7193bf25 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-with-out-of-flow-ref.html
@@ -0,0 +1,5 @@ +<!DOCTYPE html> +<div> + <span style="color: green">This text should be green.</span><br> + <span style="color: blue">This text should be blue.</span> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-with-out-of-flow.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-with-out-of-flow.html new file mode 100644 index 0000000..798ecf8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-with-out-of-flow.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> +<link rel="match" href="first-line-with-out-of-flow-ref.html"> +<style> + #block::first-line { color: green; } +</style> +<div id="block"> + <div style="position: absolute"><br></div> + <div style="float: right"><br></div> + <div> + <div style="position: absolute"><br></div> + <div style="float: right"><br></div> + <div style="color: blue"> + <div> + <span><span>This text should be green.</span></span><br> + This text should be blue. + </div> + </div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html new file mode 100644 index 0000000..d41d6187 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative-ref.html
@@ -0,0 +1,139 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-auto (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝜕</span>=<span>1D715</span></span> + <span><span class="testfont">𝛻</span>=<span>1D6FB</span></span> + <span><span class="testfont">𝚥</span>=<span>1D6A5</span></span> + <span><span class="testfont">𝐴</span>=<span>1D434</span></span> + <span><span class="testfont">𝐵</span>=<span>1D435</span></span> + <span><span class="testfont">𝐶</span>=<span>1D436</span></span> + <span><span class="testfont">𝐷</span>=<span>1D437</span></span> + <span><span class="testfont">𝐸</span>=<span>1D438</span></span> + <span><span class="testfont">𝐹</span>=<span>1D439</span></span> + <span><span class="testfont">𝐺</span>=<span>1D43A</span></span><br/> + <span><span class="testfont">𝐻</span>=<span>1D43B</span></span> + <span><span class="testfont">𝐼</span>=<span>1D43C</span></span> + <span><span class="testfont">𝐽</span>=<span>1D43D</span></span> + <span><span class="testfont">𝐾</span>=<span>1D43E</span></span> + <span><span class="testfont">𝐿</span>=<span>1D43F</span></span> + <span><span class="testfont">𝑀</span>=<span>1D440</span></span> + <span><span class="testfont">𝑁</span>=<span>1D441</span></span> + <span><span class="testfont">𝑂</span>=<span>1D442</span></span> + <span><span class="testfont">𝑃</span>=<span>1D443</span></span> + <span><span class="testfont">𝑄</span>=<span>1D444</span></span><br/> + <span><span class="testfont">𝑅</span>=<span>1D445</span></span> + <span><span class="testfont">𝑆</span>=<span>1D446</span></span> + <span><span class="testfont">𝑇</span>=<span>1D447</span></span> + <span><span class="testfont">𝑈</span>=<span>1D448</span></span> + <span><span class="testfont">𝑉</span>=<span>1D449</span></span> + <span><span class="testfont">𝑊</span>=<span>1D44A</span></span> + <span><span class="testfont">𝑋</span>=<span>1D44B</span></span> + <span><span class="testfont">𝑌</span>=<span>1D44C</span></span> + <span><span class="testfont">𝑍</span>=<span>1D44D</span></span> + <span><span class="testfont">𝑎</span>=<span>1D44E</span></span><br/> + <span><span class="testfont">𝑏</span>=<span>1D44F</span></span> + <span><span class="testfont">𝑐</span>=<span>1D450</span></span> + <span><span class="testfont">𝑑</span>=<span>1D451</span></span> + <span><span class="testfont">𝑒</span>=<span>1D452</span></span> + <span><span class="testfont">𝑓</span>=<span>1D453</span></span> + <span><span class="testfont">𝑔</span>=<span>1D454</span></span> + <span><span class="testfont">ℎ</span>=<span>0210E</span></span> + <span><span class="testfont">𝑖</span>=<span>1D456</span></span> + <span><span class="testfont">𝑗</span>=<span>1D457</span></span> + <span><span class="testfont">𝑘</span>=<span>1D458</span></span><br/> + <span><span class="testfont">𝑙</span>=<span>1D459</span></span> + <span><span class="testfont">𝑚</span>=<span>1D45A</span></span> + <span><span class="testfont">𝑛</span>=<span>1D45B</span></span> + <span><span class="testfont">𝑜</span>=<span>1D45C</span></span> + <span><span class="testfont">𝑝</span>=<span>1D45D</span></span> + <span><span class="testfont">𝑞</span>=<span>1D45E</span></span> + <span><span class="testfont">𝑟</span>=<span>1D45F</span></span> + <span><span class="testfont">𝑠</span>=<span>1D460</span></span> + <span><span class="testfont">𝑡</span>=<span>1D461</span></span> + <span><span class="testfont">𝑢</span>=<span>1D462</span></span><br/> + <span><span class="testfont">𝑣</span>=<span>1D463</span></span> + <span><span class="testfont">𝑤</span>=<span>1D464</span></span> + <span><span class="testfont">𝑥</span>=<span>1D465</span></span> + <span><span class="testfont">𝑦</span>=<span>1D466</span></span> + <span><span class="testfont">𝑧</span>=<span>1D467</span></span> + <span><span class="testfont">𝚤</span>=<span>1D6A4</span></span> + <span><span class="testfont">𝛢</span>=<span>1D6E2</span></span> + <span><span class="testfont">𝛣</span>=<span>1D6E3</span></span> + <span><span class="testfont">𝛤</span>=<span>1D6E4</span></span> + <span><span class="testfont">𝛥</span>=<span>1D6E5</span></span><br/> + <span><span class="testfont">𝛦</span>=<span>1D6E6</span></span> + <span><span class="testfont">𝛧</span>=<span>1D6E7</span></span> + <span><span class="testfont">𝛨</span>=<span>1D6E8</span></span> + <span><span class="testfont">𝛩</span>=<span>1D6E9</span></span> + <span><span class="testfont">𝛪</span>=<span>1D6EA</span></span> + <span><span class="testfont">𝛫</span>=<span>1D6EB</span></span> + <span><span class="testfont">𝛬</span>=<span>1D6EC</span></span> + <span><span class="testfont">𝛭</span>=<span>1D6ED</span></span> + <span><span class="testfont">𝛮</span>=<span>1D6EE</span></span> + <span><span class="testfont">𝛯</span>=<span>1D6EF</span></span><br/> + <span><span class="testfont">𝛰</span>=<span>1D6F0</span></span> + <span><span class="testfont">𝛱</span>=<span>1D6F1</span></span> + <span><span class="testfont">𝛲</span>=<span>1D6F2</span></span> + <span><span class="testfont">𝛴</span>=<span>1D6F4</span></span> + <span><span class="testfont">𝛵</span>=<span>1D6F5</span></span> + <span><span class="testfont">𝛶</span>=<span>1D6F6</span></span> + <span><span class="testfont">𝛷</span>=<span>1D6F7</span></span> + <span><span class="testfont">𝛸</span>=<span>1D6F8</span></span> + <span><span class="testfont">𝛹</span>=<span>1D6F9</span></span> + <span><span class="testfont">𝛺</span>=<span>1D6FA</span></span><br/> + <span><span class="testfont">𝛼</span>=<span>1D6FC</span></span> + <span><span class="testfont">𝛽</span>=<span>1D6FD</span></span> + <span><span class="testfont">𝛾</span>=<span>1D6FE</span></span> + <span><span class="testfont">𝛿</span>=<span>1D6FF</span></span> + <span><span class="testfont">𝜀</span>=<span>1D700</span></span> + <span><span class="testfont">𝜁</span>=<span>1D701</span></span> + <span><span class="testfont">𝜂</span>=<span>1D702</span></span> + <span><span class="testfont">𝜃</span>=<span>1D703</span></span> + <span><span class="testfont">𝜄</span>=<span>1D704</span></span> + <span><span class="testfont">𝜅</span>=<span>1D705</span></span><br/> + <span><span class="testfont">𝜆</span>=<span>1D706</span></span> + <span><span class="testfont">𝜇</span>=<span>1D707</span></span> + <span><span class="testfont">𝜈</span>=<span>1D708</span></span> + <span><span class="testfont">𝜉</span>=<span>1D709</span></span> + <span><span class="testfont">𝜊</span>=<span>1D70A</span></span> + <span><span class="testfont">𝜋</span>=<span>1D70B</span></span> + <span><span class="testfont">𝜌</span>=<span>1D70C</span></span> + <span><span class="testfont">𝜍</span>=<span>1D70D</span></span> + <span><span class="testfont">𝜎</span>=<span>1D70E</span></span> + <span><span class="testfont">𝜏</span>=<span>1D70F</span></span><br/> + <span><span class="testfont">𝜐</span>=<span>1D710</span></span> + <span><span class="testfont">𝜑</span>=<span>1D711</span></span> + <span><span class="testfont">𝜒</span>=<span>1D712</span></span> + <span><span class="testfont">𝜓</span>=<span>1D713</span></span> + <span><span class="testfont">𝜔</span>=<span>1D714</span></span> + <span><span class="testfont">𝜗</span>=<span>1D717</span></span> + <span><span class="testfont">𝜙</span>=<span>1D719</span></span> + <span><span class="testfont">𝜛</span>=<span>1D71B</span></span> + <span><span class="testfont">𝜘</span>=<span>1D718</span></span> + <span><span class="testfont">𝜚</span>=<span>1D71A</span></span><br/> + <span><span class="testfont">𝛳</span>=<span>1D6F3</span></span> + <span><span class="testfont">𝜖</span>=<span>1D716</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html new file mode 100644 index 0000000..d47cbf8a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-001.tentative.html
@@ -0,0 +1,143 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-auto</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-auto-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-auto' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-auto">∂</span>=<span>1D715</span></span> + <span><span class="testfont" style="text-transform: math-auto">∇</span>=<span>1D6FB</span></span> + <span><span class="testfont" style="text-transform: math-auto">ȷ</span>=<span>1D6A5</span></span> + <span><span class="testfont" style="text-transform: math-auto">A</span>=<span>1D434</span></span> + <span><span class="testfont" style="text-transform: math-auto">B</span>=<span>1D435</span></span> + <span><span class="testfont" style="text-transform: math-auto">C</span>=<span>1D436</span></span> + <span><span class="testfont" style="text-transform: math-auto">D</span>=<span>1D437</span></span> + <span><span class="testfont" style="text-transform: math-auto">E</span>=<span>1D438</span></span> + <span><span class="testfont" style="text-transform: math-auto">F</span>=<span>1D439</span></span> + <span><span class="testfont" style="text-transform: math-auto">G</span>=<span>1D43A</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">H</span>=<span>1D43B</span></span> + <span><span class="testfont" style="text-transform: math-auto">I</span>=<span>1D43C</span></span> + <span><span class="testfont" style="text-transform: math-auto">J</span>=<span>1D43D</span></span> + <span><span class="testfont" style="text-transform: math-auto">K</span>=<span>1D43E</span></span> + <span><span class="testfont" style="text-transform: math-auto">L</span>=<span>1D43F</span></span> + <span><span class="testfont" style="text-transform: math-auto">M</span>=<span>1D440</span></span> + <span><span class="testfont" style="text-transform: math-auto">N</span>=<span>1D441</span></span> + <span><span class="testfont" style="text-transform: math-auto">O</span>=<span>1D442</span></span> + <span><span class="testfont" style="text-transform: math-auto">P</span>=<span>1D443</span></span> + <span><span class="testfont" style="text-transform: math-auto">Q</span>=<span>1D444</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">R</span>=<span>1D445</span></span> + <span><span class="testfont" style="text-transform: math-auto">S</span>=<span>1D446</span></span> + <span><span class="testfont" style="text-transform: math-auto">T</span>=<span>1D447</span></span> + <span><span class="testfont" style="text-transform: math-auto">U</span>=<span>1D448</span></span> + <span><span class="testfont" style="text-transform: math-auto">V</span>=<span>1D449</span></span> + <span><span class="testfont" style="text-transform: math-auto">W</span>=<span>1D44A</span></span> + <span><span class="testfont" style="text-transform: math-auto">X</span>=<span>1D44B</span></span> + <span><span class="testfont" style="text-transform: math-auto">Y</span>=<span>1D44C</span></span> + <span><span class="testfont" style="text-transform: math-auto">Z</span>=<span>1D44D</span></span> + <span><span class="testfont" style="text-transform: math-auto">a</span>=<span>1D44E</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">b</span>=<span>1D44F</span></span> + <span><span class="testfont" style="text-transform: math-auto">c</span>=<span>1D450</span></span> + <span><span class="testfont" style="text-transform: math-auto">d</span>=<span>1D451</span></span> + <span><span class="testfont" style="text-transform: math-auto">e</span>=<span>1D452</span></span> + <span><span class="testfont" style="text-transform: math-auto">f</span>=<span>1D453</span></span> + <span><span class="testfont" style="text-transform: math-auto">g</span>=<span>1D454</span></span> + <span><span class="testfont" style="text-transform: math-auto">h</span>=<span>0210E</span></span> + <span><span class="testfont" style="text-transform: math-auto">i</span>=<span>1D456</span></span> + <span><span class="testfont" style="text-transform: math-auto">j</span>=<span>1D457</span></span> + <span><span class="testfont" style="text-transform: math-auto">k</span>=<span>1D458</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">l</span>=<span>1D459</span></span> + <span><span class="testfont" style="text-transform: math-auto">m</span>=<span>1D45A</span></span> + <span><span class="testfont" style="text-transform: math-auto">n</span>=<span>1D45B</span></span> + <span><span class="testfont" style="text-transform: math-auto">o</span>=<span>1D45C</span></span> + <span><span class="testfont" style="text-transform: math-auto">p</span>=<span>1D45D</span></span> + <span><span class="testfont" style="text-transform: math-auto">q</span>=<span>1D45E</span></span> + <span><span class="testfont" style="text-transform: math-auto">r</span>=<span>1D45F</span></span> + <span><span class="testfont" style="text-transform: math-auto">s</span>=<span>1D460</span></span> + <span><span class="testfont" style="text-transform: math-auto">t</span>=<span>1D461</span></span> + <span><span class="testfont" style="text-transform: math-auto">u</span>=<span>1D462</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">v</span>=<span>1D463</span></span> + <span><span class="testfont" style="text-transform: math-auto">w</span>=<span>1D464</span></span> + <span><span class="testfont" style="text-transform: math-auto">x</span>=<span>1D465</span></span> + <span><span class="testfont" style="text-transform: math-auto">y</span>=<span>1D466</span></span> + <span><span class="testfont" style="text-transform: math-auto">z</span>=<span>1D467</span></span> + <span><span class="testfont" style="text-transform: math-auto">ı</span>=<span>1D6A4</span></span> + <span><span class="testfont" style="text-transform: math-auto">Α</span>=<span>1D6E2</span></span> + <span><span class="testfont" style="text-transform: math-auto">Β</span>=<span>1D6E3</span></span> + <span><span class="testfont" style="text-transform: math-auto">Γ</span>=<span>1D6E4</span></span> + <span><span class="testfont" style="text-transform: math-auto">Δ</span>=<span>1D6E5</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">Ε</span>=<span>1D6E6</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ζ</span>=<span>1D6E7</span></span> + <span><span class="testfont" style="text-transform: math-auto">Η</span>=<span>1D6E8</span></span> + <span><span class="testfont" style="text-transform: math-auto">Θ</span>=<span>1D6E9</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ι</span>=<span>1D6EA</span></span> + <span><span class="testfont" style="text-transform: math-auto">Κ</span>=<span>1D6EB</span></span> + <span><span class="testfont" style="text-transform: math-auto">Λ</span>=<span>1D6EC</span></span> + <span><span class="testfont" style="text-transform: math-auto">Μ</span>=<span>1D6ED</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ν</span>=<span>1D6EE</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ξ</span>=<span>1D6EF</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">Ο</span>=<span>1D6F0</span></span> + <span><span class="testfont" style="text-transform: math-auto">Π</span>=<span>1D6F1</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ρ</span>=<span>1D6F2</span></span> + <span><span class="testfont" style="text-transform: math-auto">Σ</span>=<span>1D6F4</span></span> + <span><span class="testfont" style="text-transform: math-auto">Τ</span>=<span>1D6F5</span></span> + <span><span class="testfont" style="text-transform: math-auto">Υ</span>=<span>1D6F6</span></span> + <span><span class="testfont" style="text-transform: math-auto">Φ</span>=<span>1D6F7</span></span> + <span><span class="testfont" style="text-transform: math-auto">Χ</span>=<span>1D6F8</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ψ</span>=<span>1D6F9</span></span> + <span><span class="testfont" style="text-transform: math-auto">Ω</span>=<span>1D6FA</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">α</span>=<span>1D6FC</span></span> + <span><span class="testfont" style="text-transform: math-auto">β</span>=<span>1D6FD</span></span> + <span><span class="testfont" style="text-transform: math-auto">γ</span>=<span>1D6FE</span></span> + <span><span class="testfont" style="text-transform: math-auto">δ</span>=<span>1D6FF</span></span> + <span><span class="testfont" style="text-transform: math-auto">ε</span>=<span>1D700</span></span> + <span><span class="testfont" style="text-transform: math-auto">ζ</span>=<span>1D701</span></span> + <span><span class="testfont" style="text-transform: math-auto">η</span>=<span>1D702</span></span> + <span><span class="testfont" style="text-transform: math-auto">θ</span>=<span>1D703</span></span> + <span><span class="testfont" style="text-transform: math-auto">ι</span>=<span>1D704</span></span> + <span><span class="testfont" style="text-transform: math-auto">κ</span>=<span>1D705</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">λ</span>=<span>1D706</span></span> + <span><span class="testfont" style="text-transform: math-auto">μ</span>=<span>1D707</span></span> + <span><span class="testfont" style="text-transform: math-auto">ν</span>=<span>1D708</span></span> + <span><span class="testfont" style="text-transform: math-auto">ξ</span>=<span>1D709</span></span> + <span><span class="testfont" style="text-transform: math-auto">ο</span>=<span>1D70A</span></span> + <span><span class="testfont" style="text-transform: math-auto">π</span>=<span>1D70B</span></span> + <span><span class="testfont" style="text-transform: math-auto">ρ</span>=<span>1D70C</span></span> + <span><span class="testfont" style="text-transform: math-auto">ς</span>=<span>1D70D</span></span> + <span><span class="testfont" style="text-transform: math-auto">σ</span>=<span>1D70E</span></span> + <span><span class="testfont" style="text-transform: math-auto">τ</span>=<span>1D70F</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">υ</span>=<span>1D710</span></span> + <span><span class="testfont" style="text-transform: math-auto">φ</span>=<span>1D711</span></span> + <span><span class="testfont" style="text-transform: math-auto">χ</span>=<span>1D712</span></span> + <span><span class="testfont" style="text-transform: math-auto">ψ</span>=<span>1D713</span></span> + <span><span class="testfont" style="text-transform: math-auto">ω</span>=<span>1D714</span></span> + <span><span class="testfont" style="text-transform: math-auto">ϑ</span>=<span>1D717</span></span> + <span><span class="testfont" style="text-transform: math-auto">ϕ</span>=<span>1D719</span></span> + <span><span class="testfont" style="text-transform: math-auto">ϖ</span>=<span>1D71B</span></span> + <span><span class="testfont" style="text-transform: math-auto">ϰ</span>=<span>1D718</span></span> + <span><span class="testfont" style="text-transform: math-auto">ϱ</span>=<span>1D71A</span></span><br/> + <span><span class="testfont" style="text-transform: math-auto">ϴ</span>=<span>1D6F3</span></span> + <span><span class="testfont" style="text-transform: math-auto">ϵ</span>=<span>1D716</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html new file mode 100644 index 0000000..1c1d6e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative-ref.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-auto (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > div { + padding: 10px; + } + div > span { + font-family: monospace; + font-size: 16px; + } + .testfont { + font-family: TestFont; + font-size: 16px; + } +</style> +<body> + <p>Test passes if all the equalities below are true.</p> + <div>Single character: <span class="testfont">𝜕</span>=<span>1D715</span></div> + <div>Two characters: <span class="testfont">∂∇</span>=<span>0220202207</span></div> + <div>Three characters: <span class="testfont">∂∇ȷ</span>=<span>022020220700237</span></div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html new file mode 100644 index 0000000..86c1ea1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-auto-002.tentative.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-auto</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="match" href="text-transform-math-auto-002.tentative-ref.html"/> +<meta name="assert" content="Test 'text-transform: math-auto' for text nodes of different lengths"> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > div { + padding: 10px; + } + div > span { + font-family: monospace; + font-size: 16px; + } + .testfont { + font-family: TestFont; + font-size: 16px; + } +</style> +<body> + <p>Test passes if all the equalities below are true.</p> + <div>Single character: <span class="testfont" style="text-transform: math-auto">∂</span>=<span>1D715</span></div> + <div>Two characters: <span class="testfont" style="text-transform: math-auto">∂∇</span>=<span>0220202207</span></div> + <div>Three characters: <span class="testfont" style="text-transform: math-auto">∂∇ȷ</span>=<span>022020220700237</span></div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative-ref.html new file mode 100644 index 0000000..24b8300 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative-ref.html
@@ -0,0 +1,149 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝛛</span>=<span>1D6DB</span></span> + <span><span class="testfont">𝛁</span>=<span>1D6C1</span></span> + <span><span class="testfont">𝟎</span>=<span>1D7CE</span></span> + <span><span class="testfont">𝟏</span>=<span>1D7CF</span></span> + <span><span class="testfont">𝟐</span>=<span>1D7D0</span></span> + <span><span class="testfont">𝟑</span>=<span>1D7D1</span></span> + <span><span class="testfont">𝟒</span>=<span>1D7D2</span></span> + <span><span class="testfont">𝟓</span>=<span>1D7D3</span></span> + <span><span class="testfont">𝟔</span>=<span>1D7D4</span></span> + <span><span class="testfont">𝟕</span>=<span>1D7D5</span></span><br/> + <span><span class="testfont">𝟖</span>=<span>1D7D6</span></span> + <span><span class="testfont">𝟗</span>=<span>1D7D7</span></span> + <span><span class="testfont">𝐀</span>=<span>1D400</span></span> + <span><span class="testfont">𝐁</span>=<span>1D401</span></span> + <span><span class="testfont">𝐂</span>=<span>1D402</span></span> + <span><span class="testfont">𝐃</span>=<span>1D403</span></span> + <span><span class="testfont">𝐄</span>=<span>1D404</span></span> + <span><span class="testfont">𝐅</span>=<span>1D405</span></span> + <span><span class="testfont">𝐆</span>=<span>1D406</span></span> + <span><span class="testfont">𝐇</span>=<span>1D407</span></span><br/> + <span><span class="testfont">𝐈</span>=<span>1D408</span></span> + <span><span class="testfont">𝐉</span>=<span>1D409</span></span> + <span><span class="testfont">𝐊</span>=<span>1D40A</span></span> + <span><span class="testfont">𝐋</span>=<span>1D40B</span></span> + <span><span class="testfont">𝐌</span>=<span>1D40C</span></span> + <span><span class="testfont">𝐍</span>=<span>1D40D</span></span> + <span><span class="testfont">𝐎</span>=<span>1D40E</span></span> + <span><span class="testfont">𝐏</span>=<span>1D40F</span></span> + <span><span class="testfont">𝐐</span>=<span>1D410</span></span> + <span><span class="testfont">𝐑</span>=<span>1D411</span></span><br/> + <span><span class="testfont">𝐒</span>=<span>1D412</span></span> + <span><span class="testfont">𝐓</span>=<span>1D413</span></span> + <span><span class="testfont">𝐔</span>=<span>1D414</span></span> + <span><span class="testfont">𝐕</span>=<span>1D415</span></span> + <span><span class="testfont">𝐖</span>=<span>1D416</span></span> + <span><span class="testfont">𝐗</span>=<span>1D417</span></span> + <span><span class="testfont">𝐘</span>=<span>1D418</span></span> + <span><span class="testfont">𝐙</span>=<span>1D419</span></span> + <span><span class="testfont">𝐚</span>=<span>1D41A</span></span> + <span><span class="testfont">𝐛</span>=<span>1D41B</span></span><br/> + <span><span class="testfont">𝐜</span>=<span>1D41C</span></span> + <span><span class="testfont">𝐝</span>=<span>1D41D</span></span> + <span><span class="testfont">𝐞</span>=<span>1D41E</span></span> + <span><span class="testfont">𝐟</span>=<span>1D41F</span></span> + <span><span class="testfont">𝐠</span>=<span>1D420</span></span> + <span><span class="testfont">𝐡</span>=<span>1D421</span></span> + <span><span class="testfont">𝐢</span>=<span>1D422</span></span> + <span><span class="testfont">𝐣</span>=<span>1D423</span></span> + <span><span class="testfont">𝐤</span>=<span>1D424</span></span> + <span><span class="testfont">𝐥</span>=<span>1D425</span></span><br/> + <span><span class="testfont">𝐦</span>=<span>1D426</span></span> + <span><span class="testfont">𝐧</span>=<span>1D427</span></span> + <span><span class="testfont">𝐨</span>=<span>1D428</span></span> + <span><span class="testfont">𝐩</span>=<span>1D429</span></span> + <span><span class="testfont">𝐪</span>=<span>1D42A</span></span> + <span><span class="testfont">𝐫</span>=<span>1D42B</span></span> + <span><span class="testfont">𝐬</span>=<span>1D42C</span></span> + <span><span class="testfont">𝐭</span>=<span>1D42D</span></span> + <span><span class="testfont">𝐮</span>=<span>1D42E</span></span> + <span><span class="testfont">𝐯</span>=<span>1D42F</span></span><br/> + <span><span class="testfont">𝐰</span>=<span>1D430</span></span> + <span><span class="testfont">𝐱</span>=<span>1D431</span></span> + <span><span class="testfont">𝐲</span>=<span>1D432</span></span> + <span><span class="testfont">𝐳</span>=<span>1D433</span></span> + <span><span class="testfont">𝚨</span>=<span>1D6A8</span></span> + <span><span class="testfont">𝚩</span>=<span>1D6A9</span></span> + <span><span class="testfont">𝚪</span>=<span>1D6AA</span></span> + <span><span class="testfont">𝚫</span>=<span>1D6AB</span></span> + <span><span class="testfont">𝚬</span>=<span>1D6AC</span></span> + <span><span class="testfont">𝚭</span>=<span>1D6AD</span></span><br/> + <span><span class="testfont">𝚮</span>=<span>1D6AE</span></span> + <span><span class="testfont">𝚯</span>=<span>1D6AF</span></span> + <span><span class="testfont">𝚰</span>=<span>1D6B0</span></span> + <span><span class="testfont">𝚱</span>=<span>1D6B1</span></span> + <span><span class="testfont">𝚲</span>=<span>1D6B2</span></span> + <span><span class="testfont">𝚳</span>=<span>1D6B3</span></span> + <span><span class="testfont">𝚴</span>=<span>1D6B4</span></span> + <span><span class="testfont">𝚵</span>=<span>1D6B5</span></span> + <span><span class="testfont">𝚶</span>=<span>1D6B6</span></span> + <span><span class="testfont">𝚷</span>=<span>1D6B7</span></span><br/> + <span><span class="testfont">𝚸</span>=<span>1D6B8</span></span> + <span><span class="testfont">𝚺</span>=<span>1D6BA</span></span> + <span><span class="testfont">𝚻</span>=<span>1D6BB</span></span> + <span><span class="testfont">𝚼</span>=<span>1D6BC</span></span> + <span><span class="testfont">𝚽</span>=<span>1D6BD</span></span> + <span><span class="testfont">𝚾</span>=<span>1D6BE</span></span> + <span><span class="testfont">𝚿</span>=<span>1D6BF</span></span> + <span><span class="testfont">𝛀</span>=<span>1D6C0</span></span> + <span><span class="testfont">𝛂</span>=<span>1D6C2</span></span> + <span><span class="testfont">𝛃</span>=<span>1D6C3</span></span><br/> + <span><span class="testfont">𝛄</span>=<span>1D6C4</span></span> + <span><span class="testfont">𝛅</span>=<span>1D6C5</span></span> + <span><span class="testfont">𝛆</span>=<span>1D6C6</span></span> + <span><span class="testfont">𝛇</span>=<span>1D6C7</span></span> + <span><span class="testfont">𝛈</span>=<span>1D6C8</span></span> + <span><span class="testfont">𝛉</span>=<span>1D6C9</span></span> + <span><span class="testfont">𝛊</span>=<span>1D6CA</span></span> + <span><span class="testfont">𝛋</span>=<span>1D6CB</span></span> + <span><span class="testfont">𝛌</span>=<span>1D6CC</span></span> + <span><span class="testfont">𝛍</span>=<span>1D6CD</span></span><br/> + <span><span class="testfont">𝛎</span>=<span>1D6CE</span></span> + <span><span class="testfont">𝛏</span>=<span>1D6CF</span></span> + <span><span class="testfont">𝛐</span>=<span>1D6D0</span></span> + <span><span class="testfont">𝛑</span>=<span>1D6D1</span></span> + <span><span class="testfont">𝛒</span>=<span>1D6D2</span></span> + <span><span class="testfont">𝛓</span>=<span>1D6D3</span></span> + <span><span class="testfont">𝛔</span>=<span>1D6D4</span></span> + <span><span class="testfont">𝛕</span>=<span>1D6D5</span></span> + <span><span class="testfont">𝛖</span>=<span>1D6D6</span></span> + <span><span class="testfont">𝛗</span>=<span>1D6D7</span></span><br/> + <span><span class="testfont">𝛘</span>=<span>1D6D8</span></span> + <span><span class="testfont">𝛙</span>=<span>1D6D9</span></span> + <span><span class="testfont">𝛚</span>=<span>1D6DA</span></span> + <span><span class="testfont">𝛝</span>=<span>1D6DD</span></span> + <span><span class="testfont">𝛟</span>=<span>1D6DF</span></span> + <span><span class="testfont">𝛡</span>=<span>1D6E1</span></span> + <span><span class="testfont">𝟊</span>=<span>1D7CA</span></span> + <span><span class="testfont">𝟋</span>=<span>1D7CB</span></span> + <span><span class="testfont">𝛞</span>=<span>1D6DE</span></span> + <span><span class="testfont">𝛠</span>=<span>1D6E0</span></span><br/> + <span><span class="testfont">𝚹</span>=<span>1D6B9</span></span> + <span><span class="testfont">𝛜</span>=<span>1D6DC</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html new file mode 100644 index 0000000..613cee6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-001.tentative.html
@@ -0,0 +1,153 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-bold-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-bold' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-bold">∂</span>=<span>1D6DB</span></span> + <span><span class="testfont" style="text-transform: math-bold">∇</span>=<span>1D6C1</span></span> + <span><span class="testfont" style="text-transform: math-bold">0</span>=<span>1D7CE</span></span> + <span><span class="testfont" style="text-transform: math-bold">1</span>=<span>1D7CF</span></span> + <span><span class="testfont" style="text-transform: math-bold">2</span>=<span>1D7D0</span></span> + <span><span class="testfont" style="text-transform: math-bold">3</span>=<span>1D7D1</span></span> + <span><span class="testfont" style="text-transform: math-bold">4</span>=<span>1D7D2</span></span> + <span><span class="testfont" style="text-transform: math-bold">5</span>=<span>1D7D3</span></span> + <span><span class="testfont" style="text-transform: math-bold">6</span>=<span>1D7D4</span></span> + <span><span class="testfont" style="text-transform: math-bold">7</span>=<span>1D7D5</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">8</span>=<span>1D7D6</span></span> + <span><span class="testfont" style="text-transform: math-bold">9</span>=<span>1D7D7</span></span> + <span><span class="testfont" style="text-transform: math-bold">A</span>=<span>1D400</span></span> + <span><span class="testfont" style="text-transform: math-bold">B</span>=<span>1D401</span></span> + <span><span class="testfont" style="text-transform: math-bold">C</span>=<span>1D402</span></span> + <span><span class="testfont" style="text-transform: math-bold">D</span>=<span>1D403</span></span> + <span><span class="testfont" style="text-transform: math-bold">E</span>=<span>1D404</span></span> + <span><span class="testfont" style="text-transform: math-bold">F</span>=<span>1D405</span></span> + <span><span class="testfont" style="text-transform: math-bold">G</span>=<span>1D406</span></span> + <span><span class="testfont" style="text-transform: math-bold">H</span>=<span>1D407</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">I</span>=<span>1D408</span></span> + <span><span class="testfont" style="text-transform: math-bold">J</span>=<span>1D409</span></span> + <span><span class="testfont" style="text-transform: math-bold">K</span>=<span>1D40A</span></span> + <span><span class="testfont" style="text-transform: math-bold">L</span>=<span>1D40B</span></span> + <span><span class="testfont" style="text-transform: math-bold">M</span>=<span>1D40C</span></span> + <span><span class="testfont" style="text-transform: math-bold">N</span>=<span>1D40D</span></span> + <span><span class="testfont" style="text-transform: math-bold">O</span>=<span>1D40E</span></span> + <span><span class="testfont" style="text-transform: math-bold">P</span>=<span>1D40F</span></span> + <span><span class="testfont" style="text-transform: math-bold">Q</span>=<span>1D410</span></span> + <span><span class="testfont" style="text-transform: math-bold">R</span>=<span>1D411</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">S</span>=<span>1D412</span></span> + <span><span class="testfont" style="text-transform: math-bold">T</span>=<span>1D413</span></span> + <span><span class="testfont" style="text-transform: math-bold">U</span>=<span>1D414</span></span> + <span><span class="testfont" style="text-transform: math-bold">V</span>=<span>1D415</span></span> + <span><span class="testfont" style="text-transform: math-bold">W</span>=<span>1D416</span></span> + <span><span class="testfont" style="text-transform: math-bold">X</span>=<span>1D417</span></span> + <span><span class="testfont" style="text-transform: math-bold">Y</span>=<span>1D418</span></span> + <span><span class="testfont" style="text-transform: math-bold">Z</span>=<span>1D419</span></span> + <span><span class="testfont" style="text-transform: math-bold">a</span>=<span>1D41A</span></span> + <span><span class="testfont" style="text-transform: math-bold">b</span>=<span>1D41B</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">c</span>=<span>1D41C</span></span> + <span><span class="testfont" style="text-transform: math-bold">d</span>=<span>1D41D</span></span> + <span><span class="testfont" style="text-transform: math-bold">e</span>=<span>1D41E</span></span> + <span><span class="testfont" style="text-transform: math-bold">f</span>=<span>1D41F</span></span> + <span><span class="testfont" style="text-transform: math-bold">g</span>=<span>1D420</span></span> + <span><span class="testfont" style="text-transform: math-bold">h</span>=<span>1D421</span></span> + <span><span class="testfont" style="text-transform: math-bold">i</span>=<span>1D422</span></span> + <span><span class="testfont" style="text-transform: math-bold">j</span>=<span>1D423</span></span> + <span><span class="testfont" style="text-transform: math-bold">k</span>=<span>1D424</span></span> + <span><span class="testfont" style="text-transform: math-bold">l</span>=<span>1D425</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">m</span>=<span>1D426</span></span> + <span><span class="testfont" style="text-transform: math-bold">n</span>=<span>1D427</span></span> + <span><span class="testfont" style="text-transform: math-bold">o</span>=<span>1D428</span></span> + <span><span class="testfont" style="text-transform: math-bold">p</span>=<span>1D429</span></span> + <span><span class="testfont" style="text-transform: math-bold">q</span>=<span>1D42A</span></span> + <span><span class="testfont" style="text-transform: math-bold">r</span>=<span>1D42B</span></span> + <span><span class="testfont" style="text-transform: math-bold">s</span>=<span>1D42C</span></span> + <span><span class="testfont" style="text-transform: math-bold">t</span>=<span>1D42D</span></span> + <span><span class="testfont" style="text-transform: math-bold">u</span>=<span>1D42E</span></span> + <span><span class="testfont" style="text-transform: math-bold">v</span>=<span>1D42F</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">w</span>=<span>1D430</span></span> + <span><span class="testfont" style="text-transform: math-bold">x</span>=<span>1D431</span></span> + <span><span class="testfont" style="text-transform: math-bold">y</span>=<span>1D432</span></span> + <span><span class="testfont" style="text-transform: math-bold">z</span>=<span>1D433</span></span> + <span><span class="testfont" style="text-transform: math-bold">Α</span>=<span>1D6A8</span></span> + <span><span class="testfont" style="text-transform: math-bold">Β</span>=<span>1D6A9</span></span> + <span><span class="testfont" style="text-transform: math-bold">Γ</span>=<span>1D6AA</span></span> + <span><span class="testfont" style="text-transform: math-bold">Δ</span>=<span>1D6AB</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ε</span>=<span>1D6AC</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ζ</span>=<span>1D6AD</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">Η</span>=<span>1D6AE</span></span> + <span><span class="testfont" style="text-transform: math-bold">Θ</span>=<span>1D6AF</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ι</span>=<span>1D6B0</span></span> + <span><span class="testfont" style="text-transform: math-bold">Κ</span>=<span>1D6B1</span></span> + <span><span class="testfont" style="text-transform: math-bold">Λ</span>=<span>1D6B2</span></span> + <span><span class="testfont" style="text-transform: math-bold">Μ</span>=<span>1D6B3</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ν</span>=<span>1D6B4</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ξ</span>=<span>1D6B5</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ο</span>=<span>1D6B6</span></span> + <span><span class="testfont" style="text-transform: math-bold">Π</span>=<span>1D6B7</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">Ρ</span>=<span>1D6B8</span></span> + <span><span class="testfont" style="text-transform: math-bold">Σ</span>=<span>1D6BA</span></span> + <span><span class="testfont" style="text-transform: math-bold">Τ</span>=<span>1D6BB</span></span> + <span><span class="testfont" style="text-transform: math-bold">Υ</span>=<span>1D6BC</span></span> + <span><span class="testfont" style="text-transform: math-bold">Φ</span>=<span>1D6BD</span></span> + <span><span class="testfont" style="text-transform: math-bold">Χ</span>=<span>1D6BE</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ψ</span>=<span>1D6BF</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ω</span>=<span>1D6C0</span></span> + <span><span class="testfont" style="text-transform: math-bold">α</span>=<span>1D6C2</span></span> + <span><span class="testfont" style="text-transform: math-bold">β</span>=<span>1D6C3</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">γ</span>=<span>1D6C4</span></span> + <span><span class="testfont" style="text-transform: math-bold">δ</span>=<span>1D6C5</span></span> + <span><span class="testfont" style="text-transform: math-bold">ε</span>=<span>1D6C6</span></span> + <span><span class="testfont" style="text-transform: math-bold">ζ</span>=<span>1D6C7</span></span> + <span><span class="testfont" style="text-transform: math-bold">η</span>=<span>1D6C8</span></span> + <span><span class="testfont" style="text-transform: math-bold">θ</span>=<span>1D6C9</span></span> + <span><span class="testfont" style="text-transform: math-bold">ι</span>=<span>1D6CA</span></span> + <span><span class="testfont" style="text-transform: math-bold">κ</span>=<span>1D6CB</span></span> + <span><span class="testfont" style="text-transform: math-bold">λ</span>=<span>1D6CC</span></span> + <span><span class="testfont" style="text-transform: math-bold">μ</span>=<span>1D6CD</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">ν</span>=<span>1D6CE</span></span> + <span><span class="testfont" style="text-transform: math-bold">ξ</span>=<span>1D6CF</span></span> + <span><span class="testfont" style="text-transform: math-bold">ο</span>=<span>1D6D0</span></span> + <span><span class="testfont" style="text-transform: math-bold">π</span>=<span>1D6D1</span></span> + <span><span class="testfont" style="text-transform: math-bold">ρ</span>=<span>1D6D2</span></span> + <span><span class="testfont" style="text-transform: math-bold">ς</span>=<span>1D6D3</span></span> + <span><span class="testfont" style="text-transform: math-bold">σ</span>=<span>1D6D4</span></span> + <span><span class="testfont" style="text-transform: math-bold">τ</span>=<span>1D6D5</span></span> + <span><span class="testfont" style="text-transform: math-bold">υ</span>=<span>1D6D6</span></span> + <span><span class="testfont" style="text-transform: math-bold">φ</span>=<span>1D6D7</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">χ</span>=<span>1D6D8</span></span> + <span><span class="testfont" style="text-transform: math-bold">ψ</span>=<span>1D6D9</span></span> + <span><span class="testfont" style="text-transform: math-bold">ω</span>=<span>1D6DA</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϑ</span>=<span>1D6DD</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϕ</span>=<span>1D6DF</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϖ</span>=<span>1D6E1</span></span> + <span><span class="testfont" style="text-transform: math-bold">Ϝ</span>=<span>1D7CA</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϝ</span>=<span>1D7CB</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϰ</span>=<span>1D6DE</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϱ</span>=<span>1D6E0</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold">ϴ</span>=<span>1D6B9</span></span> + <span><span class="testfont" style="text-transform: math-bold">ϵ</span>=<span>1D6DC</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html new file mode 100644 index 0000000..36339bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative-ref.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-fraktur (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-fraktur.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝕬</span>=<span>1D56C</span></span> + <span><span class="testfont">𝕭</span>=<span>1D56D</span></span> + <span><span class="testfont">𝕮</span>=<span>1D56E</span></span> + <span><span class="testfont">𝕯</span>=<span>1D56F</span></span> + <span><span class="testfont">𝕰</span>=<span>1D570</span></span> + <span><span class="testfont">𝕱</span>=<span>1D571</span></span> + <span><span class="testfont">𝕲</span>=<span>1D572</span></span> + <span><span class="testfont">𝕳</span>=<span>1D573</span></span> + <span><span class="testfont">𝕴</span>=<span>1D574</span></span> + <span><span class="testfont">𝕵</span>=<span>1D575</span></span><br/> + <span><span class="testfont">𝕶</span>=<span>1D576</span></span> + <span><span class="testfont">𝕷</span>=<span>1D577</span></span> + <span><span class="testfont">𝕸</span>=<span>1D578</span></span> + <span><span class="testfont">𝕹</span>=<span>1D579</span></span> + <span><span class="testfont">𝕺</span>=<span>1D57A</span></span> + <span><span class="testfont">𝕻</span>=<span>1D57B</span></span> + <span><span class="testfont">𝕼</span>=<span>1D57C</span></span> + <span><span class="testfont">𝕽</span>=<span>1D57D</span></span> + <span><span class="testfont">𝕾</span>=<span>1D57E</span></span> + <span><span class="testfont">𝕿</span>=<span>1D57F</span></span><br/> + <span><span class="testfont">𝖀</span>=<span>1D580</span></span> + <span><span class="testfont">𝖁</span>=<span>1D581</span></span> + <span><span class="testfont">𝖂</span>=<span>1D582</span></span> + <span><span class="testfont">𝖃</span>=<span>1D583</span></span> + <span><span class="testfont">𝖄</span>=<span>1D584</span></span> + <span><span class="testfont">𝖅</span>=<span>1D585</span></span> + <span><span class="testfont">𝖆</span>=<span>1D586</span></span> + <span><span class="testfont">𝖇</span>=<span>1D587</span></span> + <span><span class="testfont">𝖈</span>=<span>1D588</span></span> + <span><span class="testfont">𝖉</span>=<span>1D589</span></span><br/> + <span><span class="testfont">𝖊</span>=<span>1D58A</span></span> + <span><span class="testfont">𝖋</span>=<span>1D58B</span></span> + <span><span class="testfont">𝖌</span>=<span>1D58C</span></span> + <span><span class="testfont">𝖍</span>=<span>1D58D</span></span> + <span><span class="testfont">𝖎</span>=<span>1D58E</span></span> + <span><span class="testfont">𝖏</span>=<span>1D58F</span></span> + <span><span class="testfont">𝖐</span>=<span>1D590</span></span> + <span><span class="testfont">𝖑</span>=<span>1D591</span></span> + <span><span class="testfont">𝖒</span>=<span>1D592</span></span> + <span><span class="testfont">𝖓</span>=<span>1D593</span></span><br/> + <span><span class="testfont">𝖔</span>=<span>1D594</span></span> + <span><span class="testfont">𝖕</span>=<span>1D595</span></span> + <span><span class="testfont">𝖖</span>=<span>1D596</span></span> + <span><span class="testfont">𝖗</span>=<span>1D597</span></span> + <span><span class="testfont">𝖘</span>=<span>1D598</span></span> + <span><span class="testfont">𝖙</span>=<span>1D599</span></span> + <span><span class="testfont">𝖚</span>=<span>1D59A</span></span> + <span><span class="testfont">𝖛</span>=<span>1D59B</span></span> + <span><span class="testfont">𝖜</span>=<span>1D59C</span></span> + <span><span class="testfont">𝖝</span>=<span>1D59D</span></span><br/> + <span><span class="testfont">𝖞</span>=<span>1D59E</span></span> + <span><span class="testfont">𝖟</span>=<span>1D59F</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html new file mode 100644 index 0000000..a90f22b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-fraktur-001.tentative.html
@@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-fraktur</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-bold-fraktur-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-bold-fraktur' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-fraktur.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-bold-fraktur">A</span>=<span>1D56C</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">B</span>=<span>1D56D</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">C</span>=<span>1D56E</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">D</span>=<span>1D56F</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">E</span>=<span>1D570</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">F</span>=<span>1D571</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">G</span>=<span>1D572</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">H</span>=<span>1D573</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">I</span>=<span>1D574</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">J</span>=<span>1D575</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-fraktur">K</span>=<span>1D576</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">L</span>=<span>1D577</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">M</span>=<span>1D578</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">N</span>=<span>1D579</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">O</span>=<span>1D57A</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">P</span>=<span>1D57B</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">Q</span>=<span>1D57C</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">R</span>=<span>1D57D</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">S</span>=<span>1D57E</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">T</span>=<span>1D57F</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-fraktur">U</span>=<span>1D580</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">V</span>=<span>1D581</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">W</span>=<span>1D582</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">X</span>=<span>1D583</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">Y</span>=<span>1D584</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">Z</span>=<span>1D585</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">a</span>=<span>1D586</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">b</span>=<span>1D587</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">c</span>=<span>1D588</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">d</span>=<span>1D589</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-fraktur">e</span>=<span>1D58A</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">f</span>=<span>1D58B</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">g</span>=<span>1D58C</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">h</span>=<span>1D58D</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">i</span>=<span>1D58E</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">j</span>=<span>1D58F</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">k</span>=<span>1D590</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">l</span>=<span>1D591</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">m</span>=<span>1D592</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">n</span>=<span>1D593</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-fraktur">o</span>=<span>1D594</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">p</span>=<span>1D595</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">q</span>=<span>1D596</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">r</span>=<span>1D597</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">s</span>=<span>1D598</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">t</span>=<span>1D599</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">u</span>=<span>1D59A</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">v</span>=<span>1D59B</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">w</span>=<span>1D59C</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">x</span>=<span>1D59D</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-fraktur">y</span>=<span>1D59E</span></span> + <span><span class="testfont" style="text-transform: math-bold-fraktur">z</span>=<span>1D59F</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html new file mode 100644 index 0000000..e4e70cf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative-ref.html
@@ -0,0 +1,137 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-italic (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝝏</span>=<span>1D74F</span></span> + <span><span class="testfont">𝜵</span>=<span>1D735</span></span> + <span><span class="testfont">𝑨</span>=<span>1D468</span></span> + <span><span class="testfont">𝑩</span>=<span>1D469</span></span> + <span><span class="testfont">𝑪</span>=<span>1D46A</span></span> + <span><span class="testfont">𝑫</span>=<span>1D46B</span></span> + <span><span class="testfont">𝑬</span>=<span>1D46C</span></span> + <span><span class="testfont">𝑭</span>=<span>1D46D</span></span> + <span><span class="testfont">𝑮</span>=<span>1D46E</span></span> + <span><span class="testfont">𝑯</span>=<span>1D46F</span></span><br/> + <span><span class="testfont">𝑰</span>=<span>1D470</span></span> + <span><span class="testfont">𝑱</span>=<span>1D471</span></span> + <span><span class="testfont">𝑲</span>=<span>1D472</span></span> + <span><span class="testfont">𝑳</span>=<span>1D473</span></span> + <span><span class="testfont">𝑴</span>=<span>1D474</span></span> + <span><span class="testfont">𝑵</span>=<span>1D475</span></span> + <span><span class="testfont">𝑶</span>=<span>1D476</span></span> + <span><span class="testfont">𝑷</span>=<span>1D477</span></span> + <span><span class="testfont">𝑸</span>=<span>1D478</span></span> + <span><span class="testfont">𝑹</span>=<span>1D479</span></span><br/> + <span><span class="testfont">𝑺</span>=<span>1D47A</span></span> + <span><span class="testfont">𝑻</span>=<span>1D47B</span></span> + <span><span class="testfont">𝑼</span>=<span>1D47C</span></span> + <span><span class="testfont">𝑽</span>=<span>1D47D</span></span> + <span><span class="testfont">𝑾</span>=<span>1D47E</span></span> + <span><span class="testfont">𝑿</span>=<span>1D47F</span></span> + <span><span class="testfont">𝒀</span>=<span>1D480</span></span> + <span><span class="testfont">𝒁</span>=<span>1D481</span></span> + <span><span class="testfont">𝒂</span>=<span>1D482</span></span> + <span><span class="testfont">𝒃</span>=<span>1D483</span></span><br/> + <span><span class="testfont">𝒄</span>=<span>1D484</span></span> + <span><span class="testfont">𝒅</span>=<span>1D485</span></span> + <span><span class="testfont">𝒆</span>=<span>1D486</span></span> + <span><span class="testfont">𝒇</span>=<span>1D487</span></span> + <span><span class="testfont">𝒈</span>=<span>1D488</span></span> + <span><span class="testfont">𝒉</span>=<span>1D489</span></span> + <span><span class="testfont">𝒊</span>=<span>1D48A</span></span> + <span><span class="testfont">𝒋</span>=<span>1D48B</span></span> + <span><span class="testfont">𝒌</span>=<span>1D48C</span></span> + <span><span class="testfont">𝒍</span>=<span>1D48D</span></span><br/> + <span><span class="testfont">𝒎</span>=<span>1D48E</span></span> + <span><span class="testfont">𝒏</span>=<span>1D48F</span></span> + <span><span class="testfont">𝒐</span>=<span>1D490</span></span> + <span><span class="testfont">𝒑</span>=<span>1D491</span></span> + <span><span class="testfont">𝒒</span>=<span>1D492</span></span> + <span><span class="testfont">𝒓</span>=<span>1D493</span></span> + <span><span class="testfont">𝒔</span>=<span>1D494</span></span> + <span><span class="testfont">𝒕</span>=<span>1D495</span></span> + <span><span class="testfont">𝒖</span>=<span>1D496</span></span> + <span><span class="testfont">𝒗</span>=<span>1D497</span></span><br/> + <span><span class="testfont">𝒘</span>=<span>1D498</span></span> + <span><span class="testfont">𝒙</span>=<span>1D499</span></span> + <span><span class="testfont">𝒚</span>=<span>1D49A</span></span> + <span><span class="testfont">𝒛</span>=<span>1D49B</span></span> + <span><span class="testfont">𝜜</span>=<span>1D71C</span></span> + <span><span class="testfont">𝜝</span>=<span>1D71D</span></span> + <span><span class="testfont">𝜞</span>=<span>1D71E</span></span> + <span><span class="testfont">𝜟</span>=<span>1D71F</span></span> + <span><span class="testfont">𝜠</span>=<span>1D720</span></span> + <span><span class="testfont">𝜡</span>=<span>1D721</span></span><br/> + <span><span class="testfont">𝜢</span>=<span>1D722</span></span> + <span><span class="testfont">𝜣</span>=<span>1D723</span></span> + <span><span class="testfont">𝜤</span>=<span>1D724</span></span> + <span><span class="testfont">𝜥</span>=<span>1D725</span></span> + <span><span class="testfont">𝜦</span>=<span>1D726</span></span> + <span><span class="testfont">𝜧</span>=<span>1D727</span></span> + <span><span class="testfont">𝜨</span>=<span>1D728</span></span> + <span><span class="testfont">𝜩</span>=<span>1D729</span></span> + <span><span class="testfont">𝜪</span>=<span>1D72A</span></span> + <span><span class="testfont">𝜫</span>=<span>1D72B</span></span><br/> + <span><span class="testfont">𝜬</span>=<span>1D72C</span></span> + <span><span class="testfont">𝜮</span>=<span>1D72E</span></span> + <span><span class="testfont">𝜯</span>=<span>1D72F</span></span> + <span><span class="testfont">𝜰</span>=<span>1D730</span></span> + <span><span class="testfont">𝜱</span>=<span>1D731</span></span> + <span><span class="testfont">𝜲</span>=<span>1D732</span></span> + <span><span class="testfont">𝜳</span>=<span>1D733</span></span> + <span><span class="testfont">𝜴</span>=<span>1D734</span></span> + <span><span class="testfont">𝜶</span>=<span>1D736</span></span> + <span><span class="testfont">𝜷</span>=<span>1D737</span></span><br/> + <span><span class="testfont">𝜸</span>=<span>1D738</span></span> + <span><span class="testfont">𝜹</span>=<span>1D739</span></span> + <span><span class="testfont">𝜺</span>=<span>1D73A</span></span> + <span><span class="testfont">𝜻</span>=<span>1D73B</span></span> + <span><span class="testfont">𝜼</span>=<span>1D73C</span></span> + <span><span class="testfont">𝜽</span>=<span>1D73D</span></span> + <span><span class="testfont">𝜾</span>=<span>1D73E</span></span> + <span><span class="testfont">𝜿</span>=<span>1D73F</span></span> + <span><span class="testfont">𝝀</span>=<span>1D740</span></span> + <span><span class="testfont">𝝁</span>=<span>1D741</span></span><br/> + <span><span class="testfont">𝝂</span>=<span>1D742</span></span> + <span><span class="testfont">𝝃</span>=<span>1D743</span></span> + <span><span class="testfont">𝝄</span>=<span>1D744</span></span> + <span><span class="testfont">𝝅</span>=<span>1D745</span></span> + <span><span class="testfont">𝝆</span>=<span>1D746</span></span> + <span><span class="testfont">𝝇</span>=<span>1D747</span></span> + <span><span class="testfont">𝝈</span>=<span>1D748</span></span> + <span><span class="testfont">𝝉</span>=<span>1D749</span></span> + <span><span class="testfont">𝝊</span>=<span>1D74A</span></span> + <span><span class="testfont">𝝋</span>=<span>1D74B</span></span><br/> + <span><span class="testfont">𝝌</span>=<span>1D74C</span></span> + <span><span class="testfont">𝝍</span>=<span>1D74D</span></span> + <span><span class="testfont">𝝎</span>=<span>1D74E</span></span> + <span><span class="testfont">𝝑</span>=<span>1D751</span></span> + <span><span class="testfont">𝝓</span>=<span>1D753</span></span> + <span><span class="testfont">𝝕</span>=<span>1D755</span></span> + <span><span class="testfont">𝝒</span>=<span>1D752</span></span> + <span><span class="testfont">𝝔</span>=<span>1D754</span></span> + <span><span class="testfont">𝜭</span>=<span>1D72D</span></span> + <span><span class="testfont">𝝐</span>=<span>1D750</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html new file mode 100644 index 0000000..2de6be1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-italic-001.tentative.html
@@ -0,0 +1,141 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-italic</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-bold-italic-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-bold-italic' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-bold-italic">∂</span>=<span>1D74F</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">∇</span>=<span>1D735</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">A</span>=<span>1D468</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">B</span>=<span>1D469</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">C</span>=<span>1D46A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">D</span>=<span>1D46B</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">E</span>=<span>1D46C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">F</span>=<span>1D46D</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">G</span>=<span>1D46E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">H</span>=<span>1D46F</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">I</span>=<span>1D470</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">J</span>=<span>1D471</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">K</span>=<span>1D472</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">L</span>=<span>1D473</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">M</span>=<span>1D474</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">N</span>=<span>1D475</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">O</span>=<span>1D476</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">P</span>=<span>1D477</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Q</span>=<span>1D478</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">R</span>=<span>1D479</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">S</span>=<span>1D47A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">T</span>=<span>1D47B</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">U</span>=<span>1D47C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">V</span>=<span>1D47D</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">W</span>=<span>1D47E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">X</span>=<span>1D47F</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Y</span>=<span>1D480</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Z</span>=<span>1D481</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">a</span>=<span>1D482</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">b</span>=<span>1D483</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">c</span>=<span>1D484</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">d</span>=<span>1D485</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">e</span>=<span>1D486</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">f</span>=<span>1D487</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">g</span>=<span>1D488</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">h</span>=<span>1D489</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">i</span>=<span>1D48A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">j</span>=<span>1D48B</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">k</span>=<span>1D48C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">l</span>=<span>1D48D</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">m</span>=<span>1D48E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">n</span>=<span>1D48F</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">o</span>=<span>1D490</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">p</span>=<span>1D491</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">q</span>=<span>1D492</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">r</span>=<span>1D493</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">s</span>=<span>1D494</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">t</span>=<span>1D495</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">u</span>=<span>1D496</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">v</span>=<span>1D497</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">w</span>=<span>1D498</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">x</span>=<span>1D499</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">y</span>=<span>1D49A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">z</span>=<span>1D49B</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Α</span>=<span>1D71C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Β</span>=<span>1D71D</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Γ</span>=<span>1D71E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Δ</span>=<span>1D71F</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ε</span>=<span>1D720</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ζ</span>=<span>1D721</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">Η</span>=<span>1D722</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Θ</span>=<span>1D723</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ι</span>=<span>1D724</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Κ</span>=<span>1D725</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Λ</span>=<span>1D726</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Μ</span>=<span>1D727</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ν</span>=<span>1D728</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ξ</span>=<span>1D729</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ο</span>=<span>1D72A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Π</span>=<span>1D72B</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">Ρ</span>=<span>1D72C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Σ</span>=<span>1D72E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Τ</span>=<span>1D72F</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Υ</span>=<span>1D730</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Φ</span>=<span>1D731</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Χ</span>=<span>1D732</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ψ</span>=<span>1D733</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">Ω</span>=<span>1D734</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">α</span>=<span>1D736</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">β</span>=<span>1D737</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">γ</span>=<span>1D738</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">δ</span>=<span>1D739</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ε</span>=<span>1D73A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ζ</span>=<span>1D73B</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">η</span>=<span>1D73C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">θ</span>=<span>1D73D</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ι</span>=<span>1D73E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">κ</span>=<span>1D73F</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">λ</span>=<span>1D740</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">μ</span>=<span>1D741</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">ν</span>=<span>1D742</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ξ</span>=<span>1D743</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ο</span>=<span>1D744</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">π</span>=<span>1D745</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ρ</span>=<span>1D746</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ς</span>=<span>1D747</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">σ</span>=<span>1D748</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">τ</span>=<span>1D749</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">υ</span>=<span>1D74A</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">φ</span>=<span>1D74B</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-italic">χ</span>=<span>1D74C</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ψ</span>=<span>1D74D</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ω</span>=<span>1D74E</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϑ</span>=<span>1D751</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϕ</span>=<span>1D753</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϖ</span>=<span>1D755</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϰ</span>=<span>1D752</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϱ</span>=<span>1D754</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϴ</span>=<span>1D72D</span></span> + <span><span class="testfont" style="text-transform: math-bold-italic">ϵ</span>=<span>1D750</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html new file mode 100644 index 0000000..e83fa69 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative-ref.html
@@ -0,0 +1,147 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-sans-serif (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-sans-serif.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝞉</span>=<span>1D789</span></span> + <span><span class="testfont">𝝯</span>=<span>1D76F</span></span> + <span><span class="testfont">𝟬</span>=<span>1D7EC</span></span> + <span><span class="testfont">𝟭</span>=<span>1D7ED</span></span> + <span><span class="testfont">𝟮</span>=<span>1D7EE</span></span> + <span><span class="testfont">𝟯</span>=<span>1D7EF</span></span> + <span><span class="testfont">𝟰</span>=<span>1D7F0</span></span> + <span><span class="testfont">𝟱</span>=<span>1D7F1</span></span> + <span><span class="testfont">𝟲</span>=<span>1D7F2</span></span> + <span><span class="testfont">𝟳</span>=<span>1D7F3</span></span><br/> + <span><span class="testfont">𝟴</span>=<span>1D7F4</span></span> + <span><span class="testfont">𝟵</span>=<span>1D7F5</span></span> + <span><span class="testfont">𝗔</span>=<span>1D5D4</span></span> + <span><span class="testfont">𝗕</span>=<span>1D5D5</span></span> + <span><span class="testfont">𝗖</span>=<span>1D5D6</span></span> + <span><span class="testfont">𝗗</span>=<span>1D5D7</span></span> + <span><span class="testfont">𝗘</span>=<span>1D5D8</span></span> + <span><span class="testfont">𝗙</span>=<span>1D5D9</span></span> + <span><span class="testfont">𝗚</span>=<span>1D5DA</span></span> + <span><span class="testfont">𝗛</span>=<span>1D5DB</span></span><br/> + <span><span class="testfont">𝗜</span>=<span>1D5DC</span></span> + <span><span class="testfont">𝗝</span>=<span>1D5DD</span></span> + <span><span class="testfont">𝗞</span>=<span>1D5DE</span></span> + <span><span class="testfont">𝗟</span>=<span>1D5DF</span></span> + <span><span class="testfont">𝗠</span>=<span>1D5E0</span></span> + <span><span class="testfont">𝗡</span>=<span>1D5E1</span></span> + <span><span class="testfont">𝗢</span>=<span>1D5E2</span></span> + <span><span class="testfont">𝗣</span>=<span>1D5E3</span></span> + <span><span class="testfont">𝗤</span>=<span>1D5E4</span></span> + <span><span class="testfont">𝗥</span>=<span>1D5E5</span></span><br/> + <span><span class="testfont">𝗦</span>=<span>1D5E6</span></span> + <span><span class="testfont">𝗧</span>=<span>1D5E7</span></span> + <span><span class="testfont">𝗨</span>=<span>1D5E8</span></span> + <span><span class="testfont">𝗩</span>=<span>1D5E9</span></span> + <span><span class="testfont">𝗪</span>=<span>1D5EA</span></span> + <span><span class="testfont">𝗫</span>=<span>1D5EB</span></span> + <span><span class="testfont">𝗬</span>=<span>1D5EC</span></span> + <span><span class="testfont">𝗭</span>=<span>1D5ED</span></span> + <span><span class="testfont">𝗮</span>=<span>1D5EE</span></span> + <span><span class="testfont">𝗯</span>=<span>1D5EF</span></span><br/> + <span><span class="testfont">𝗰</span>=<span>1D5F0</span></span> + <span><span class="testfont">𝗱</span>=<span>1D5F1</span></span> + <span><span class="testfont">𝗲</span>=<span>1D5F2</span></span> + <span><span class="testfont">𝗳</span>=<span>1D5F3</span></span> + <span><span class="testfont">𝗴</span>=<span>1D5F4</span></span> + <span><span class="testfont">𝗵</span>=<span>1D5F5</span></span> + <span><span class="testfont">𝗶</span>=<span>1D5F6</span></span> + <span><span class="testfont">𝗷</span>=<span>1D5F7</span></span> + <span><span class="testfont">𝗸</span>=<span>1D5F8</span></span> + <span><span class="testfont">𝗹</span>=<span>1D5F9</span></span><br/> + <span><span class="testfont">𝗺</span>=<span>1D5FA</span></span> + <span><span class="testfont">𝗻</span>=<span>1D5FB</span></span> + <span><span class="testfont">𝗼</span>=<span>1D5FC</span></span> + <span><span class="testfont">𝗽</span>=<span>1D5FD</span></span> + <span><span class="testfont">𝗾</span>=<span>1D5FE</span></span> + <span><span class="testfont">𝗿</span>=<span>1D5FF</span></span> + <span><span class="testfont">𝘀</span>=<span>1D600</span></span> + <span><span class="testfont">𝘁</span>=<span>1D601</span></span> + <span><span class="testfont">𝘂</span>=<span>1D602</span></span> + <span><span class="testfont">𝘃</span>=<span>1D603</span></span><br/> + <span><span class="testfont">𝘄</span>=<span>1D604</span></span> + <span><span class="testfont">𝘅</span>=<span>1D605</span></span> + <span><span class="testfont">𝘆</span>=<span>1D606</span></span> + <span><span class="testfont">𝘇</span>=<span>1D607</span></span> + <span><span class="testfont">𝝖</span>=<span>1D756</span></span> + <span><span class="testfont">𝝗</span>=<span>1D757</span></span> + <span><span class="testfont">𝝘</span>=<span>1D758</span></span> + <span><span class="testfont">𝝙</span>=<span>1D759</span></span> + <span><span class="testfont">𝝚</span>=<span>1D75A</span></span> + <span><span class="testfont">𝝛</span>=<span>1D75B</span></span><br/> + <span><span class="testfont">𝝜</span>=<span>1D75C</span></span> + <span><span class="testfont">𝝝</span>=<span>1D75D</span></span> + <span><span class="testfont">𝝞</span>=<span>1D75E</span></span> + <span><span class="testfont">𝝟</span>=<span>1D75F</span></span> + <span><span class="testfont">𝝠</span>=<span>1D760</span></span> + <span><span class="testfont">𝝡</span>=<span>1D761</span></span> + <span><span class="testfont">𝝢</span>=<span>1D762</span></span> + <span><span class="testfont">𝝣</span>=<span>1D763</span></span> + <span><span class="testfont">𝝤</span>=<span>1D764</span></span> + <span><span class="testfont">𝝥</span>=<span>1D765</span></span><br/> + <span><span class="testfont">𝝦</span>=<span>1D766</span></span> + <span><span class="testfont">𝝨</span>=<span>1D768</span></span> + <span><span class="testfont">𝝩</span>=<span>1D769</span></span> + <span><span class="testfont">𝝪</span>=<span>1D76A</span></span> + <span><span class="testfont">𝝫</span>=<span>1D76B</span></span> + <span><span class="testfont">𝝬</span>=<span>1D76C</span></span> + <span><span class="testfont">𝝭</span>=<span>1D76D</span></span> + <span><span class="testfont">𝝮</span>=<span>1D76E</span></span> + <span><span class="testfont">𝝰</span>=<span>1D770</span></span> + <span><span class="testfont">𝝱</span>=<span>1D771</span></span><br/> + <span><span class="testfont">𝝲</span>=<span>1D772</span></span> + <span><span class="testfont">𝝳</span>=<span>1D773</span></span> + <span><span class="testfont">𝝴</span>=<span>1D774</span></span> + <span><span class="testfont">𝝵</span>=<span>1D775</span></span> + <span><span class="testfont">𝝶</span>=<span>1D776</span></span> + <span><span class="testfont">𝝷</span>=<span>1D777</span></span> + <span><span class="testfont">𝝸</span>=<span>1D778</span></span> + <span><span class="testfont">𝝹</span>=<span>1D779</span></span> + <span><span class="testfont">𝝺</span>=<span>1D77A</span></span> + <span><span class="testfont">𝝻</span>=<span>1D77B</span></span><br/> + <span><span class="testfont">𝝼</span>=<span>1D77C</span></span> + <span><span class="testfont">𝝽</span>=<span>1D77D</span></span> + <span><span class="testfont">𝝾</span>=<span>1D77E</span></span> + <span><span class="testfont">𝝿</span>=<span>1D77F</span></span> + <span><span class="testfont">𝞀</span>=<span>1D780</span></span> + <span><span class="testfont">𝞁</span>=<span>1D781</span></span> + <span><span class="testfont">𝞂</span>=<span>1D782</span></span> + <span><span class="testfont">𝞃</span>=<span>1D783</span></span> + <span><span class="testfont">𝞄</span>=<span>1D784</span></span> + <span><span class="testfont">𝞅</span>=<span>1D785</span></span><br/> + <span><span class="testfont">𝞆</span>=<span>1D786</span></span> + <span><span class="testfont">𝞇</span>=<span>1D787</span></span> + <span><span class="testfont">𝞈</span>=<span>1D788</span></span> + <span><span class="testfont">𝞋</span>=<span>1D78B</span></span> + <span><span class="testfont">𝞍</span>=<span>1D78D</span></span> + <span><span class="testfont">𝞏</span>=<span>1D78F</span></span> + <span><span class="testfont">𝞌</span>=<span>1D78C</span></span> + <span><span class="testfont">𝞎</span>=<span>1D78E</span></span> + <span><span class="testfont">𝝧</span>=<span>1D767</span></span> + <span><span class="testfont">𝞊</span>=<span>1D78A</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html new file mode 100644 index 0000000..53c6314 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-sans-serif-001.tentative.html
@@ -0,0 +1,151 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-sans-serif</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-bold-sans-serif-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-bold-sans-serif' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-sans-serif.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">∂</span>=<span>1D789</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">∇</span>=<span>1D76F</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">0</span>=<span>1D7EC</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">1</span>=<span>1D7ED</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">2</span>=<span>1D7EE</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">3</span>=<span>1D7EF</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">4</span>=<span>1D7F0</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">5</span>=<span>1D7F1</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">6</span>=<span>1D7F2</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">7</span>=<span>1D7F3</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">8</span>=<span>1D7F4</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">9</span>=<span>1D7F5</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">A</span>=<span>1D5D4</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">B</span>=<span>1D5D5</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">C</span>=<span>1D5D6</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">D</span>=<span>1D5D7</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">E</span>=<span>1D5D8</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">F</span>=<span>1D5D9</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">G</span>=<span>1D5DA</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">H</span>=<span>1D5DB</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">I</span>=<span>1D5DC</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">J</span>=<span>1D5DD</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">K</span>=<span>1D5DE</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">L</span>=<span>1D5DF</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">M</span>=<span>1D5E0</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">N</span>=<span>1D5E1</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">O</span>=<span>1D5E2</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">P</span>=<span>1D5E3</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Q</span>=<span>1D5E4</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">R</span>=<span>1D5E5</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">S</span>=<span>1D5E6</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">T</span>=<span>1D5E7</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">U</span>=<span>1D5E8</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">V</span>=<span>1D5E9</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">W</span>=<span>1D5EA</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">X</span>=<span>1D5EB</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Y</span>=<span>1D5EC</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Z</span>=<span>1D5ED</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">a</span>=<span>1D5EE</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">b</span>=<span>1D5EF</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">c</span>=<span>1D5F0</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">d</span>=<span>1D5F1</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">e</span>=<span>1D5F2</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">f</span>=<span>1D5F3</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">g</span>=<span>1D5F4</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">h</span>=<span>1D5F5</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">i</span>=<span>1D5F6</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">j</span>=<span>1D5F7</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">k</span>=<span>1D5F8</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">l</span>=<span>1D5F9</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">m</span>=<span>1D5FA</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">n</span>=<span>1D5FB</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">o</span>=<span>1D5FC</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">p</span>=<span>1D5FD</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">q</span>=<span>1D5FE</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">r</span>=<span>1D5FF</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">s</span>=<span>1D600</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">t</span>=<span>1D601</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">u</span>=<span>1D602</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">v</span>=<span>1D603</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">w</span>=<span>1D604</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">x</span>=<span>1D605</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">y</span>=<span>1D606</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">z</span>=<span>1D607</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Α</span>=<span>1D756</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Β</span>=<span>1D757</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Γ</span>=<span>1D758</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Δ</span>=<span>1D759</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ε</span>=<span>1D75A</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ζ</span>=<span>1D75B</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Η</span>=<span>1D75C</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Θ</span>=<span>1D75D</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ι</span>=<span>1D75E</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Κ</span>=<span>1D75F</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Λ</span>=<span>1D760</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Μ</span>=<span>1D761</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ν</span>=<span>1D762</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ξ</span>=<span>1D763</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ο</span>=<span>1D764</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Π</span>=<span>1D765</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ρ</span>=<span>1D766</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Σ</span>=<span>1D768</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Τ</span>=<span>1D769</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Υ</span>=<span>1D76A</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Φ</span>=<span>1D76B</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Χ</span>=<span>1D76C</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ψ</span>=<span>1D76D</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">Ω</span>=<span>1D76E</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">α</span>=<span>1D770</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">β</span>=<span>1D771</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">γ</span>=<span>1D772</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">δ</span>=<span>1D773</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ε</span>=<span>1D774</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ζ</span>=<span>1D775</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">η</span>=<span>1D776</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">θ</span>=<span>1D777</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ι</span>=<span>1D778</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">κ</span>=<span>1D779</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">λ</span>=<span>1D77A</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">μ</span>=<span>1D77B</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ν</span>=<span>1D77C</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ξ</span>=<span>1D77D</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ο</span>=<span>1D77E</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">π</span>=<span>1D77F</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ρ</span>=<span>1D780</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ς</span>=<span>1D781</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">σ</span>=<span>1D782</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">τ</span>=<span>1D783</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">υ</span>=<span>1D784</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">φ</span>=<span>1D785</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">χ</span>=<span>1D786</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ψ</span>=<span>1D787</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ω</span>=<span>1D788</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϑ</span>=<span>1D78B</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϕ</span>=<span>1D78D</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϖ</span>=<span>1D78F</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϰ</span>=<span>1D78C</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϱ</span>=<span>1D78E</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϴ</span>=<span>1D767</span></span> + <span><span class="testfont" style="text-transform: math-bold-sans-serif">ϵ</span>=<span>1D78A</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html new file mode 100644 index 0000000..1b5a74c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative-ref.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-script (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-script.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝓐</span>=<span>1D4D0</span></span> + <span><span class="testfont">𝓑</span>=<span>1D4D1</span></span> + <span><span class="testfont">𝓒</span>=<span>1D4D2</span></span> + <span><span class="testfont">𝓓</span>=<span>1D4D3</span></span> + <span><span class="testfont">𝓔</span>=<span>1D4D4</span></span> + <span><span class="testfont">𝓕</span>=<span>1D4D5</span></span> + <span><span class="testfont">𝓖</span>=<span>1D4D6</span></span> + <span><span class="testfont">𝓗</span>=<span>1D4D7</span></span> + <span><span class="testfont">𝓘</span>=<span>1D4D8</span></span> + <span><span class="testfont">𝓙</span>=<span>1D4D9</span></span><br/> + <span><span class="testfont">𝓚</span>=<span>1D4DA</span></span> + <span><span class="testfont">𝓛</span>=<span>1D4DB</span></span> + <span><span class="testfont">𝓜</span>=<span>1D4DC</span></span> + <span><span class="testfont">𝓝</span>=<span>1D4DD</span></span> + <span><span class="testfont">𝓞</span>=<span>1D4DE</span></span> + <span><span class="testfont">𝓟</span>=<span>1D4DF</span></span> + <span><span class="testfont">𝓠</span>=<span>1D4E0</span></span> + <span><span class="testfont">𝓡</span>=<span>1D4E1</span></span> + <span><span class="testfont">𝓢</span>=<span>1D4E2</span></span> + <span><span class="testfont">𝓣</span>=<span>1D4E3</span></span><br/> + <span><span class="testfont">𝓤</span>=<span>1D4E4</span></span> + <span><span class="testfont">𝓥</span>=<span>1D4E5</span></span> + <span><span class="testfont">𝓦</span>=<span>1D4E6</span></span> + <span><span class="testfont">𝓧</span>=<span>1D4E7</span></span> + <span><span class="testfont">𝓨</span>=<span>1D4E8</span></span> + <span><span class="testfont">𝓩</span>=<span>1D4E9</span></span> + <span><span class="testfont">𝓪</span>=<span>1D4EA</span></span> + <span><span class="testfont">𝓫</span>=<span>1D4EB</span></span> + <span><span class="testfont">𝓬</span>=<span>1D4EC</span></span> + <span><span class="testfont">𝓭</span>=<span>1D4ED</span></span><br/> + <span><span class="testfont">𝓮</span>=<span>1D4EE</span></span> + <span><span class="testfont">𝓯</span>=<span>1D4EF</span></span> + <span><span class="testfont">𝓰</span>=<span>1D4F0</span></span> + <span><span class="testfont">𝓱</span>=<span>1D4F1</span></span> + <span><span class="testfont">𝓲</span>=<span>1D4F2</span></span> + <span><span class="testfont">𝓳</span>=<span>1D4F3</span></span> + <span><span class="testfont">𝓴</span>=<span>1D4F4</span></span> + <span><span class="testfont">𝓵</span>=<span>1D4F5</span></span> + <span><span class="testfont">𝓶</span>=<span>1D4F6</span></span> + <span><span class="testfont">𝓷</span>=<span>1D4F7</span></span><br/> + <span><span class="testfont">𝓸</span>=<span>1D4F8</span></span> + <span><span class="testfont">𝓹</span>=<span>1D4F9</span></span> + <span><span class="testfont">𝓺</span>=<span>1D4FA</span></span> + <span><span class="testfont">𝓻</span>=<span>1D4FB</span></span> + <span><span class="testfont">𝓼</span>=<span>1D4FC</span></span> + <span><span class="testfont">𝓽</span>=<span>1D4FD</span></span> + <span><span class="testfont">𝓾</span>=<span>1D4FE</span></span> + <span><span class="testfont">𝓿</span>=<span>1D4FF</span></span> + <span><span class="testfont">𝔀</span>=<span>1D500</span></span> + <span><span class="testfont">𝔁</span>=<span>1D501</span></span><br/> + <span><span class="testfont">𝔂</span>=<span>1D502</span></span> + <span><span class="testfont">𝔃</span>=<span>1D503</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html new file mode 100644 index 0000000..7786fc4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-bold-script-001.tentative.html
@@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-bold-script</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-bold-script-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-bold-script' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-bold-script.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-bold-script">A</span>=<span>1D4D0</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">B</span>=<span>1D4D1</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">C</span>=<span>1D4D2</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">D</span>=<span>1D4D3</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">E</span>=<span>1D4D4</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">F</span>=<span>1D4D5</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">G</span>=<span>1D4D6</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">H</span>=<span>1D4D7</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">I</span>=<span>1D4D8</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">J</span>=<span>1D4D9</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-script">K</span>=<span>1D4DA</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">L</span>=<span>1D4DB</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">M</span>=<span>1D4DC</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">N</span>=<span>1D4DD</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">O</span>=<span>1D4DE</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">P</span>=<span>1D4DF</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">Q</span>=<span>1D4E0</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">R</span>=<span>1D4E1</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">S</span>=<span>1D4E2</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">T</span>=<span>1D4E3</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-script">U</span>=<span>1D4E4</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">V</span>=<span>1D4E5</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">W</span>=<span>1D4E6</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">X</span>=<span>1D4E7</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">Y</span>=<span>1D4E8</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">Z</span>=<span>1D4E9</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">a</span>=<span>1D4EA</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">b</span>=<span>1D4EB</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">c</span>=<span>1D4EC</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">d</span>=<span>1D4ED</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-script">e</span>=<span>1D4EE</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">f</span>=<span>1D4EF</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">g</span>=<span>1D4F0</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">h</span>=<span>1D4F1</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">i</span>=<span>1D4F2</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">j</span>=<span>1D4F3</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">k</span>=<span>1D4F4</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">l</span>=<span>1D4F5</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">m</span>=<span>1D4F6</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">n</span>=<span>1D4F7</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-script">o</span>=<span>1D4F8</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">p</span>=<span>1D4F9</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">q</span>=<span>1D4FA</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">r</span>=<span>1D4FB</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">s</span>=<span>1D4FC</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">t</span>=<span>1D4FD</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">u</span>=<span>1D4FE</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">v</span>=<span>1D4FF</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">w</span>=<span>1D500</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">x</span>=<span>1D501</span></span><br/> + <span><span class="testfont" style="text-transform: math-bold-script">y</span>=<span>1D502</span></span> + <span><span class="testfont" style="text-transform: math-bold-script">z</span>=<span>1D503</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html new file mode 100644 index 0000000..09f137a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative-ref.html
@@ -0,0 +1,114 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-double-struck (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-double-struck.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𞺡</span>=<span>1EEA1</span></span> + <span><span class="testfont">𞺵</span>=<span>1EEB5</span></span> + <span><span class="testfont">𞺶</span>=<span>1EEB6</span></span> + <span><span class="testfont">𞺢</span>=<span>1EEA2</span></span> + <span><span class="testfont">𞺧</span>=<span>1EEA7</span></span> + <span><span class="testfont">𞺷</span>=<span>1EEB7</span></span> + <span><span class="testfont">𞺣</span>=<span>1EEA3</span></span> + <span><span class="testfont">𞺸</span>=<span>1EEB8</span></span> + <span><span class="testfont">𞺳</span>=<span>1EEB3</span></span> + <span><span class="testfont">𞺦</span>=<span>1EEA6</span></span><br/> + <span><span class="testfont">𝟛</span>=<span>1D7DB</span></span> + <span><span class="testfont">𝟜</span>=<span>1D7DC</span></span> + <span><span class="testfont">𝟝</span>=<span>1D7DD</span></span> + <span><span class="testfont">𞺹</span>=<span>1EEB9</span></span> + <span><span class="testfont">𞺨</span>=<span>1EEA8</span></span> + <span><span class="testfont">𞺺</span>=<span>1EEBA</span></span> + <span><span class="testfont">𝟡</span>=<span>1D7E1</span></span> + <span><span class="testfont">𞺻</span>=<span>1EEBB</span></span> + <span><span class="testfont">𞺰</span>=<span>1EEB0</span></span> + <span><span class="testfont">𞺲</span>=<span>1EEB2</span></span><br/> + <span><span class="testfont">ℂ</span>=<span>02102</span></span> + <span><span class="testfont">𞺫</span>=<span>1EEAB</span></span> + <span><span class="testfont">𞺬</span>=<span>1EEAC</span></span> + <span><span class="testfont">𞺭</span>=<span>1EEAD</span></span> + <span><span class="testfont">𝔾</span>=<span>1D53E</span></span> + <span><span class="testfont">𞺥</span>=<span>1EEA5</span></span> + <span><span class="testfont">𝕀</span>=<span>1D540</span></span> + <span><span class="testfont">𞺩</span>=<span>1EEA9</span></span> + <span><span class="testfont">𝕂</span>=<span>1D542</span></span> + <span><span class="testfont">𝕃</span>=<span>1D543</span></span><br/> + <span><span class="testfont">𝕄</span>=<span>1D544</span></span> + <span><span class="testfont">ℕ</span>=<span>02115</span></span> + <span><span class="testfont">𝕆</span>=<span>1D546</span></span> + <span><span class="testfont">ℙ</span>=<span>02119</span></span> + <span><span class="testfont">ℚ</span>=<span>0211A</span></span> + <span><span class="testfont">ℝ</span>=<span>0211D</span></span> + <span><span class="testfont">𝕊</span>=<span>1D54A</span></span> + <span><span class="testfont">𝕋</span>=<span>1D54B</span></span> + <span><span class="testfont">𝕌</span>=<span>1D54C</span></span> + <span><span class="testfont">𝕍</span>=<span>1D54D</span></span><br/> + <span><span class="testfont">𝕎</span>=<span>1D54E</span></span> + <span><span class="testfont">𝕏</span>=<span>1D54F</span></span> + <span><span class="testfont">𝕐</span>=<span>1D550</span></span> + <span><span class="testfont">ℤ</span>=<span>02124</span></span> + <span><span class="testfont">𝕒</span>=<span>1D552</span></span> + <span><span class="testfont">𝕓</span>=<span>1D553</span></span> + <span><span class="testfont">𝕔</span>=<span>1D554</span></span> + <span><span class="testfont">𝕕</span>=<span>1D555</span></span> + <span><span class="testfont">𝕖</span>=<span>1D556</span></span> + <span><span class="testfont">𝕗</span>=<span>1D557</span></span><br/> + <span><span class="testfont">𝕘</span>=<span>1D558</span></span> + <span><span class="testfont">𝕙</span>=<span>1D559</span></span> + <span><span class="testfont">𝕚</span>=<span>1D55A</span></span> + <span><span class="testfont">𝕛</span>=<span>1D55B</span></span> + <span><span class="testfont">𝕜</span>=<span>1D55C</span></span> + <span><span class="testfont">𝕝</span>=<span>1D55D</span></span> + <span><span class="testfont">𝕞</span>=<span>1D55E</span></span> + <span><span class="testfont">𝕟</span>=<span>1D55F</span></span> + <span><span class="testfont">𝕠</span>=<span>1D560</span></span> + <span><span class="testfont">𝕡</span>=<span>1D561</span></span><br/> + <span><span class="testfont">𝕢</span>=<span>1D562</span></span> + <span><span class="testfont">𝕣</span>=<span>1D563</span></span> + <span><span class="testfont">𝕤</span>=<span>1D564</span></span> + <span><span class="testfont">𝕥</span>=<span>1D565</span></span> + <span><span class="testfont">𝕦</span>=<span>1D566</span></span> + <span><span class="testfont">𝕧</span>=<span>1D567</span></span> + <span><span class="testfont">𝕨</span>=<span>1D568</span></span> + <span><span class="testfont">𝕩</span>=<span>1D569</span></span> + <span><span class="testfont">𝕪</span>=<span>1D56A</span></span> + <span><span class="testfont">𝕫</span>=<span>1D56B</span></span><br/> + <span><span class="testfont">𝟘</span>=<span>1D7D8</span></span> + <span><span class="testfont">𝟙</span>=<span>1D7D9</span></span> + <span><span class="testfont">𝟚</span>=<span>1D7DA</span></span> + <span><span class="testfont">𞺮</span>=<span>1EEAE</span></span> + <span><span class="testfont">𞺴</span>=<span>1EEB4</span></span> + <span><span class="testfont">𞺱</span>=<span>1EEB1</span></span> + <span><span class="testfont">𝟞</span>=<span>1D7DE</span></span> + <span><span class="testfont">𝟟</span>=<span>1D7DF</span></span> + <span><span class="testfont">𝟠</span>=<span>1D7E0</span></span> + <span><span class="testfont">𞺯</span>=<span>1EEAF</span></span><br/> + <span><span class="testfont">𝔸</span>=<span>1D538</span></span> + <span><span class="testfont">𝔹</span>=<span>1D539</span></span> + <span><span class="testfont">𝔻</span>=<span>1D53B</span></span> + <span><span class="testfont">𝔼</span>=<span>1D53C</span></span> + <span><span class="testfont">𝔽</span>=<span>1D53D</span></span> + <span><span class="testfont">ℍ</span>=<span>0210D</span></span> + <span><span class="testfont">𝕁</span>=<span>1D541</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html new file mode 100644 index 0000000..bfca421 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-double-struck-001.tentative.html
@@ -0,0 +1,118 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-double-struck</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-double-struck-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-double-struck' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-double-struck.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-double-struck">ب</span>=<span>1EEA1</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ت</span>=<span>1EEB5</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ث</span>=<span>1EEB6</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ج</span>=<span>1EEA2</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ح</span>=<span>1EEA7</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">خ</span>=<span>1EEB7</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">د</span>=<span>1EEA3</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ذ</span>=<span>1EEB8</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ر</span>=<span>1EEB3</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ز</span>=<span>1EEA6</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">3</span>=<span>1D7DB</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">4</span>=<span>1D7DC</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">5</span>=<span>1D7DD</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ض</span>=<span>1EEB9</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ط</span>=<span>1EEA8</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ظ</span>=<span>1EEBA</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">9</span>=<span>1D7E1</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">غ</span>=<span>1EEBB</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ف</span>=<span>1EEB0</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ق</span>=<span>1EEB2</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">C</span>=<span>02102</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ل</span>=<span>1EEAB</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">م</span>=<span>1EEAC</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ن</span>=<span>1EEAD</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">G</span>=<span>1D53E</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">و</span>=<span>1EEA5</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">I</span>=<span>1D540</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ي</span>=<span>1EEA9</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">K</span>=<span>1D542</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">L</span>=<span>1D543</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">M</span>=<span>1D544</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">N</span>=<span>02115</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">O</span>=<span>1D546</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">P</span>=<span>02119</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">Q</span>=<span>0211A</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">R</span>=<span>0211D</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">S</span>=<span>1D54A</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">T</span>=<span>1D54B</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">U</span>=<span>1D54C</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">V</span>=<span>1D54D</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">W</span>=<span>1D54E</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">X</span>=<span>1D54F</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">Y</span>=<span>1D550</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">Z</span>=<span>02124</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">a</span>=<span>1D552</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">b</span>=<span>1D553</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">c</span>=<span>1D554</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">d</span>=<span>1D555</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">e</span>=<span>1D556</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">f</span>=<span>1D557</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">g</span>=<span>1D558</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">h</span>=<span>1D559</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">i</span>=<span>1D55A</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">j</span>=<span>1D55B</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">k</span>=<span>1D55C</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">l</span>=<span>1D55D</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">m</span>=<span>1D55E</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">n</span>=<span>1D55F</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">o</span>=<span>1D560</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">p</span>=<span>1D561</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">q</span>=<span>1D562</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">r</span>=<span>1D563</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">s</span>=<span>1D564</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">t</span>=<span>1D565</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">u</span>=<span>1D566</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">v</span>=<span>1D567</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">w</span>=<span>1D568</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">x</span>=<span>1D569</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">y</span>=<span>1D56A</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">z</span>=<span>1D56B</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">0</span>=<span>1D7D8</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">1</span>=<span>1D7D9</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">2</span>=<span>1D7DA</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">س</span>=<span>1EEAE</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ش</span>=<span>1EEB4</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ص</span>=<span>1EEB1</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">6</span>=<span>1D7DE</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">7</span>=<span>1D7DF</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">8</span>=<span>1D7E0</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">ع</span>=<span>1EEAF</span></span><br/> + <span><span class="testfont" style="text-transform: math-double-struck">A</span>=<span>1D538</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">B</span>=<span>1D539</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">D</span>=<span>1D53B</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">E</span>=<span>1D53C</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">F</span>=<span>1D53D</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">H</span>=<span>0210D</span></span> + <span><span class="testfont" style="text-transform: math-double-struck">J</span>=<span>1D541</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html new file mode 100644 index 0000000..09ea70498 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative-ref.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-fraktur (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-fraktur.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝔄</span>=<span>1D504</span></span> + <span><span class="testfont">𝔅</span>=<span>1D505</span></span> + <span><span class="testfont">ℭ</span>=<span>0212D</span></span> + <span><span class="testfont">𝔇</span>=<span>1D507</span></span> + <span><span class="testfont">𝔈</span>=<span>1D508</span></span> + <span><span class="testfont">𝔉</span>=<span>1D509</span></span> + <span><span class="testfont">𝔊</span>=<span>1D50A</span></span> + <span><span class="testfont">ℌ</span>=<span>0210C</span></span> + <span><span class="testfont">ℑ</span>=<span>02111</span></span> + <span><span class="testfont">𝔍</span>=<span>1D50D</span></span><br/> + <span><span class="testfont">𝔎</span>=<span>1D50E</span></span> + <span><span class="testfont">𝔏</span>=<span>1D50F</span></span> + <span><span class="testfont">𝔐</span>=<span>1D510</span></span> + <span><span class="testfont">𝔑</span>=<span>1D511</span></span> + <span><span class="testfont">𝔒</span>=<span>1D512</span></span> + <span><span class="testfont">𝔓</span>=<span>1D513</span></span> + <span><span class="testfont">𝔔</span>=<span>1D514</span></span> + <span><span class="testfont">ℜ</span>=<span>0211C</span></span> + <span><span class="testfont">𝔖</span>=<span>1D516</span></span> + <span><span class="testfont">𝔗</span>=<span>1D517</span></span><br/> + <span><span class="testfont">𝔘</span>=<span>1D518</span></span> + <span><span class="testfont">𝔙</span>=<span>1D519</span></span> + <span><span class="testfont">𝔚</span>=<span>1D51A</span></span> + <span><span class="testfont">𝔛</span>=<span>1D51B</span></span> + <span><span class="testfont">𝔜</span>=<span>1D51C</span></span> + <span><span class="testfont">ℨ</span>=<span>02128</span></span> + <span><span class="testfont">𝔞</span>=<span>1D51E</span></span> + <span><span class="testfont">𝔟</span>=<span>1D51F</span></span> + <span><span class="testfont">𝔠</span>=<span>1D520</span></span> + <span><span class="testfont">𝔡</span>=<span>1D521</span></span><br/> + <span><span class="testfont">𝔢</span>=<span>1D522</span></span> + <span><span class="testfont">𝔣</span>=<span>1D523</span></span> + <span><span class="testfont">𝔤</span>=<span>1D524</span></span> + <span><span class="testfont">𝔥</span>=<span>1D525</span></span> + <span><span class="testfont">𝔦</span>=<span>1D526</span></span> + <span><span class="testfont">𝔧</span>=<span>1D527</span></span> + <span><span class="testfont">𝔨</span>=<span>1D528</span></span> + <span><span class="testfont">𝔩</span>=<span>1D529</span></span> + <span><span class="testfont">𝔪</span>=<span>1D52A</span></span> + <span><span class="testfont">𝔫</span>=<span>1D52B</span></span><br/> + <span><span class="testfont">𝔬</span>=<span>1D52C</span></span> + <span><span class="testfont">𝔭</span>=<span>1D52D</span></span> + <span><span class="testfont">𝔮</span>=<span>1D52E</span></span> + <span><span class="testfont">𝔯</span>=<span>1D52F</span></span> + <span><span class="testfont">𝔰</span>=<span>1D530</span></span> + <span><span class="testfont">𝔱</span>=<span>1D531</span></span> + <span><span class="testfont">𝔲</span>=<span>1D532</span></span> + <span><span class="testfont">𝔳</span>=<span>1D533</span></span> + <span><span class="testfont">𝔴</span>=<span>1D534</span></span> + <span><span class="testfont">𝔵</span>=<span>1D535</span></span><br/> + <span><span class="testfont">𝔶</span>=<span>1D536</span></span> + <span><span class="testfont">𝔷</span>=<span>1D537</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html new file mode 100644 index 0000000..16a7909 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-fraktur-001.tentative.html
@@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-fraktur</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-fraktur-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-fraktur' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-fraktur.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-fraktur">A</span>=<span>1D504</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">B</span>=<span>1D505</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">C</span>=<span>0212D</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">D</span>=<span>1D507</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">E</span>=<span>1D508</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">F</span>=<span>1D509</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">G</span>=<span>1D50A</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">H</span>=<span>0210C</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">I</span>=<span>02111</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">J</span>=<span>1D50D</span></span><br/> + <span><span class="testfont" style="text-transform: math-fraktur">K</span>=<span>1D50E</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">L</span>=<span>1D50F</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">M</span>=<span>1D510</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">N</span>=<span>1D511</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">O</span>=<span>1D512</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">P</span>=<span>1D513</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">Q</span>=<span>1D514</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">R</span>=<span>0211C</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">S</span>=<span>1D516</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">T</span>=<span>1D517</span></span><br/> + <span><span class="testfont" style="text-transform: math-fraktur">U</span>=<span>1D518</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">V</span>=<span>1D519</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">W</span>=<span>1D51A</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">X</span>=<span>1D51B</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">Y</span>=<span>1D51C</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">Z</span>=<span>02128</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">a</span>=<span>1D51E</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">b</span>=<span>1D51F</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">c</span>=<span>1D520</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">d</span>=<span>1D521</span></span><br/> + <span><span class="testfont" style="text-transform: math-fraktur">e</span>=<span>1D522</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">f</span>=<span>1D523</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">g</span>=<span>1D524</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">h</span>=<span>1D525</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">i</span>=<span>1D526</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">j</span>=<span>1D527</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">k</span>=<span>1D528</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">l</span>=<span>1D529</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">m</span>=<span>1D52A</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">n</span>=<span>1D52B</span></span><br/> + <span><span class="testfont" style="text-transform: math-fraktur">o</span>=<span>1D52C</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">p</span>=<span>1D52D</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">q</span>=<span>1D52E</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">r</span>=<span>1D52F</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">s</span>=<span>1D530</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">t</span>=<span>1D531</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">u</span>=<span>1D532</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">v</span>=<span>1D533</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">w</span>=<span>1D534</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">x</span>=<span>1D535</span></span><br/> + <span><span class="testfont" style="text-transform: math-fraktur">y</span>=<span>1D536</span></span> + <span><span class="testfont" style="text-transform: math-fraktur">z</span>=<span>1D537</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html new file mode 100644 index 0000000..0c15bca --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative-ref.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-initial (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-initial.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𞸰</span>=<span>1EE30</span></span> + <span><span class="testfont">𞸲</span>=<span>1EE32</span></span> + <span><span class="testfont">𞸪</span>=<span>1EE2A</span></span> + <span><span class="testfont">𞸫</span>=<span>1EE2B</span></span> + <span><span class="testfont">𞸬</span>=<span>1EE2C</span></span> + <span><span class="testfont">𞸭</span>=<span>1EE2D</span></span> + <span><span class="testfont">𞸤</span>=<span>1EE24</span></span> + <span><span class="testfont">𞸡</span>=<span>1EE21</span></span> + <span><span class="testfont">𞸩</span>=<span>1EE29</span></span> + <span><span class="testfont">𞸶</span>=<span>1EE36</span></span><br/> + <span><span class="testfont">𞸢</span>=<span>1EE22</span></span> + <span><span class="testfont">𞸧</span>=<span>1EE27</span></span> + <span><span class="testfont">𞸷</span>=<span>1EE37</span></span> + <span><span class="testfont">𞸮</span>=<span>1EE2E</span></span> + <span><span class="testfont">𞸴</span>=<span>1EE34</span></span> + <span><span class="testfont">𞸱</span>=<span>1EE31</span></span> + <span><span class="testfont">𞸹</span>=<span>1EE39</span></span> + <span><span class="testfont">𞸯</span>=<span>1EE2F</span></span> + <span><span class="testfont">𞸻</span>=<span>1EE3B</span></span> + <span><span class="testfont">𞸵</span>=<span>1EE35</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html new file mode 100644 index 0000000..1de2231 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-initial-001.tentative.html
@@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-initial</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-initial-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-initial' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-initial.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-initial">ف</span>=<span>1EE30</span></span> + <span><span class="testfont" style="text-transform: math-initial">ق</span>=<span>1EE32</span></span> + <span><span class="testfont" style="text-transform: math-initial">ك</span>=<span>1EE2A</span></span> + <span><span class="testfont" style="text-transform: math-initial">ل</span>=<span>1EE2B</span></span> + <span><span class="testfont" style="text-transform: math-initial">م</span>=<span>1EE2C</span></span> + <span><span class="testfont" style="text-transform: math-initial">ن</span>=<span>1EE2D</span></span> + <span><span class="testfont" style="text-transform: math-initial">ه</span>=<span>1EE24</span></span> + <span><span class="testfont" style="text-transform: math-initial">ب</span>=<span>1EE21</span></span> + <span><span class="testfont" style="text-transform: math-initial">ي</span>=<span>1EE29</span></span> + <span><span class="testfont" style="text-transform: math-initial">ث</span>=<span>1EE36</span></span><br/> + <span><span class="testfont" style="text-transform: math-initial">ج</span>=<span>1EE22</span></span> + <span><span class="testfont" style="text-transform: math-initial">ح</span>=<span>1EE27</span></span> + <span><span class="testfont" style="text-transform: math-initial">خ</span>=<span>1EE37</span></span> + <span><span class="testfont" style="text-transform: math-initial">س</span>=<span>1EE2E</span></span> + <span><span class="testfont" style="text-transform: math-initial">ش</span>=<span>1EE34</span></span> + <span><span class="testfont" style="text-transform: math-initial">ص</span>=<span>1EE31</span></span> + <span><span class="testfont" style="text-transform: math-initial">ض</span>=<span>1EE39</span></span> + <span><span class="testfont" style="text-transform: math-initial">ع</span>=<span>1EE2F</span></span> + <span><span class="testfont" style="text-transform: math-initial">غ</span>=<span>1EE3B</span></span> + <span><span class="testfont" style="text-transform: math-initial">ت</span>=<span>1EE35</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html new file mode 100644 index 0000000..e1a90faf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative-ref.html
@@ -0,0 +1,139 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-italic (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝜕</span>=<span>1D715</span></span> + <span><span class="testfont">𝛻</span>=<span>1D6FB</span></span> + <span><span class="testfont">𝚥</span>=<span>1D6A5</span></span> + <span><span class="testfont">𝐴</span>=<span>1D434</span></span> + <span><span class="testfont">𝐵</span>=<span>1D435</span></span> + <span><span class="testfont">𝐶</span>=<span>1D436</span></span> + <span><span class="testfont">𝐷</span>=<span>1D437</span></span> + <span><span class="testfont">𝐸</span>=<span>1D438</span></span> + <span><span class="testfont">𝐹</span>=<span>1D439</span></span> + <span><span class="testfont">𝐺</span>=<span>1D43A</span></span><br/> + <span><span class="testfont">𝐻</span>=<span>1D43B</span></span> + <span><span class="testfont">𝐼</span>=<span>1D43C</span></span> + <span><span class="testfont">𝐽</span>=<span>1D43D</span></span> + <span><span class="testfont">𝐾</span>=<span>1D43E</span></span> + <span><span class="testfont">𝐿</span>=<span>1D43F</span></span> + <span><span class="testfont">𝑀</span>=<span>1D440</span></span> + <span><span class="testfont">𝑁</span>=<span>1D441</span></span> + <span><span class="testfont">𝑂</span>=<span>1D442</span></span> + <span><span class="testfont">𝑃</span>=<span>1D443</span></span> + <span><span class="testfont">𝑄</span>=<span>1D444</span></span><br/> + <span><span class="testfont">𝑅</span>=<span>1D445</span></span> + <span><span class="testfont">𝑆</span>=<span>1D446</span></span> + <span><span class="testfont">𝑇</span>=<span>1D447</span></span> + <span><span class="testfont">𝑈</span>=<span>1D448</span></span> + <span><span class="testfont">𝑉</span>=<span>1D449</span></span> + <span><span class="testfont">𝑊</span>=<span>1D44A</span></span> + <span><span class="testfont">𝑋</span>=<span>1D44B</span></span> + <span><span class="testfont">𝑌</span>=<span>1D44C</span></span> + <span><span class="testfont">𝑍</span>=<span>1D44D</span></span> + <span><span class="testfont">𝑎</span>=<span>1D44E</span></span><br/> + <span><span class="testfont">𝑏</span>=<span>1D44F</span></span> + <span><span class="testfont">𝑐</span>=<span>1D450</span></span> + <span><span class="testfont">𝑑</span>=<span>1D451</span></span> + <span><span class="testfont">𝑒</span>=<span>1D452</span></span> + <span><span class="testfont">𝑓</span>=<span>1D453</span></span> + <span><span class="testfont">𝑔</span>=<span>1D454</span></span> + <span><span class="testfont">ℎ</span>=<span>0210E</span></span> + <span><span class="testfont">𝑖</span>=<span>1D456</span></span> + <span><span class="testfont">𝑗</span>=<span>1D457</span></span> + <span><span class="testfont">𝑘</span>=<span>1D458</span></span><br/> + <span><span class="testfont">𝑙</span>=<span>1D459</span></span> + <span><span class="testfont">𝑚</span>=<span>1D45A</span></span> + <span><span class="testfont">𝑛</span>=<span>1D45B</span></span> + <span><span class="testfont">𝑜</span>=<span>1D45C</span></span> + <span><span class="testfont">𝑝</span>=<span>1D45D</span></span> + <span><span class="testfont">𝑞</span>=<span>1D45E</span></span> + <span><span class="testfont">𝑟</span>=<span>1D45F</span></span> + <span><span class="testfont">𝑠</span>=<span>1D460</span></span> + <span><span class="testfont">𝑡</span>=<span>1D461</span></span> + <span><span class="testfont">𝑢</span>=<span>1D462</span></span><br/> + <span><span class="testfont">𝑣</span>=<span>1D463</span></span> + <span><span class="testfont">𝑤</span>=<span>1D464</span></span> + <span><span class="testfont">𝑥</span>=<span>1D465</span></span> + <span><span class="testfont">𝑦</span>=<span>1D466</span></span> + <span><span class="testfont">𝑧</span>=<span>1D467</span></span> + <span><span class="testfont">𝚤</span>=<span>1D6A4</span></span> + <span><span class="testfont">𝛢</span>=<span>1D6E2</span></span> + <span><span class="testfont">𝛣</span>=<span>1D6E3</span></span> + <span><span class="testfont">𝛤</span>=<span>1D6E4</span></span> + <span><span class="testfont">𝛥</span>=<span>1D6E5</span></span><br/> + <span><span class="testfont">𝛦</span>=<span>1D6E6</span></span> + <span><span class="testfont">𝛧</span>=<span>1D6E7</span></span> + <span><span class="testfont">𝛨</span>=<span>1D6E8</span></span> + <span><span class="testfont">𝛩</span>=<span>1D6E9</span></span> + <span><span class="testfont">𝛪</span>=<span>1D6EA</span></span> + <span><span class="testfont">𝛫</span>=<span>1D6EB</span></span> + <span><span class="testfont">𝛬</span>=<span>1D6EC</span></span> + <span><span class="testfont">𝛭</span>=<span>1D6ED</span></span> + <span><span class="testfont">𝛮</span>=<span>1D6EE</span></span> + <span><span class="testfont">𝛯</span>=<span>1D6EF</span></span><br/> + <span><span class="testfont">𝛰</span>=<span>1D6F0</span></span> + <span><span class="testfont">𝛱</span>=<span>1D6F1</span></span> + <span><span class="testfont">𝛲</span>=<span>1D6F2</span></span> + <span><span class="testfont">𝛴</span>=<span>1D6F4</span></span> + <span><span class="testfont">𝛵</span>=<span>1D6F5</span></span> + <span><span class="testfont">𝛶</span>=<span>1D6F6</span></span> + <span><span class="testfont">𝛷</span>=<span>1D6F7</span></span> + <span><span class="testfont">𝛸</span>=<span>1D6F8</span></span> + <span><span class="testfont">𝛹</span>=<span>1D6F9</span></span> + <span><span class="testfont">𝛺</span>=<span>1D6FA</span></span><br/> + <span><span class="testfont">𝛼</span>=<span>1D6FC</span></span> + <span><span class="testfont">𝛽</span>=<span>1D6FD</span></span> + <span><span class="testfont">𝛾</span>=<span>1D6FE</span></span> + <span><span class="testfont">𝛿</span>=<span>1D6FF</span></span> + <span><span class="testfont">𝜀</span>=<span>1D700</span></span> + <span><span class="testfont">𝜁</span>=<span>1D701</span></span> + <span><span class="testfont">𝜂</span>=<span>1D702</span></span> + <span><span class="testfont">𝜃</span>=<span>1D703</span></span> + <span><span class="testfont">𝜄</span>=<span>1D704</span></span> + <span><span class="testfont">𝜅</span>=<span>1D705</span></span><br/> + <span><span class="testfont">𝜆</span>=<span>1D706</span></span> + <span><span class="testfont">𝜇</span>=<span>1D707</span></span> + <span><span class="testfont">𝜈</span>=<span>1D708</span></span> + <span><span class="testfont">𝜉</span>=<span>1D709</span></span> + <span><span class="testfont">𝜊</span>=<span>1D70A</span></span> + <span><span class="testfont">𝜋</span>=<span>1D70B</span></span> + <span><span class="testfont">𝜌</span>=<span>1D70C</span></span> + <span><span class="testfont">𝜍</span>=<span>1D70D</span></span> + <span><span class="testfont">𝜎</span>=<span>1D70E</span></span> + <span><span class="testfont">𝜏</span>=<span>1D70F</span></span><br/> + <span><span class="testfont">𝜐</span>=<span>1D710</span></span> + <span><span class="testfont">𝜑</span>=<span>1D711</span></span> + <span><span class="testfont">𝜒</span>=<span>1D712</span></span> + <span><span class="testfont">𝜓</span>=<span>1D713</span></span> + <span><span class="testfont">𝜔</span>=<span>1D714</span></span> + <span><span class="testfont">𝜗</span>=<span>1D717</span></span> + <span><span class="testfont">𝜙</span>=<span>1D719</span></span> + <span><span class="testfont">𝜛</span>=<span>1D71B</span></span> + <span><span class="testfont">𝜘</span>=<span>1D718</span></span> + <span><span class="testfont">𝜚</span>=<span>1D71A</span></span><br/> + <span><span class="testfont">𝛳</span>=<span>1D6F3</span></span> + <span><span class="testfont">𝜖</span>=<span>1D716</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html new file mode 100644 index 0000000..b98e353 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-italic-001.tentative.html
@@ -0,0 +1,143 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-italic</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-italic-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-italic' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-italic">∂</span>=<span>1D715</span></span> + <span><span class="testfont" style="text-transform: math-italic">∇</span>=<span>1D6FB</span></span> + <span><span class="testfont" style="text-transform: math-italic">ȷ</span>=<span>1D6A5</span></span> + <span><span class="testfont" style="text-transform: math-italic">A</span>=<span>1D434</span></span> + <span><span class="testfont" style="text-transform: math-italic">B</span>=<span>1D435</span></span> + <span><span class="testfont" style="text-transform: math-italic">C</span>=<span>1D436</span></span> + <span><span class="testfont" style="text-transform: math-italic">D</span>=<span>1D437</span></span> + <span><span class="testfont" style="text-transform: math-italic">E</span>=<span>1D438</span></span> + <span><span class="testfont" style="text-transform: math-italic">F</span>=<span>1D439</span></span> + <span><span class="testfont" style="text-transform: math-italic">G</span>=<span>1D43A</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">H</span>=<span>1D43B</span></span> + <span><span class="testfont" style="text-transform: math-italic">I</span>=<span>1D43C</span></span> + <span><span class="testfont" style="text-transform: math-italic">J</span>=<span>1D43D</span></span> + <span><span class="testfont" style="text-transform: math-italic">K</span>=<span>1D43E</span></span> + <span><span class="testfont" style="text-transform: math-italic">L</span>=<span>1D43F</span></span> + <span><span class="testfont" style="text-transform: math-italic">M</span>=<span>1D440</span></span> + <span><span class="testfont" style="text-transform: math-italic">N</span>=<span>1D441</span></span> + <span><span class="testfont" style="text-transform: math-italic">O</span>=<span>1D442</span></span> + <span><span class="testfont" style="text-transform: math-italic">P</span>=<span>1D443</span></span> + <span><span class="testfont" style="text-transform: math-italic">Q</span>=<span>1D444</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">R</span>=<span>1D445</span></span> + <span><span class="testfont" style="text-transform: math-italic">S</span>=<span>1D446</span></span> + <span><span class="testfont" style="text-transform: math-italic">T</span>=<span>1D447</span></span> + <span><span class="testfont" style="text-transform: math-italic">U</span>=<span>1D448</span></span> + <span><span class="testfont" style="text-transform: math-italic">V</span>=<span>1D449</span></span> + <span><span class="testfont" style="text-transform: math-italic">W</span>=<span>1D44A</span></span> + <span><span class="testfont" style="text-transform: math-italic">X</span>=<span>1D44B</span></span> + <span><span class="testfont" style="text-transform: math-italic">Y</span>=<span>1D44C</span></span> + <span><span class="testfont" style="text-transform: math-italic">Z</span>=<span>1D44D</span></span> + <span><span class="testfont" style="text-transform: math-italic">a</span>=<span>1D44E</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">b</span>=<span>1D44F</span></span> + <span><span class="testfont" style="text-transform: math-italic">c</span>=<span>1D450</span></span> + <span><span class="testfont" style="text-transform: math-italic">d</span>=<span>1D451</span></span> + <span><span class="testfont" style="text-transform: math-italic">e</span>=<span>1D452</span></span> + <span><span class="testfont" style="text-transform: math-italic">f</span>=<span>1D453</span></span> + <span><span class="testfont" style="text-transform: math-italic">g</span>=<span>1D454</span></span> + <span><span class="testfont" style="text-transform: math-italic">h</span>=<span>0210E</span></span> + <span><span class="testfont" style="text-transform: math-italic">i</span>=<span>1D456</span></span> + <span><span class="testfont" style="text-transform: math-italic">j</span>=<span>1D457</span></span> + <span><span class="testfont" style="text-transform: math-italic">k</span>=<span>1D458</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">l</span>=<span>1D459</span></span> + <span><span class="testfont" style="text-transform: math-italic">m</span>=<span>1D45A</span></span> + <span><span class="testfont" style="text-transform: math-italic">n</span>=<span>1D45B</span></span> + <span><span class="testfont" style="text-transform: math-italic">o</span>=<span>1D45C</span></span> + <span><span class="testfont" style="text-transform: math-italic">p</span>=<span>1D45D</span></span> + <span><span class="testfont" style="text-transform: math-italic">q</span>=<span>1D45E</span></span> + <span><span class="testfont" style="text-transform: math-italic">r</span>=<span>1D45F</span></span> + <span><span class="testfont" style="text-transform: math-italic">s</span>=<span>1D460</span></span> + <span><span class="testfont" style="text-transform: math-italic">t</span>=<span>1D461</span></span> + <span><span class="testfont" style="text-transform: math-italic">u</span>=<span>1D462</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">v</span>=<span>1D463</span></span> + <span><span class="testfont" style="text-transform: math-italic">w</span>=<span>1D464</span></span> + <span><span class="testfont" style="text-transform: math-italic">x</span>=<span>1D465</span></span> + <span><span class="testfont" style="text-transform: math-italic">y</span>=<span>1D466</span></span> + <span><span class="testfont" style="text-transform: math-italic">z</span>=<span>1D467</span></span> + <span><span class="testfont" style="text-transform: math-italic">ı</span>=<span>1D6A4</span></span> + <span><span class="testfont" style="text-transform: math-italic">Α</span>=<span>1D6E2</span></span> + <span><span class="testfont" style="text-transform: math-italic">Β</span>=<span>1D6E3</span></span> + <span><span class="testfont" style="text-transform: math-italic">Γ</span>=<span>1D6E4</span></span> + <span><span class="testfont" style="text-transform: math-italic">Δ</span>=<span>1D6E5</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">Ε</span>=<span>1D6E6</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ζ</span>=<span>1D6E7</span></span> + <span><span class="testfont" style="text-transform: math-italic">Η</span>=<span>1D6E8</span></span> + <span><span class="testfont" style="text-transform: math-italic">Θ</span>=<span>1D6E9</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ι</span>=<span>1D6EA</span></span> + <span><span class="testfont" style="text-transform: math-italic">Κ</span>=<span>1D6EB</span></span> + <span><span class="testfont" style="text-transform: math-italic">Λ</span>=<span>1D6EC</span></span> + <span><span class="testfont" style="text-transform: math-italic">Μ</span>=<span>1D6ED</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ν</span>=<span>1D6EE</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ξ</span>=<span>1D6EF</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">Ο</span>=<span>1D6F0</span></span> + <span><span class="testfont" style="text-transform: math-italic">Π</span>=<span>1D6F1</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ρ</span>=<span>1D6F2</span></span> + <span><span class="testfont" style="text-transform: math-italic">Σ</span>=<span>1D6F4</span></span> + <span><span class="testfont" style="text-transform: math-italic">Τ</span>=<span>1D6F5</span></span> + <span><span class="testfont" style="text-transform: math-italic">Υ</span>=<span>1D6F6</span></span> + <span><span class="testfont" style="text-transform: math-italic">Φ</span>=<span>1D6F7</span></span> + <span><span class="testfont" style="text-transform: math-italic">Χ</span>=<span>1D6F8</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ψ</span>=<span>1D6F9</span></span> + <span><span class="testfont" style="text-transform: math-italic">Ω</span>=<span>1D6FA</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">α</span>=<span>1D6FC</span></span> + <span><span class="testfont" style="text-transform: math-italic">β</span>=<span>1D6FD</span></span> + <span><span class="testfont" style="text-transform: math-italic">γ</span>=<span>1D6FE</span></span> + <span><span class="testfont" style="text-transform: math-italic">δ</span>=<span>1D6FF</span></span> + <span><span class="testfont" style="text-transform: math-italic">ε</span>=<span>1D700</span></span> + <span><span class="testfont" style="text-transform: math-italic">ζ</span>=<span>1D701</span></span> + <span><span class="testfont" style="text-transform: math-italic">η</span>=<span>1D702</span></span> + <span><span class="testfont" style="text-transform: math-italic">θ</span>=<span>1D703</span></span> + <span><span class="testfont" style="text-transform: math-italic">ι</span>=<span>1D704</span></span> + <span><span class="testfont" style="text-transform: math-italic">κ</span>=<span>1D705</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">λ</span>=<span>1D706</span></span> + <span><span class="testfont" style="text-transform: math-italic">μ</span>=<span>1D707</span></span> + <span><span class="testfont" style="text-transform: math-italic">ν</span>=<span>1D708</span></span> + <span><span class="testfont" style="text-transform: math-italic">ξ</span>=<span>1D709</span></span> + <span><span class="testfont" style="text-transform: math-italic">ο</span>=<span>1D70A</span></span> + <span><span class="testfont" style="text-transform: math-italic">π</span>=<span>1D70B</span></span> + <span><span class="testfont" style="text-transform: math-italic">ρ</span>=<span>1D70C</span></span> + <span><span class="testfont" style="text-transform: math-italic">ς</span>=<span>1D70D</span></span> + <span><span class="testfont" style="text-transform: math-italic">σ</span>=<span>1D70E</span></span> + <span><span class="testfont" style="text-transform: math-italic">τ</span>=<span>1D70F</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">υ</span>=<span>1D710</span></span> + <span><span class="testfont" style="text-transform: math-italic">φ</span>=<span>1D711</span></span> + <span><span class="testfont" style="text-transform: math-italic">χ</span>=<span>1D712</span></span> + <span><span class="testfont" style="text-transform: math-italic">ψ</span>=<span>1D713</span></span> + <span><span class="testfont" style="text-transform: math-italic">ω</span>=<span>1D714</span></span> + <span><span class="testfont" style="text-transform: math-italic">ϑ</span>=<span>1D717</span></span> + <span><span class="testfont" style="text-transform: math-italic">ϕ</span>=<span>1D719</span></span> + <span><span class="testfont" style="text-transform: math-italic">ϖ</span>=<span>1D71B</span></span> + <span><span class="testfont" style="text-transform: math-italic">ϰ</span>=<span>1D718</span></span> + <span><span class="testfont" style="text-transform: math-italic">ϱ</span>=<span>1D71A</span></span><br/> + <span><span class="testfont" style="text-transform: math-italic">ϴ</span>=<span>1D6F3</span></span> + <span><span class="testfont" style="text-transform: math-italic">ϵ</span>=<span>1D716</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html new file mode 100644 index 0000000..89b52e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative-ref.html
@@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-looped (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-looped.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𞺀</span>=<span>1EE80</span></span> + <span><span class="testfont">𞺁</span>=<span>1EE81</span></span> + <span><span class="testfont">𞺕</span>=<span>1EE95</span></span> + <span><span class="testfont">𞺖</span>=<span>1EE96</span></span> + <span><span class="testfont">𞺂</span>=<span>1EE82</span></span> + <span><span class="testfont">𞺇</span>=<span>1EE87</span></span> + <span><span class="testfont">𞺗</span>=<span>1EE97</span></span> + <span><span class="testfont">𞺃</span>=<span>1EE83</span></span> + <span><span class="testfont">𞺘</span>=<span>1EE98</span></span> + <span><span class="testfont">𞺓</span>=<span>1EE93</span></span><br/> + <span><span class="testfont">𞺆</span>=<span>1EE86</span></span> + <span><span class="testfont">𞺎</span>=<span>1EE8E</span></span> + <span><span class="testfont">𞺔</span>=<span>1EE94</span></span> + <span><span class="testfont">𞺑</span>=<span>1EE91</span></span> + <span><span class="testfont">𞺙</span>=<span>1EE99</span></span> + <span><span class="testfont">𞺈</span>=<span>1EE88</span></span> + <span><span class="testfont">𞺚</span>=<span>1EE9A</span></span> + <span><span class="testfont">𞺏</span>=<span>1EE8F</span></span> + <span><span class="testfont">𞺛</span>=<span>1EE9B</span></span> + <span><span class="testfont">𞺐</span>=<span>1EE90</span></span><br/> + <span><span class="testfont">𞺒</span>=<span>1EE92</span></span> + <span><span class="testfont">𞺋</span>=<span>1EE8B</span></span> + <span><span class="testfont">𞺌</span>=<span>1EE8C</span></span> + <span><span class="testfont">𞺍</span>=<span>1EE8D</span></span> + <span><span class="testfont">𞺄</span>=<span>1EE84</span></span> + <span><span class="testfont">𞺅</span>=<span>1EE85</span></span> + <span><span class="testfont">𞺉</span>=<span>1EE89</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html new file mode 100644 index 0000000..e46fb333 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-looped-001.tentative.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-looped</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-looped-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-looped' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-looped.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-looped">ا</span>=<span>1EE80</span></span> + <span><span class="testfont" style="text-transform: math-looped">ب</span>=<span>1EE81</span></span> + <span><span class="testfont" style="text-transform: math-looped">ت</span>=<span>1EE95</span></span> + <span><span class="testfont" style="text-transform: math-looped">ث</span>=<span>1EE96</span></span> + <span><span class="testfont" style="text-transform: math-looped">ج</span>=<span>1EE82</span></span> + <span><span class="testfont" style="text-transform: math-looped">ح</span>=<span>1EE87</span></span> + <span><span class="testfont" style="text-transform: math-looped">خ</span>=<span>1EE97</span></span> + <span><span class="testfont" style="text-transform: math-looped">د</span>=<span>1EE83</span></span> + <span><span class="testfont" style="text-transform: math-looped">ذ</span>=<span>1EE98</span></span> + <span><span class="testfont" style="text-transform: math-looped">ر</span>=<span>1EE93</span></span><br/> + <span><span class="testfont" style="text-transform: math-looped">ز</span>=<span>1EE86</span></span> + <span><span class="testfont" style="text-transform: math-looped">س</span>=<span>1EE8E</span></span> + <span><span class="testfont" style="text-transform: math-looped">ش</span>=<span>1EE94</span></span> + <span><span class="testfont" style="text-transform: math-looped">ص</span>=<span>1EE91</span></span> + <span><span class="testfont" style="text-transform: math-looped">ض</span>=<span>1EE99</span></span> + <span><span class="testfont" style="text-transform: math-looped">ط</span>=<span>1EE88</span></span> + <span><span class="testfont" style="text-transform: math-looped">ظ</span>=<span>1EE9A</span></span> + <span><span class="testfont" style="text-transform: math-looped">ع</span>=<span>1EE8F</span></span> + <span><span class="testfont" style="text-transform: math-looped">غ</span>=<span>1EE9B</span></span> + <span><span class="testfont" style="text-transform: math-looped">ف</span>=<span>1EE90</span></span><br/> + <span><span class="testfont" style="text-transform: math-looped">ق</span>=<span>1EE92</span></span> + <span><span class="testfont" style="text-transform: math-looped">ل</span>=<span>1EE8B</span></span> + <span><span class="testfont" style="text-transform: math-looped">م</span>=<span>1EE8C</span></span> + <span><span class="testfont" style="text-transform: math-looped">ن</span>=<span>1EE8D</span></span> + <span><span class="testfont" style="text-transform: math-looped">ه</span>=<span>1EE84</span></span> + <span><span class="testfont" style="text-transform: math-looped">و</span>=<span>1EE85</span></span> + <span><span class="testfont" style="text-transform: math-looped">ي</span>=<span>1EE89</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html new file mode 100644 index 0000000..e254e1c0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative-ref.html
@@ -0,0 +1,89 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-monospace (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-monospace.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝟶</span>=<span>1D7F6</span></span> + <span><span class="testfont">𝟷</span>=<span>1D7F7</span></span> + <span><span class="testfont">𝟸</span>=<span>1D7F8</span></span> + <span><span class="testfont">𝟹</span>=<span>1D7F9</span></span> + <span><span class="testfont">𝟺</span>=<span>1D7FA</span></span> + <span><span class="testfont">𝟻</span>=<span>1D7FB</span></span> + <span><span class="testfont">𝟼</span>=<span>1D7FC</span></span> + <span><span class="testfont">𝟽</span>=<span>1D7FD</span></span> + <span><span class="testfont">𝟾</span>=<span>1D7FE</span></span> + <span><span class="testfont">𝟿</span>=<span>1D7FF</span></span><br/> + <span><span class="testfont">𝙰</span>=<span>1D670</span></span> + <span><span class="testfont">𝙱</span>=<span>1D671</span></span> + <span><span class="testfont">𝙲</span>=<span>1D672</span></span> + <span><span class="testfont">𝙳</span>=<span>1D673</span></span> + <span><span class="testfont">𝙴</span>=<span>1D674</span></span> + <span><span class="testfont">𝙵</span>=<span>1D675</span></span> + <span><span class="testfont">𝙶</span>=<span>1D676</span></span> + <span><span class="testfont">𝙷</span>=<span>1D677</span></span> + <span><span class="testfont">𝙸</span>=<span>1D678</span></span> + <span><span class="testfont">𝙹</span>=<span>1D679</span></span><br/> + <span><span class="testfont">𝙺</span>=<span>1D67A</span></span> + <span><span class="testfont">𝙻</span>=<span>1D67B</span></span> + <span><span class="testfont">𝙼</span>=<span>1D67C</span></span> + <span><span class="testfont">𝙽</span>=<span>1D67D</span></span> + <span><span class="testfont">𝙾</span>=<span>1D67E</span></span> + <span><span class="testfont">𝙿</span>=<span>1D67F</span></span> + <span><span class="testfont">𝚀</span>=<span>1D680</span></span> + <span><span class="testfont">𝚁</span>=<span>1D681</span></span> + <span><span class="testfont">𝚂</span>=<span>1D682</span></span> + <span><span class="testfont">𝚃</span>=<span>1D683</span></span><br/> + <span><span class="testfont">𝚄</span>=<span>1D684</span></span> + <span><span class="testfont">𝚅</span>=<span>1D685</span></span> + <span><span class="testfont">𝚆</span>=<span>1D686</span></span> + <span><span class="testfont">𝚇</span>=<span>1D687</span></span> + <span><span class="testfont">𝚈</span>=<span>1D688</span></span> + <span><span class="testfont">𝚉</span>=<span>1D689</span></span> + <span><span class="testfont">𝚊</span>=<span>1D68A</span></span> + <span><span class="testfont">𝚋</span>=<span>1D68B</span></span> + <span><span class="testfont">𝚌</span>=<span>1D68C</span></span> + <span><span class="testfont">𝚍</span>=<span>1D68D</span></span><br/> + <span><span class="testfont">𝚎</span>=<span>1D68E</span></span> + <span><span class="testfont">𝚏</span>=<span>1D68F</span></span> + <span><span class="testfont">𝚐</span>=<span>1D690</span></span> + <span><span class="testfont">𝚑</span>=<span>1D691</span></span> + <span><span class="testfont">𝚒</span>=<span>1D692</span></span> + <span><span class="testfont">𝚓</span>=<span>1D693</span></span> + <span><span class="testfont">𝚔</span>=<span>1D694</span></span> + <span><span class="testfont">𝚕</span>=<span>1D695</span></span> + <span><span class="testfont">𝚖</span>=<span>1D696</span></span> + <span><span class="testfont">𝚗</span>=<span>1D697</span></span><br/> + <span><span class="testfont">𝚘</span>=<span>1D698</span></span> + <span><span class="testfont">𝚙</span>=<span>1D699</span></span> + <span><span class="testfont">𝚚</span>=<span>1D69A</span></span> + <span><span class="testfont">𝚛</span>=<span>1D69B</span></span> + <span><span class="testfont">𝚜</span>=<span>1D69C</span></span> + <span><span class="testfont">𝚝</span>=<span>1D69D</span></span> + <span><span class="testfont">𝚞</span>=<span>1D69E</span></span> + <span><span class="testfont">𝚟</span>=<span>1D69F</span></span> + <span><span class="testfont">𝚠</span>=<span>1D6A0</span></span> + <span><span class="testfont">𝚡</span>=<span>1D6A1</span></span><br/> + <span><span class="testfont">𝚢</span>=<span>1D6A2</span></span> + <span><span class="testfont">𝚣</span>=<span>1D6A3</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html new file mode 100644 index 0000000..6f6b44e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-monospace-001.tentative.html
@@ -0,0 +1,93 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-monospace</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-monospace-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-monospace' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-monospace.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-monospace">0</span>=<span>1D7F6</span></span> + <span><span class="testfont" style="text-transform: math-monospace">1</span>=<span>1D7F7</span></span> + <span><span class="testfont" style="text-transform: math-monospace">2</span>=<span>1D7F8</span></span> + <span><span class="testfont" style="text-transform: math-monospace">3</span>=<span>1D7F9</span></span> + <span><span class="testfont" style="text-transform: math-monospace">4</span>=<span>1D7FA</span></span> + <span><span class="testfont" style="text-transform: math-monospace">5</span>=<span>1D7FB</span></span> + <span><span class="testfont" style="text-transform: math-monospace">6</span>=<span>1D7FC</span></span> + <span><span class="testfont" style="text-transform: math-monospace">7</span>=<span>1D7FD</span></span> + <span><span class="testfont" style="text-transform: math-monospace">8</span>=<span>1D7FE</span></span> + <span><span class="testfont" style="text-transform: math-monospace">9</span>=<span>1D7FF</span></span><br/> + <span><span class="testfont" style="text-transform: math-monospace">A</span>=<span>1D670</span></span> + <span><span class="testfont" style="text-transform: math-monospace">B</span>=<span>1D671</span></span> + <span><span class="testfont" style="text-transform: math-monospace">C</span>=<span>1D672</span></span> + <span><span class="testfont" style="text-transform: math-monospace">D</span>=<span>1D673</span></span> + <span><span class="testfont" style="text-transform: math-monospace">E</span>=<span>1D674</span></span> + <span><span class="testfont" style="text-transform: math-monospace">F</span>=<span>1D675</span></span> + <span><span class="testfont" style="text-transform: math-monospace">G</span>=<span>1D676</span></span> + <span><span class="testfont" style="text-transform: math-monospace">H</span>=<span>1D677</span></span> + <span><span class="testfont" style="text-transform: math-monospace">I</span>=<span>1D678</span></span> + <span><span class="testfont" style="text-transform: math-monospace">J</span>=<span>1D679</span></span><br/> + <span><span class="testfont" style="text-transform: math-monospace">K</span>=<span>1D67A</span></span> + <span><span class="testfont" style="text-transform: math-monospace">L</span>=<span>1D67B</span></span> + <span><span class="testfont" style="text-transform: math-monospace">M</span>=<span>1D67C</span></span> + <span><span class="testfont" style="text-transform: math-monospace">N</span>=<span>1D67D</span></span> + <span><span class="testfont" style="text-transform: math-monospace">O</span>=<span>1D67E</span></span> + <span><span class="testfont" style="text-transform: math-monospace">P</span>=<span>1D67F</span></span> + <span><span class="testfont" style="text-transform: math-monospace">Q</span>=<span>1D680</span></span> + <span><span class="testfont" style="text-transform: math-monospace">R</span>=<span>1D681</span></span> + <span><span class="testfont" style="text-transform: math-monospace">S</span>=<span>1D682</span></span> + <span><span class="testfont" style="text-transform: math-monospace">T</span>=<span>1D683</span></span><br/> + <span><span class="testfont" style="text-transform: math-monospace">U</span>=<span>1D684</span></span> + <span><span class="testfont" style="text-transform: math-monospace">V</span>=<span>1D685</span></span> + <span><span class="testfont" style="text-transform: math-monospace">W</span>=<span>1D686</span></span> + <span><span class="testfont" style="text-transform: math-monospace">X</span>=<span>1D687</span></span> + <span><span class="testfont" style="text-transform: math-monospace">Y</span>=<span>1D688</span></span> + <span><span class="testfont" style="text-transform: math-monospace">Z</span>=<span>1D689</span></span> + <span><span class="testfont" style="text-transform: math-monospace">a</span>=<span>1D68A</span></span> + <span><span class="testfont" style="text-transform: math-monospace">b</span>=<span>1D68B</span></span> + <span><span class="testfont" style="text-transform: math-monospace">c</span>=<span>1D68C</span></span> + <span><span class="testfont" style="text-transform: math-monospace">d</span>=<span>1D68D</span></span><br/> + <span><span class="testfont" style="text-transform: math-monospace">e</span>=<span>1D68E</span></span> + <span><span class="testfont" style="text-transform: math-monospace">f</span>=<span>1D68F</span></span> + <span><span class="testfont" style="text-transform: math-monospace">g</span>=<span>1D690</span></span> + <span><span class="testfont" style="text-transform: math-monospace">h</span>=<span>1D691</span></span> + <span><span class="testfont" style="text-transform: math-monospace">i</span>=<span>1D692</span></span> + <span><span class="testfont" style="text-transform: math-monospace">j</span>=<span>1D693</span></span> + <span><span class="testfont" style="text-transform: math-monospace">k</span>=<span>1D694</span></span> + <span><span class="testfont" style="text-transform: math-monospace">l</span>=<span>1D695</span></span> + <span><span class="testfont" style="text-transform: math-monospace">m</span>=<span>1D696</span></span> + <span><span class="testfont" style="text-transform: math-monospace">n</span>=<span>1D697</span></span><br/> + <span><span class="testfont" style="text-transform: math-monospace">o</span>=<span>1D698</span></span> + <span><span class="testfont" style="text-transform: math-monospace">p</span>=<span>1D699</span></span> + <span><span class="testfont" style="text-transform: math-monospace">q</span>=<span>1D69A</span></span> + <span><span class="testfont" style="text-transform: math-monospace">r</span>=<span>1D69B</span></span> + <span><span class="testfont" style="text-transform: math-monospace">s</span>=<span>1D69C</span></span> + <span><span class="testfont" style="text-transform: math-monospace">t</span>=<span>1D69D</span></span> + <span><span class="testfont" style="text-transform: math-monospace">u</span>=<span>1D69E</span></span> + <span><span class="testfont" style="text-transform: math-monospace">v</span>=<span>1D69F</span></span> + <span><span class="testfont" style="text-transform: math-monospace">w</span>=<span>1D6A0</span></span> + <span><span class="testfont" style="text-transform: math-monospace">x</span>=<span>1D6A1</span></span><br/> + <span><span class="testfont" style="text-transform: math-monospace">y</span>=<span>1D6A2</span></span> + <span><span class="testfont" style="text-transform: math-monospace">z</span>=<span>1D6A3</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html new file mode 100644 index 0000000..8b75a6f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative-ref.html
@@ -0,0 +1,89 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-sans-serif (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-sans-serif.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝟢</span>=<span>1D7E2</span></span> + <span><span class="testfont">𝟣</span>=<span>1D7E3</span></span> + <span><span class="testfont">𝟤</span>=<span>1D7E4</span></span> + <span><span class="testfont">𝟥</span>=<span>1D7E5</span></span> + <span><span class="testfont">𝟦</span>=<span>1D7E6</span></span> + <span><span class="testfont">𝟧</span>=<span>1D7E7</span></span> + <span><span class="testfont">𝟨</span>=<span>1D7E8</span></span> + <span><span class="testfont">𝟩</span>=<span>1D7E9</span></span> + <span><span class="testfont">𝟪</span>=<span>1D7EA</span></span> + <span><span class="testfont">𝟫</span>=<span>1D7EB</span></span><br/> + <span><span class="testfont">𝖠</span>=<span>1D5A0</span></span> + <span><span class="testfont">𝖡</span>=<span>1D5A1</span></span> + <span><span class="testfont">𝖢</span>=<span>1D5A2</span></span> + <span><span class="testfont">𝖣</span>=<span>1D5A3</span></span> + <span><span class="testfont">𝖤</span>=<span>1D5A4</span></span> + <span><span class="testfont">𝖥</span>=<span>1D5A5</span></span> + <span><span class="testfont">𝖦</span>=<span>1D5A6</span></span> + <span><span class="testfont">𝖧</span>=<span>1D5A7</span></span> + <span><span class="testfont">𝖨</span>=<span>1D5A8</span></span> + <span><span class="testfont">𝖩</span>=<span>1D5A9</span></span><br/> + <span><span class="testfont">𝖪</span>=<span>1D5AA</span></span> + <span><span class="testfont">𝖫</span>=<span>1D5AB</span></span> + <span><span class="testfont">𝖬</span>=<span>1D5AC</span></span> + <span><span class="testfont">𝖭</span>=<span>1D5AD</span></span> + <span><span class="testfont">𝖮</span>=<span>1D5AE</span></span> + <span><span class="testfont">𝖯</span>=<span>1D5AF</span></span> + <span><span class="testfont">𝖰</span>=<span>1D5B0</span></span> + <span><span class="testfont">𝖱</span>=<span>1D5B1</span></span> + <span><span class="testfont">𝖲</span>=<span>1D5B2</span></span> + <span><span class="testfont">𝖳</span>=<span>1D5B3</span></span><br/> + <span><span class="testfont">𝖴</span>=<span>1D5B4</span></span> + <span><span class="testfont">𝖵</span>=<span>1D5B5</span></span> + <span><span class="testfont">𝖶</span>=<span>1D5B6</span></span> + <span><span class="testfont">𝖷</span>=<span>1D5B7</span></span> + <span><span class="testfont">𝖸</span>=<span>1D5B8</span></span> + <span><span class="testfont">𝖹</span>=<span>1D5B9</span></span> + <span><span class="testfont">𝖺</span>=<span>1D5BA</span></span> + <span><span class="testfont">𝖻</span>=<span>1D5BB</span></span> + <span><span class="testfont">𝖼</span>=<span>1D5BC</span></span> + <span><span class="testfont">𝖽</span>=<span>1D5BD</span></span><br/> + <span><span class="testfont">𝖾</span>=<span>1D5BE</span></span> + <span><span class="testfont">𝖿</span>=<span>1D5BF</span></span> + <span><span class="testfont">𝗀</span>=<span>1D5C0</span></span> + <span><span class="testfont">𝗁</span>=<span>1D5C1</span></span> + <span><span class="testfont">𝗂</span>=<span>1D5C2</span></span> + <span><span class="testfont">𝗃</span>=<span>1D5C3</span></span> + <span><span class="testfont">𝗄</span>=<span>1D5C4</span></span> + <span><span class="testfont">𝗅</span>=<span>1D5C5</span></span> + <span><span class="testfont">𝗆</span>=<span>1D5C6</span></span> + <span><span class="testfont">𝗇</span>=<span>1D5C7</span></span><br/> + <span><span class="testfont">𝗈</span>=<span>1D5C8</span></span> + <span><span class="testfont">𝗉</span>=<span>1D5C9</span></span> + <span><span class="testfont">𝗊</span>=<span>1D5CA</span></span> + <span><span class="testfont">𝗋</span>=<span>1D5CB</span></span> + <span><span class="testfont">𝗌</span>=<span>1D5CC</span></span> + <span><span class="testfont">𝗍</span>=<span>1D5CD</span></span> + <span><span class="testfont">𝗎</span>=<span>1D5CE</span></span> + <span><span class="testfont">𝗏</span>=<span>1D5CF</span></span> + <span><span class="testfont">𝗐</span>=<span>1D5D0</span></span> + <span><span class="testfont">𝗑</span>=<span>1D5D1</span></span><br/> + <span><span class="testfont">𝗒</span>=<span>1D5D2</span></span> + <span><span class="testfont">𝗓</span>=<span>1D5D3</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html new file mode 100644 index 0000000..b73b81d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-001.tentative.html
@@ -0,0 +1,93 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-sans-serif</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-sans-serif-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-sans-serif' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-sans-serif.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-sans-serif">0</span>=<span>1D7E2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">1</span>=<span>1D7E3</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">2</span>=<span>1D7E4</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">3</span>=<span>1D7E5</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">4</span>=<span>1D7E6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">5</span>=<span>1D7E7</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">6</span>=<span>1D7E8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">7</span>=<span>1D7E9</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">8</span>=<span>1D7EA</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">9</span>=<span>1D7EB</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif">A</span>=<span>1D5A0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">B</span>=<span>1D5A1</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">C</span>=<span>1D5A2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">D</span>=<span>1D5A3</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">E</span>=<span>1D5A4</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">F</span>=<span>1D5A5</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">G</span>=<span>1D5A6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">H</span>=<span>1D5A7</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">I</span>=<span>1D5A8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">J</span>=<span>1D5A9</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif">K</span>=<span>1D5AA</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">L</span>=<span>1D5AB</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">M</span>=<span>1D5AC</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">N</span>=<span>1D5AD</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">O</span>=<span>1D5AE</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">P</span>=<span>1D5AF</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">Q</span>=<span>1D5B0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">R</span>=<span>1D5B1</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">S</span>=<span>1D5B2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">T</span>=<span>1D5B3</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif">U</span>=<span>1D5B4</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">V</span>=<span>1D5B5</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">W</span>=<span>1D5B6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">X</span>=<span>1D5B7</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">Y</span>=<span>1D5B8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">Z</span>=<span>1D5B9</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">a</span>=<span>1D5BA</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">b</span>=<span>1D5BB</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">c</span>=<span>1D5BC</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">d</span>=<span>1D5BD</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif">e</span>=<span>1D5BE</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">f</span>=<span>1D5BF</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">g</span>=<span>1D5C0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">h</span>=<span>1D5C1</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">i</span>=<span>1D5C2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">j</span>=<span>1D5C3</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">k</span>=<span>1D5C4</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">l</span>=<span>1D5C5</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">m</span>=<span>1D5C6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">n</span>=<span>1D5C7</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif">o</span>=<span>1D5C8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">p</span>=<span>1D5C9</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">q</span>=<span>1D5CA</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">r</span>=<span>1D5CB</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">s</span>=<span>1D5CC</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">t</span>=<span>1D5CD</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">u</span>=<span>1D5CE</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">v</span>=<span>1D5CF</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">w</span>=<span>1D5D0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">x</span>=<span>1D5D1</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif">y</span>=<span>1D5D2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif">z</span>=<span>1D5D3</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html new file mode 100644 index 0000000..7f71dc4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative-ref.html
@@ -0,0 +1,137 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-sans-serif-bold-italic (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-sans-serif-bold-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝟃</span>=<span>1D7C3</span></span> + <span><span class="testfont">𝞩</span>=<span>1D7A9</span></span> + <span><span class="testfont">𝘼</span>=<span>1D63C</span></span> + <span><span class="testfont">𝘽</span>=<span>1D63D</span></span> + <span><span class="testfont">𝘾</span>=<span>1D63E</span></span> + <span><span class="testfont">𝘿</span>=<span>1D63F</span></span> + <span><span class="testfont">𝙀</span>=<span>1D640</span></span> + <span><span class="testfont">𝙁</span>=<span>1D641</span></span> + <span><span class="testfont">𝙂</span>=<span>1D642</span></span> + <span><span class="testfont">𝙃</span>=<span>1D643</span></span><br/> + <span><span class="testfont">𝙄</span>=<span>1D644</span></span> + <span><span class="testfont">𝙅</span>=<span>1D645</span></span> + <span><span class="testfont">𝙆</span>=<span>1D646</span></span> + <span><span class="testfont">𝙇</span>=<span>1D647</span></span> + <span><span class="testfont">𝙈</span>=<span>1D648</span></span> + <span><span class="testfont">𝙉</span>=<span>1D649</span></span> + <span><span class="testfont">𝙊</span>=<span>1D64A</span></span> + <span><span class="testfont">𝙋</span>=<span>1D64B</span></span> + <span><span class="testfont">𝙌</span>=<span>1D64C</span></span> + <span><span class="testfont">𝙍</span>=<span>1D64D</span></span><br/> + <span><span class="testfont">𝙎</span>=<span>1D64E</span></span> + <span><span class="testfont">𝙏</span>=<span>1D64F</span></span> + <span><span class="testfont">𝙐</span>=<span>1D650</span></span> + <span><span class="testfont">𝙑</span>=<span>1D651</span></span> + <span><span class="testfont">𝙒</span>=<span>1D652</span></span> + <span><span class="testfont">𝙓</span>=<span>1D653</span></span> + <span><span class="testfont">𝙔</span>=<span>1D654</span></span> + <span><span class="testfont">𝙕</span>=<span>1D655</span></span> + <span><span class="testfont">𝙖</span>=<span>1D656</span></span> + <span><span class="testfont">𝙗</span>=<span>1D657</span></span><br/> + <span><span class="testfont">𝙘</span>=<span>1D658</span></span> + <span><span class="testfont">𝙙</span>=<span>1D659</span></span> + <span><span class="testfont">𝙚</span>=<span>1D65A</span></span> + <span><span class="testfont">𝙛</span>=<span>1D65B</span></span> + <span><span class="testfont">𝙜</span>=<span>1D65C</span></span> + <span><span class="testfont">𝙝</span>=<span>1D65D</span></span> + <span><span class="testfont">𝙞</span>=<span>1D65E</span></span> + <span><span class="testfont">𝙟</span>=<span>1D65F</span></span> + <span><span class="testfont">𝙠</span>=<span>1D660</span></span> + <span><span class="testfont">𝙡</span>=<span>1D661</span></span><br/> + <span><span class="testfont">𝙢</span>=<span>1D662</span></span> + <span><span class="testfont">𝙣</span>=<span>1D663</span></span> + <span><span class="testfont">𝙤</span>=<span>1D664</span></span> + <span><span class="testfont">𝙥</span>=<span>1D665</span></span> + <span><span class="testfont">𝙦</span>=<span>1D666</span></span> + <span><span class="testfont">𝙧</span>=<span>1D667</span></span> + <span><span class="testfont">𝙨</span>=<span>1D668</span></span> + <span><span class="testfont">𝙩</span>=<span>1D669</span></span> + <span><span class="testfont">𝙪</span>=<span>1D66A</span></span> + <span><span class="testfont">𝙫</span>=<span>1D66B</span></span><br/> + <span><span class="testfont">𝙬</span>=<span>1D66C</span></span> + <span><span class="testfont">𝙭</span>=<span>1D66D</span></span> + <span><span class="testfont">𝙮</span>=<span>1D66E</span></span> + <span><span class="testfont">𝙯</span>=<span>1D66F</span></span> + <span><span class="testfont">𝞐</span>=<span>1D790</span></span> + <span><span class="testfont">𝞑</span>=<span>1D791</span></span> + <span><span class="testfont">𝞒</span>=<span>1D792</span></span> + <span><span class="testfont">𝞓</span>=<span>1D793</span></span> + <span><span class="testfont">𝞔</span>=<span>1D794</span></span> + <span><span class="testfont">𝞕</span>=<span>1D795</span></span><br/> + <span><span class="testfont">𝞖</span>=<span>1D796</span></span> + <span><span class="testfont">𝞗</span>=<span>1D797</span></span> + <span><span class="testfont">𝞘</span>=<span>1D798</span></span> + <span><span class="testfont">𝞙</span>=<span>1D799</span></span> + <span><span class="testfont">𝞚</span>=<span>1D79A</span></span> + <span><span class="testfont">𝞛</span>=<span>1D79B</span></span> + <span><span class="testfont">𝞜</span>=<span>1D79C</span></span> + <span><span class="testfont">𝞝</span>=<span>1D79D</span></span> + <span><span class="testfont">𝞞</span>=<span>1D79E</span></span> + <span><span class="testfont">𝞟</span>=<span>1D79F</span></span><br/> + <span><span class="testfont">𝞠</span>=<span>1D7A0</span></span> + <span><span class="testfont">𝞢</span>=<span>1D7A2</span></span> + <span><span class="testfont">𝞣</span>=<span>1D7A3</span></span> + <span><span class="testfont">𝞤</span>=<span>1D7A4</span></span> + <span><span class="testfont">𝞥</span>=<span>1D7A5</span></span> + <span><span class="testfont">𝞦</span>=<span>1D7A6</span></span> + <span><span class="testfont">𝞧</span>=<span>1D7A7</span></span> + <span><span class="testfont">𝞨</span>=<span>1D7A8</span></span> + <span><span class="testfont">𝞪</span>=<span>1D7AA</span></span> + <span><span class="testfont">𝞫</span>=<span>1D7AB</span></span><br/> + <span><span class="testfont">𝞬</span>=<span>1D7AC</span></span> + <span><span class="testfont">𝞭</span>=<span>1D7AD</span></span> + <span><span class="testfont">𝞮</span>=<span>1D7AE</span></span> + <span><span class="testfont">𝞯</span>=<span>1D7AF</span></span> + <span><span class="testfont">𝞰</span>=<span>1D7B0</span></span> + <span><span class="testfont">𝞱</span>=<span>1D7B1</span></span> + <span><span class="testfont">𝞲</span>=<span>1D7B2</span></span> + <span><span class="testfont">𝞳</span>=<span>1D7B3</span></span> + <span><span class="testfont">𝞴</span>=<span>1D7B4</span></span> + <span><span class="testfont">𝞵</span>=<span>1D7B5</span></span><br/> + <span><span class="testfont">𝞶</span>=<span>1D7B6</span></span> + <span><span class="testfont">𝞷</span>=<span>1D7B7</span></span> + <span><span class="testfont">𝞸</span>=<span>1D7B8</span></span> + <span><span class="testfont">𝞹</span>=<span>1D7B9</span></span> + <span><span class="testfont">𝞺</span>=<span>1D7BA</span></span> + <span><span class="testfont">𝞻</span>=<span>1D7BB</span></span> + <span><span class="testfont">𝞼</span>=<span>1D7BC</span></span> + <span><span class="testfont">𝞽</span>=<span>1D7BD</span></span> + <span><span class="testfont">𝞾</span>=<span>1D7BE</span></span> + <span><span class="testfont">𝞿</span>=<span>1D7BF</span></span><br/> + <span><span class="testfont">𝟀</span>=<span>1D7C0</span></span> + <span><span class="testfont">𝟁</span>=<span>1D7C1</span></span> + <span><span class="testfont">𝟂</span>=<span>1D7C2</span></span> + <span><span class="testfont">𝟅</span>=<span>1D7C5</span></span> + <span><span class="testfont">𝟇</span>=<span>1D7C7</span></span> + <span><span class="testfont">𝟉</span>=<span>1D7C9</span></span> + <span><span class="testfont">𝟆</span>=<span>1D7C6</span></span> + <span><span class="testfont">𝟈</span>=<span>1D7C8</span></span> + <span><span class="testfont">𝞡</span>=<span>1D7A1</span></span> + <span><span class="testfont">𝟄</span>=<span>1D7C4</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html new file mode 100644 index 0000000..9a686d0e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-bold-italic-001.tentative.html
@@ -0,0 +1,141 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-sans-serif-bold-italic</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-sans-serif-bold-italic-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-sans-serif-bold-italic' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-sans-serif-bold-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">∂</span>=<span>1D7C3</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">∇</span>=<span>1D7A9</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">A</span>=<span>1D63C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">B</span>=<span>1D63D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">C</span>=<span>1D63E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">D</span>=<span>1D63F</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">E</span>=<span>1D640</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">F</span>=<span>1D641</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">G</span>=<span>1D642</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">H</span>=<span>1D643</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">I</span>=<span>1D644</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">J</span>=<span>1D645</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">K</span>=<span>1D646</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">L</span>=<span>1D647</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">M</span>=<span>1D648</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">N</span>=<span>1D649</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">O</span>=<span>1D64A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">P</span>=<span>1D64B</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Q</span>=<span>1D64C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">R</span>=<span>1D64D</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">S</span>=<span>1D64E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">T</span>=<span>1D64F</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">U</span>=<span>1D650</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">V</span>=<span>1D651</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">W</span>=<span>1D652</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">X</span>=<span>1D653</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Y</span>=<span>1D654</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Z</span>=<span>1D655</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">a</span>=<span>1D656</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">b</span>=<span>1D657</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">c</span>=<span>1D658</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">d</span>=<span>1D659</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">e</span>=<span>1D65A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">f</span>=<span>1D65B</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">g</span>=<span>1D65C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">h</span>=<span>1D65D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">i</span>=<span>1D65E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">j</span>=<span>1D65F</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">k</span>=<span>1D660</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">l</span>=<span>1D661</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">m</span>=<span>1D662</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">n</span>=<span>1D663</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">o</span>=<span>1D664</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">p</span>=<span>1D665</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">q</span>=<span>1D666</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">r</span>=<span>1D667</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">s</span>=<span>1D668</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">t</span>=<span>1D669</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">u</span>=<span>1D66A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">v</span>=<span>1D66B</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">w</span>=<span>1D66C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">x</span>=<span>1D66D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">y</span>=<span>1D66E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">z</span>=<span>1D66F</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Α</span>=<span>1D790</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Β</span>=<span>1D791</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Γ</span>=<span>1D792</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Δ</span>=<span>1D793</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ε</span>=<span>1D794</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ζ</span>=<span>1D795</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Η</span>=<span>1D796</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Θ</span>=<span>1D797</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ι</span>=<span>1D798</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Κ</span>=<span>1D799</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Λ</span>=<span>1D79A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Μ</span>=<span>1D79B</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ν</span>=<span>1D79C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ξ</span>=<span>1D79D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ο</span>=<span>1D79E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Π</span>=<span>1D79F</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ρ</span>=<span>1D7A0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Σ</span>=<span>1D7A2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Τ</span>=<span>1D7A3</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Υ</span>=<span>1D7A4</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Φ</span>=<span>1D7A5</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Χ</span>=<span>1D7A6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ψ</span>=<span>1D7A7</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">Ω</span>=<span>1D7A8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">α</span>=<span>1D7AA</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">β</span>=<span>1D7AB</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">γ</span>=<span>1D7AC</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">δ</span>=<span>1D7AD</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ε</span>=<span>1D7AE</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ζ</span>=<span>1D7AF</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">η</span>=<span>1D7B0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">θ</span>=<span>1D7B1</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ι</span>=<span>1D7B2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">κ</span>=<span>1D7B3</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">λ</span>=<span>1D7B4</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">μ</span>=<span>1D7B5</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ν</span>=<span>1D7B6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ξ</span>=<span>1D7B7</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ο</span>=<span>1D7B8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">π</span>=<span>1D7B9</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ρ</span>=<span>1D7BA</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ς</span>=<span>1D7BB</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">σ</span>=<span>1D7BC</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">τ</span>=<span>1D7BD</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">υ</span>=<span>1D7BE</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">φ</span>=<span>1D7BF</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">χ</span>=<span>1D7C0</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ψ</span>=<span>1D7C1</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ω</span>=<span>1D7C2</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϑ</span>=<span>1D7C5</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϕ</span>=<span>1D7C7</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϖ</span>=<span>1D7C9</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϰ</span>=<span>1D7C6</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϱ</span>=<span>1D7C8</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϴ</span>=<span>1D7A1</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-bold-italic">ϵ</span>=<span>1D7C4</span></span><br/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html new file mode 100644 index 0000000..f352596 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative-ref.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-sans-serif-italic (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-sans-serif-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝘈</span>=<span>1D608</span></span> + <span><span class="testfont">𝘉</span>=<span>1D609</span></span> + <span><span class="testfont">𝘊</span>=<span>1D60A</span></span> + <span><span class="testfont">𝘋</span>=<span>1D60B</span></span> + <span><span class="testfont">𝘌</span>=<span>1D60C</span></span> + <span><span class="testfont">𝘍</span>=<span>1D60D</span></span> + <span><span class="testfont">𝘎</span>=<span>1D60E</span></span> + <span><span class="testfont">𝘏</span>=<span>1D60F</span></span> + <span><span class="testfont">𝘐</span>=<span>1D610</span></span> + <span><span class="testfont">𝘑</span>=<span>1D611</span></span><br/> + <span><span class="testfont">𝘒</span>=<span>1D612</span></span> + <span><span class="testfont">𝘓</span>=<span>1D613</span></span> + <span><span class="testfont">𝘔</span>=<span>1D614</span></span> + <span><span class="testfont">𝘕</span>=<span>1D615</span></span> + <span><span class="testfont">𝘖</span>=<span>1D616</span></span> + <span><span class="testfont">𝘗</span>=<span>1D617</span></span> + <span><span class="testfont">𝘘</span>=<span>1D618</span></span> + <span><span class="testfont">𝘙</span>=<span>1D619</span></span> + <span><span class="testfont">𝘚</span>=<span>1D61A</span></span> + <span><span class="testfont">𝘛</span>=<span>1D61B</span></span><br/> + <span><span class="testfont">𝘜</span>=<span>1D61C</span></span> + <span><span class="testfont">𝘝</span>=<span>1D61D</span></span> + <span><span class="testfont">𝘞</span>=<span>1D61E</span></span> + <span><span class="testfont">𝘟</span>=<span>1D61F</span></span> + <span><span class="testfont">𝘠</span>=<span>1D620</span></span> + <span><span class="testfont">𝘡</span>=<span>1D621</span></span> + <span><span class="testfont">𝘢</span>=<span>1D622</span></span> + <span><span class="testfont">𝘣</span>=<span>1D623</span></span> + <span><span class="testfont">𝘤</span>=<span>1D624</span></span> + <span><span class="testfont">𝘥</span>=<span>1D625</span></span><br/> + <span><span class="testfont">𝘦</span>=<span>1D626</span></span> + <span><span class="testfont">𝘧</span>=<span>1D627</span></span> + <span><span class="testfont">𝘨</span>=<span>1D628</span></span> + <span><span class="testfont">𝘩</span>=<span>1D629</span></span> + <span><span class="testfont">𝘪</span>=<span>1D62A</span></span> + <span><span class="testfont">𝘫</span>=<span>1D62B</span></span> + <span><span class="testfont">𝘬</span>=<span>1D62C</span></span> + <span><span class="testfont">𝘭</span>=<span>1D62D</span></span> + <span><span class="testfont">𝘮</span>=<span>1D62E</span></span> + <span><span class="testfont">𝘯</span>=<span>1D62F</span></span><br/> + <span><span class="testfont">𝘰</span>=<span>1D630</span></span> + <span><span class="testfont">𝘱</span>=<span>1D631</span></span> + <span><span class="testfont">𝘲</span>=<span>1D632</span></span> + <span><span class="testfont">𝘳</span>=<span>1D633</span></span> + <span><span class="testfont">𝘴</span>=<span>1D634</span></span> + <span><span class="testfont">𝘵</span>=<span>1D635</span></span> + <span><span class="testfont">𝘶</span>=<span>1D636</span></span> + <span><span class="testfont">𝘷</span>=<span>1D637</span></span> + <span><span class="testfont">𝘸</span>=<span>1D638</span></span> + <span><span class="testfont">𝘹</span>=<span>1D639</span></span><br/> + <span><span class="testfont">𝘺</span>=<span>1D63A</span></span> + <span><span class="testfont">𝘻</span>=<span>1D63B</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html new file mode 100644 index 0000000..c312cf6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-sans-serif-italic-001.tentative.html
@@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-sans-serif-italic</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-sans-serif-italic-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-sans-serif-italic' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-sans-serif-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">A</span>=<span>1D608</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">B</span>=<span>1D609</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">C</span>=<span>1D60A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">D</span>=<span>1D60B</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">E</span>=<span>1D60C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">F</span>=<span>1D60D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">G</span>=<span>1D60E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">H</span>=<span>1D60F</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">I</span>=<span>1D610</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">J</span>=<span>1D611</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">K</span>=<span>1D612</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">L</span>=<span>1D613</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">M</span>=<span>1D614</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">N</span>=<span>1D615</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">O</span>=<span>1D616</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">P</span>=<span>1D617</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">Q</span>=<span>1D618</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">R</span>=<span>1D619</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">S</span>=<span>1D61A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">T</span>=<span>1D61B</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">U</span>=<span>1D61C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">V</span>=<span>1D61D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">W</span>=<span>1D61E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">X</span>=<span>1D61F</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">Y</span>=<span>1D620</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">Z</span>=<span>1D621</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">a</span>=<span>1D622</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">b</span>=<span>1D623</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">c</span>=<span>1D624</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">d</span>=<span>1D625</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">e</span>=<span>1D626</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">f</span>=<span>1D627</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">g</span>=<span>1D628</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">h</span>=<span>1D629</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">i</span>=<span>1D62A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">j</span>=<span>1D62B</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">k</span>=<span>1D62C</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">l</span>=<span>1D62D</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">m</span>=<span>1D62E</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">n</span>=<span>1D62F</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">o</span>=<span>1D630</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">p</span>=<span>1D631</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">q</span>=<span>1D632</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">r</span>=<span>1D633</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">s</span>=<span>1D634</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">t</span>=<span>1D635</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">u</span>=<span>1D636</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">v</span>=<span>1D637</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">w</span>=<span>1D638</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">x</span>=<span>1D639</span></span><br/> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">y</span>=<span>1D63A</span></span> + <span><span class="testfont" style="text-transform: math-sans-serif-italic">z</span>=<span>1D63B</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html new file mode 100644 index 0000000..6cbe296 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative-ref.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-script (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-script.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𝒜</span>=<span>1D49C</span></span> + <span><span class="testfont">ℬ</span>=<span>0212C</span></span> + <span><span class="testfont">𝒞</span>=<span>1D49E</span></span> + <span><span class="testfont">𝒟</span>=<span>1D49F</span></span> + <span><span class="testfont">ℰ</span>=<span>02130</span></span> + <span><span class="testfont">ℱ</span>=<span>02131</span></span> + <span><span class="testfont">𝒢</span>=<span>1D4A2</span></span> + <span><span class="testfont">ℋ</span>=<span>0210B</span></span> + <span><span class="testfont">ℐ</span>=<span>02110</span></span> + <span><span class="testfont">𝒥</span>=<span>1D4A5</span></span><br/> + <span><span class="testfont">𝒦</span>=<span>1D4A6</span></span> + <span><span class="testfont">ℒ</span>=<span>02112</span></span> + <span><span class="testfont">ℳ</span>=<span>02133</span></span> + <span><span class="testfont">𝒩</span>=<span>1D4A9</span></span> + <span><span class="testfont">𝒪</span>=<span>1D4AA</span></span> + <span><span class="testfont">𝒫</span>=<span>1D4AB</span></span> + <span><span class="testfont">𝒬</span>=<span>1D4AC</span></span> + <span><span class="testfont">ℛ</span>=<span>0211B</span></span> + <span><span class="testfont">𝒮</span>=<span>1D4AE</span></span> + <span><span class="testfont">𝒯</span>=<span>1D4AF</span></span><br/> + <span><span class="testfont">𝒰</span>=<span>1D4B0</span></span> + <span><span class="testfont">𝒱</span>=<span>1D4B1</span></span> + <span><span class="testfont">𝒲</span>=<span>1D4B2</span></span> + <span><span class="testfont">𝒳</span>=<span>1D4B3</span></span> + <span><span class="testfont">𝒴</span>=<span>1D4B4</span></span> + <span><span class="testfont">𝒵</span>=<span>1D4B5</span></span> + <span><span class="testfont">𝒶</span>=<span>1D4B6</span></span> + <span><span class="testfont">𝒷</span>=<span>1D4B7</span></span> + <span><span class="testfont">𝒸</span>=<span>1D4B8</span></span> + <span><span class="testfont">𝒹</span>=<span>1D4B9</span></span><br/> + <span><span class="testfont">ℯ</span>=<span>0212F</span></span> + <span><span class="testfont">𝒻</span>=<span>1D4BB</span></span> + <span><span class="testfont">ℊ</span>=<span>0210A</span></span> + <span><span class="testfont">𝒽</span>=<span>1D4BD</span></span> + <span><span class="testfont">𝒾</span>=<span>1D4BE</span></span> + <span><span class="testfont">𝒿</span>=<span>1D4BF</span></span> + <span><span class="testfont">𝓀</span>=<span>1D4C0</span></span> + <span><span class="testfont">𝓁</span>=<span>1D4C1</span></span> + <span><span class="testfont">𝓂</span>=<span>1D4C2</span></span> + <span><span class="testfont">𝓃</span>=<span>1D4C3</span></span><br/> + <span><span class="testfont">ℴ</span>=<span>02134</span></span> + <span><span class="testfont">𝓅</span>=<span>1D4C5</span></span> + <span><span class="testfont">𝓆</span>=<span>1D4C6</span></span> + <span><span class="testfont">𝓇</span>=<span>1D4C7</span></span> + <span><span class="testfont">𝓈</span>=<span>1D4C8</span></span> + <span><span class="testfont">𝓉</span>=<span>1D4C9</span></span> + <span><span class="testfont">𝓊</span>=<span>1D4CA</span></span> + <span><span class="testfont">𝓋</span>=<span>1D4CB</span></span> + <span><span class="testfont">𝓌</span>=<span>1D4CC</span></span> + <span><span class="testfont">𝓍</span>=<span>1D4CD</span></span><br/> + <span><span class="testfont">𝓎</span>=<span>1D4CE</span></span> + <span><span class="testfont">𝓏</span>=<span>1D4CF</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html new file mode 100644 index 0000000..130d7a05 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-script-001.tentative.html
@@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-script</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-script-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-script' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-script.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-script">A</span>=<span>1D49C</span></span> + <span><span class="testfont" style="text-transform: math-script">B</span>=<span>0212C</span></span> + <span><span class="testfont" style="text-transform: math-script">C</span>=<span>1D49E</span></span> + <span><span class="testfont" style="text-transform: math-script">D</span>=<span>1D49F</span></span> + <span><span class="testfont" style="text-transform: math-script">E</span>=<span>02130</span></span> + <span><span class="testfont" style="text-transform: math-script">F</span>=<span>02131</span></span> + <span><span class="testfont" style="text-transform: math-script">G</span>=<span>1D4A2</span></span> + <span><span class="testfont" style="text-transform: math-script">H</span>=<span>0210B</span></span> + <span><span class="testfont" style="text-transform: math-script">I</span>=<span>02110</span></span> + <span><span class="testfont" style="text-transform: math-script">J</span>=<span>1D4A5</span></span><br/> + <span><span class="testfont" style="text-transform: math-script">K</span>=<span>1D4A6</span></span> + <span><span class="testfont" style="text-transform: math-script">L</span>=<span>02112</span></span> + <span><span class="testfont" style="text-transform: math-script">M</span>=<span>02133</span></span> + <span><span class="testfont" style="text-transform: math-script">N</span>=<span>1D4A9</span></span> + <span><span class="testfont" style="text-transform: math-script">O</span>=<span>1D4AA</span></span> + <span><span class="testfont" style="text-transform: math-script">P</span>=<span>1D4AB</span></span> + <span><span class="testfont" style="text-transform: math-script">Q</span>=<span>1D4AC</span></span> + <span><span class="testfont" style="text-transform: math-script">R</span>=<span>0211B</span></span> + <span><span class="testfont" style="text-transform: math-script">S</span>=<span>1D4AE</span></span> + <span><span class="testfont" style="text-transform: math-script">T</span>=<span>1D4AF</span></span><br/> + <span><span class="testfont" style="text-transform: math-script">U</span>=<span>1D4B0</span></span> + <span><span class="testfont" style="text-transform: math-script">V</span>=<span>1D4B1</span></span> + <span><span class="testfont" style="text-transform: math-script">W</span>=<span>1D4B2</span></span> + <span><span class="testfont" style="text-transform: math-script">X</span>=<span>1D4B3</span></span> + <span><span class="testfont" style="text-transform: math-script">Y</span>=<span>1D4B4</span></span> + <span><span class="testfont" style="text-transform: math-script">Z</span>=<span>1D4B5</span></span> + <span><span class="testfont" style="text-transform: math-script">a</span>=<span>1D4B6</span></span> + <span><span class="testfont" style="text-transform: math-script">b</span>=<span>1D4B7</span></span> + <span><span class="testfont" style="text-transform: math-script">c</span>=<span>1D4B8</span></span> + <span><span class="testfont" style="text-transform: math-script">d</span>=<span>1D4B9</span></span><br/> + <span><span class="testfont" style="text-transform: math-script">e</span>=<span>0212F</span></span> + <span><span class="testfont" style="text-transform: math-script">f</span>=<span>1D4BB</span></span> + <span><span class="testfont" style="text-transform: math-script">g</span>=<span>0210A</span></span> + <span><span class="testfont" style="text-transform: math-script">h</span>=<span>1D4BD</span></span> + <span><span class="testfont" style="text-transform: math-script">i</span>=<span>1D4BE</span></span> + <span><span class="testfont" style="text-transform: math-script">j</span>=<span>1D4BF</span></span> + <span><span class="testfont" style="text-transform: math-script">k</span>=<span>1D4C0</span></span> + <span><span class="testfont" style="text-transform: math-script">l</span>=<span>1D4C1</span></span> + <span><span class="testfont" style="text-transform: math-script">m</span>=<span>1D4C2</span></span> + <span><span class="testfont" style="text-transform: math-script">n</span>=<span>1D4C3</span></span><br/> + <span><span class="testfont" style="text-transform: math-script">o</span>=<span>02134</span></span> + <span><span class="testfont" style="text-transform: math-script">p</span>=<span>1D4C5</span></span> + <span><span class="testfont" style="text-transform: math-script">q</span>=<span>1D4C6</span></span> + <span><span class="testfont" style="text-transform: math-script">r</span>=<span>1D4C7</span></span> + <span><span class="testfont" style="text-transform: math-script">s</span>=<span>1D4C8</span></span> + <span><span class="testfont" style="text-transform: math-script">t</span>=<span>1D4C9</span></span> + <span><span class="testfont" style="text-transform: math-script">u</span>=<span>1D4CA</span></span> + <span><span class="testfont" style="text-transform: math-script">v</span>=<span>1D4CB</span></span> + <span><span class="testfont" style="text-transform: math-script">w</span>=<span>1D4CC</span></span> + <span><span class="testfont" style="text-transform: math-script">x</span>=<span>1D4CD</span></span><br/> + <span><span class="testfont" style="text-transform: math-script">y</span>=<span>1D4CE</span></span> + <span><span class="testfont" style="text-transform: math-script">z</span>=<span>1D4CF</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html new file mode 100644 index 0000000..e4fa35e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative-ref.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-stretched (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-stretched.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𞹾</span>=<span>1EE7E</span></span> + <span><span class="testfont">𞹡</span>=<span>1EE61</span></span> + <span><span class="testfont">𞹵</span>=<span>1EE75</span></span> + <span><span class="testfont">𞹶</span>=<span>1EE76</span></span> + <span><span class="testfont">𞹢</span>=<span>1EE62</span></span> + <span><span class="testfont">𞹧</span>=<span>1EE67</span></span> + <span><span class="testfont">𞹷</span>=<span>1EE77</span></span> + <span><span class="testfont">𞹮</span>=<span>1EE6E</span></span> + <span><span class="testfont">𞹴</span>=<span>1EE74</span></span> + <span><span class="testfont">𞹱</span>=<span>1EE71</span></span><br/> + <span><span class="testfont">𞹹</span>=<span>1EE79</span></span> + <span><span class="testfont">𞹨</span>=<span>1EE68</span></span> + <span><span class="testfont">𞹺</span>=<span>1EE7A</span></span> + <span><span class="testfont">𞹯</span>=<span>1EE6F</span></span> + <span><span class="testfont">𞹻</span>=<span>1EE7B</span></span> + <span><span class="testfont">𞹰</span>=<span>1EE70</span></span> + <span><span class="testfont">𞹲</span>=<span>1EE72</span></span> + <span><span class="testfont">𞹪</span>=<span>1EE6A</span></span> + <span><span class="testfont">𞹬</span>=<span>1EE6C</span></span> + <span><span class="testfont">𞹭</span>=<span>1EE6D</span></span><br/> + <span><span class="testfont">𞹤</span>=<span>1EE64</span></span> + <span><span class="testfont">𞹩</span>=<span>1EE69</span></span> + <span><span class="testfont">𞹼</span>=<span>1EE7C</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html new file mode 100644 index 0000000..de0af72 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-stretched-001.tentative.html
@@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-stretched</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-stretched-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-stretched' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-stretched.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-stretched">ڡ</span>=<span>1EE7E</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ب</span>=<span>1EE61</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ت</span>=<span>1EE75</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ث</span>=<span>1EE76</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ج</span>=<span>1EE62</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ح</span>=<span>1EE67</span></span> + <span><span class="testfont" style="text-transform: math-stretched">خ</span>=<span>1EE77</span></span> + <span><span class="testfont" style="text-transform: math-stretched">س</span>=<span>1EE6E</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ش</span>=<span>1EE74</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ص</span>=<span>1EE71</span></span><br/> + <span><span class="testfont" style="text-transform: math-stretched">ض</span>=<span>1EE79</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ط</span>=<span>1EE68</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ظ</span>=<span>1EE7A</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ع</span>=<span>1EE6F</span></span> + <span><span class="testfont" style="text-transform: math-stretched">غ</span>=<span>1EE7B</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ف</span>=<span>1EE70</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ق</span>=<span>1EE72</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ك</span>=<span>1EE6A</span></span> + <span><span class="testfont" style="text-transform: math-stretched">م</span>=<span>1EE6C</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ن</span>=<span>1EE6D</span></span><br/> + <span><span class="testfont" style="text-transform: math-stretched">ه</span>=<span>1EE64</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ي</span>=<span>1EE69</span></span> + <span><span class="testfont" style="text-transform: math-stretched">ٮ</span>=<span>1EE7C</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html new file mode 100644 index 0000000..7a1c9b00 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative-ref.html
@@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-tailed (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-tailed.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont">𞹒</span>=<span>1EE52</span></span> + <span><span class="testfont">𞹋</span>=<span>1EE4B</span></span> + <span><span class="testfont">𞹍</span>=<span>1EE4D</span></span> + <span><span class="testfont">𞹉</span>=<span>1EE49</span></span> + <span><span class="testfont">𞹂</span>=<span>1EE42</span></span> + <span><span class="testfont">𞹇</span>=<span>1EE47</span></span> + <span><span class="testfont">𞹗</span>=<span>1EE57</span></span> + <span><span class="testfont">𞹟</span>=<span>1EE5F</span></span> + <span><span class="testfont">𞹎</span>=<span>1EE4E</span></span> + <span><span class="testfont">𞹔</span>=<span>1EE54</span></span><br/> + <span><span class="testfont">𞹑</span>=<span>1EE51</span></span> + <span><span class="testfont">𞹙</span>=<span>1EE59</span></span> + <span><span class="testfont">𞹏</span>=<span>1EE4F</span></span> + <span><span class="testfont">𞹛</span>=<span>1EE5B</span></span> + <span><span class="testfont">𞹝</span>=<span>1EE5D</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html new file mode 100644 index 0000000..24fa40b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/math/text-transform-math-tailed-001.tentative.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>text-transform math-tailed</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="text-transform-math-tailed-001.tentative-ref.html"/> +<meta name="assert" content="Verify that a character with 'text-transform: math-tailed' renders the same as the transformed unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-tailed.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><span class="testfont" style="text-transform: math-tailed">ق</span>=<span>1EE52</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ل</span>=<span>1EE4B</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ن</span>=<span>1EE4D</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ي</span>=<span>1EE49</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ج</span>=<span>1EE42</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ح</span>=<span>1EE47</span></span> + <span><span class="testfont" style="text-transform: math-tailed">خ</span>=<span>1EE57</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ٯ</span>=<span>1EE5F</span></span> + <span><span class="testfont" style="text-transform: math-tailed">س</span>=<span>1EE4E</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ش</span>=<span>1EE54</span></span><br/> + <span><span class="testfont" style="text-transform: math-tailed">ص</span>=<span>1EE51</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ض</span>=<span>1EE59</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ع</span>=<span>1EE4F</span></span> + <span><span class="testfont" style="text-transform: math-tailed">غ</span>=<span>1EE5B</span></span> + <span><span class="testfont" style="text-transform: math-tailed">ں</span>=<span>1EE5D</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html new file mode 100644 index 0000000..72e464202 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html
@@ -0,0 +1,15 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS test Reference</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> + +<style> +div { + font: 25px/1 Ahem; + color: green; +} +</style> + +<p>This test passes if there is a green square and no red. + +<div>XX<br>XX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html new file mode 100644 index 0000000..becd463 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html
@@ -0,0 +1,21 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> +<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap."> +<style> +div { + font: 25px/1 Ahem; + color: green; + background: red; + + width: 2ch; + white-space: pre-wrap; +} +</style> + +<p>This test passes if there is a green square and no red. +<div>XX<span> </span>XX</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html new file mode 100644 index 0000000..f62e2e5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html
@@ -0,0 +1,29 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> +<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap."> +<style> +div { + font: 10px/1 Ahem; +} +.ref { + position: absolute; + color: red; + z-index: -1; +} +.ref span { color: green; } +.test { + color: green; + + width: 5ch; + white-space: pre-wrap; +} +</style> + +<p>This test passes if there is a green square and no red. +<div class="ref">XX<span>XXX</span><br>X<span>XX</span>X<span>X</span><br><span>XXXXX</span><br><span>XXXXX</span><br><span>XXXXX</span></div> +<div class="test">XX<span> </span><span>X X </span></div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html new file mode 100644 index 0000000..820012e6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html
@@ -0,0 +1,29 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> +<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap and any overflowing space is removed."> +<style> +div { + font: 25px/1 Ahem; +} +.ref { + position: absolute; + color: red; + z-index: -1; +} +.test span { background: red; } +.test { + color: green; + width: 2ch; + white-space: pre-wrap; +} +.test span { background: green; } +</style> + +<p>This test passes if there is a green square and no red. +<div class="ref">X<span>X</span><br>XX</div> +<div class="test">X<span>  </span><span> XX</span></div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-direction-rtl-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-direction-rtl-expected.txt new file mode 100644 index 0000000..cbfe97a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-direction-rtl-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL scrollIntoView({inline: "start"}), direction: rtl assert_approx_equals: start should be the right edge expected -200 +/- 0.5 but got 200 +FAIL scrollIntoView({inline: "center"}), direction: rtl assert_approx_equals: should center the target expected -150 +/- 0.5 but got 150 +FAIL scrollIntoView({inline: "end"}), direction: rtl assert_approx_equals: end should be the left edge expected -100 +/- 0.5 but got 100 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-direction-rtl.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-direction-rtl.html new file mode 100644 index 0000000..fea92d1d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-direction-rtl.html
@@ -0,0 +1,77 @@ +<!DOCTYPE html> +<title>CSSOM View - scrollIntoView considers direction:rtl</title> +<meta charset="utf-8"> +<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +.box { + float: left; + width: 200px; + height: 200px; +} +#scroller { + direction: rtl; + overflow-x: scroll; + width: 300px; + height: 215px; +} +#container{ + width: 600px; + height: 200px; +} +#target { + background-color: #ff0; +} +</style> +<body> +<div id="scroller"> + <div id="container"> + <div class="row"> + <div class="box"></div> + <div class="box" id="target"></div> + <div class="box"></div> + </div> + </div> +</div> + +<script> +// This page is direction: rtl and scroller is direction: rtl. +// So the the overflow direction is leftward, downward. The beginning edges are the top and right edges. +// And the ending edges are the bottom and left edges. +// Acording to the spec, x is min(0, max(x, element padding edge width - element scrolling area width)). +// So x is nonpositive and decreases leftward. + +var target = document.getElementById("target"); +var scroller = document.getElementById("scroller"); +var box_width = target.offsetWidth; +var scroller_width = scroller.offsetWidth; + +var leftEdge = -2*box_width + scroller_width; +var center = -(3*box_width - scroller_width)/2; +var rightEdge = - box_width; + +test(() => { + scroller.scrollTo(0, 0); + target.scrollIntoView({inline: "start"}); + assert_approx_equals(scroller.scrollLeft, rightEdge, 0.5, "start should be the right edge"); +}, `scrollIntoView({inline: "start"}), direction: rtl`); + +test(() => { + scroller.scrollTo(0, 0); + target.scrollIntoView({inline: "center"}); + assert_approx_equals(scroller.scrollLeft, center, 0.5, "should center the target"); +}, `scrollIntoView({inline: "center"}), direction: rtl`); + +test(() => { + scroller.scrollTo(0, 0); + target.scrollIntoView({inline: "end"}); + assert_approx_equals(scroller.scrollLeft, leftEdge, 0.5, "end should be the left edge"); +}, `scrollIntoView({inline: "end"}), direction: rtl`); +</script> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html index 4d67b4d..56bcf21 100644 --- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html +++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html
@@ -53,6 +53,9 @@ </div> <script> +// In vertical-rl mode, X corresponds to the block axis and is oriented +// leftward. Y corresponds to the inline axis and is oriented downward. +// This assumes that the horizontal scrollbar is on the bottom side. var target = document.getElementById("target"); var scroller = document.getElementById("scroller"); var scrollbar_width = scroller.offsetWidth - scroller.clientWidth; @@ -62,14 +65,42 @@ var box_width = target.offsetWidth; var box_height = target.offsetHeight; -var expectedX = [ ((2*box_width)-scroller_width)+scrollbar_width, ((3*box_width - scroller_width)/2)+ (scrollbar_width/2), box_width ]; -var expectedY = [ box_height, ((3*box_height - scroller_height)/2) + (scrollbar_width/2), ((2*box_height)-scroller_height) + scrollbar_width ]; +var expectedX; +// If scroll bar is on the left side, scroller.scrollLeft won't get bigger than 0, +scroller.scrollLeft = scrollbar_width; +if (scroller.scrollLeft == 0) { + expectedX = { + blockStart: -box_width, + blockCenter: -(((3*box_width - scroller_width)/2) + (scrollbar_width/2)), + blockEnd: -(((2*box_width) - scroller_width) + scrollbar_width), + }; +} else { + expectedX = { + blockStart: -(box_width - scrollbar_width), + blockCenter: -(((3*box_width - scroller_width)/2) + (scrollbar_width/2) - scrollbar_width), + blockEnd: -((2*box_width) - scroller_width), + }; +} + +var expectedY = { + inlineStart: box_height, + inlineCenter: ((3*box_height - scroller_height)/2) + (scrollbar_width/2), + inlineEnd: ((2*box_height) - scroller_height) + scrollbar_width, +}; // As browsers differ in the meaning of scrollLeft when // in a right-to-left mode, we adjust the expectation // to match the semantics of scrollLeft. -if(scroller.scrollLeft === 0) - expectedX = [ -box_width, -(((3*box_width - scroller_width)/2)+ (scrollbar_width/2)), -(((2*box_width)-scroller_width)+scrollbar_width)]; +// In vertical-rl mode, the scroll x coordinate should be nonpositive per the the spec. +// But some browsers is nonnegative, so we adjust the expectation. +scroller.scrollLeft = -1000; +if(scroller.scrollLeft === 0) { + expectedX = { + blockStart: ((2*box_width) - scroller_width) + scrollbar_width, + blockCenter: ((3*box_width - scroller_width)/2) + (scrollbar_width/2), + blockEnd: box_width, + }; +} // This formats dict as a string suitable as test name. // format_value() is provided by testharness.js, @@ -83,15 +114,15 @@ } [ - [{block: "start", inline: "start"}, expectedX[0], expectedY[0]], - [{block: "start", inline: "center"}, expectedX[0], expectedY[1]], - [{block: "start", inline: "end"}, expectedX[0], expectedY[2]], - [{block: "center", inline: "start"}, expectedX[1], expectedY[0]], - [{block: "center", inline: "center"}, expectedX[1], expectedY[1]], - [{block: "center", inline: "end"}, expectedX[1], expectedY[2]], - [{block: "end", inline: "start"}, expectedX[2], expectedY[0]], - [{block: "end", inline: "center"}, expectedX[2], expectedY[1]], - [{block: "end", inline: "end"}, expectedX[2], expectedY[2]], + [{block: "start", inline: "start"}, expectedX.blockStart, expectedY.inlineStart], + [{block: "start", inline: "center"}, expectedX.blockStart, expectedY.inlineCenter], + [{block: "start", inline: "end"}, expectedX.blockStart, expectedY.inlineEnd], + [{block: "center", inline: "start"}, expectedX.blockCenter, expectedY.inlineStart], + [{block: "center", inline: "center"}, expectedX.blockCenter, expectedY.inlineCenter], + [{block: "center", inline: "end"}, expectedX.blockCenter, expectedY.inlineEnd], + [{block: "end", inline: "start"}, expectedX.blockEnd, expectedY.inlineStart], + [{block: "end", inline: "center"}, expectedX.blockEnd, expectedY.inlineCenter], + [{block: "end", inline: "end"}, expectedX.blockEnd, expectedY.inlineEnd], ].forEach(([input, expectedX, expectedY]) => { test(() => { scroller.scrollTo(0, 0);
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/onloadthenobserve-firstInput.html b/third_party/blink/web_tests/external/wpt/event-timing/onloadthenobserve-firstInput.html index 4efdfbb..fe40bdf 100644 --- a/third_party/blink/web_tests/external/wpt/event-timing/onloadthenobserve-firstInput.html +++ b/third_party/blink/web_tests/external/wpt/event-timing/onloadthenobserve-firstInput.html
@@ -17,7 +17,7 @@ PerformanceObserver is registered Click 1 Click 2 - PerformanceObserver should observe only one firstInput entry. + PerformanceObserver should observe only one first-input entry. (Dispatch and Process Click 2 - not buffered) */ async_test(function(t) { @@ -43,7 +43,7 @@ new PerformanceObserver(function(entryList) { assert_equals(entryList.getEntries().length, 1); resolve(); - }).observe({ type: 'firstInput' , buffered: true}); + }).observe({ type: 'first-input' , buffered: true}); }); on_event(window, 'load', function(e) { @@ -57,7 +57,7 @@ }); }); }, - "Event Timing: check firstInput after onload, observer, click, click." + "Event Timing: check first-input after onload, observer, click, click." ); </script> </html>
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/only-observe-firstInput.html b/third_party/blink/web_tests/external/wpt/event-timing/only-observe-firstInput.html index dd6a18e..d356902 100644 --- a/third_party/blink/web_tests/external/wpt/event-timing/only-observe-firstInput.html +++ b/third_party/blink/web_tests/external/wpt/event-timing/only-observe-firstInput.html
@@ -12,7 +12,7 @@ <script> /* Test: - PerformanceObserver for firstInput is registered + PerformanceObserver for first-input is registered Click 1 Click 2 Wait @@ -27,14 +27,14 @@ const observedEntries = entryList.getEntries().filter( entry => entry.name === 'mousedown'); assert_equals(observedEntries.length, 1); - assert_equals(observedEntries[0].entryType, 'firstInput'); + assert_equals(observedEntries[0].entryType, 'first-input'); assert_equals(observedEntries[0].name, 'mousedown'); - })).observe({ entryTypes: ['firstInput'] }); + })).observe({ entryTypes: ['first-input'] }); on_event(window, 'load', () => { clickAndBlockMain('button').then(() => { clickAndBlockMain('button').then(wait).then( () => { // After some wait, the PerformanceObserver should have processed both clicks. - // One and only one firstInput entry should have been dispatched, so + // One and only one first-input entry should have been dispatched, so // |hasObservedFirstInput| should be true. t.step_timeout( () => { assert_true(hasObservedFirstInput); @@ -44,7 +44,7 @@ }); }); }, - "Event Timing: check firstInput for a PerformanceObserver observing only firstInput." + "Event Timing: check first-input for a PerformanceObserver observing only first-input." ); </script> </html>
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/programmatic-click-not-observed.html b/third_party/blink/web_tests/external/wpt/event-timing/programmatic-click-not-observed.html index 4c7c4e7..9eb0670 100644 --- a/third_party/blink/web_tests/external/wpt/event-timing/programmatic-click-not-observed.html +++ b/third_party/blink/web_tests/external/wpt/event-timing/programmatic-click-not-observed.html
@@ -27,7 +27,7 @@ // the one from the clickAndBlockMain() call. assert_greater_than_equal(entry.processingStart, beforeClick); // Check that the first input entry was also from the second click. - const firstInput = performance.getEntriesByType('firstInput'); + const firstInput = performance.getEntriesByType('first-input'); assert_equals(firstInput.length, 1); assert_greater_than_equal(firstInput[0].processingStart, beforeClick); }));
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/resources/event-timing-test-utils.js b/third_party/blink/web_tests/external/wpt/event-timing/resources/event-timing-test-utils.js index 53cd4979..83f1bc7 100644 --- a/third_party/blink/web_tests/external/wpt/event-timing/resources/event-timing-test-utils.js +++ b/third_party/blink/web_tests/external/wpt/event-timing/resources/event-timing-test-utils.js
@@ -24,7 +24,7 @@ // This method should receive an entry of type 'event'. |is_first| is true only // when the event also happens to correspond to the first event. In this case, -// the timings of the 'firstInput' entry should be equal to those of this entry. +// the timings of the 'first-input' entry should be equal to those of this entry. function verifyClickEvent(entry, is_first=false) { assert_true(entry.cancelable); assert_equals(entry.name, 'mousedown'); @@ -40,11 +40,11 @@ assert_greater_than_equal(entry.duration + 4, entry.processingEnd - entry.startTime, "The entry's duration must be at least as large as processingEnd - startTime."); if (is_first) { - let firstInputs = performance.getEntriesByType('firstInput'); - assert_equals(firstInputs.length, 1, 'There should be a single firstInput entry'); + let firstInputs = performance.getEntriesByType('first-input'); + assert_equals(firstInputs.length, 1, 'There should be a single first-input entry'); let firstInput = firstInputs[0]; assert_equals(firstInput.name, entry.name); - assert_equals(firstInput.entryType, 'firstInput'); + assert_equals(firstInput.entryType, 'first-input'); assert_equals(firstInput.startTime, entry.startTime); assert_equals(firstInput.duration, entry.duration); assert_equals(firstInput.processingStart, entry.processingStart);
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/retrieve-firstInput.html b/third_party/blink/web_tests/external/wpt/event-timing/retrieve-firstInput.html index ae66fd9..5ea5d74 100644 --- a/third_party/blink/web_tests/external/wpt/event-timing/retrieve-firstInput.html +++ b/third_party/blink/web_tests/external/wpt/event-timing/retrieve-firstInput.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <meta charset=utf-8 /> -<title>Event Timing: firstInput entry should be buffered even without observer</title> +<title>Event Timing: first-input entry should be buffered even without observer</title> <button id='button'>Generate a 'click' event</button> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> @@ -14,22 +14,22 @@ async_test(function(t) { function testEntries() { // First callback is not ensured to have the entry. - if (performance.getEntriesByType('firstInput').length === 0) { + if (performance.getEntriesByType('first-input').length === 0) { t.step_timeout(testEntries, 10); return; } - assert_equals(performance.getEntriesByType('firstInput').length, 1, - "There should be a firstInput entry in the performance timeline"); - const entry = performance.getEntriesByType('firstInput')[0]; + assert_equals(performance.getEntriesByType('first-input').length, 1, + "There should be a first-input entry in the performance timeline"); + const entry = performance.getEntriesByType('first-input')[0]; assert_equals(entry.name, 'mousedown'); - assert_equals(entry.entryType, 'firstInput'); + assert_equals(entry.entryType, 'first-input'); assert_greater_than_equal(entry.duration, 104, "The first input was a long one."); t.done(); } clickAndBlockMain('button').then(wait).then(t.step_func(testEntries)); }, - "Event Timing: check firstInput after onload, observer, click, click." + "Event Timing: check first-input after onload, observer, click, click." ); </script> </html>
diff --git a/third_party/blink/web_tests/external/wpt/event-timing/supported-types.window.js b/third_party/blink/web_tests/external/wpt/event-timing/supported-types.window.js index c81d501..443c253 100644 --- a/third_party/blink/web_tests/external/wpt/event-timing/supported-types.window.js +++ b/third_party/blink/web_tests/external/wpt/event-timing/supported-types.window.js
@@ -2,10 +2,10 @@ if (typeof PerformanceObserver.supportedEntryTypes === "undefined") assert_unreached("supportedEntryTypes is not supported."); const types = PerformanceObserver.supportedEntryTypes; - assert_true(types.includes("firstInput"), - "There should be 'firstInput' in PerformanceObserver.supportedEntryTypes"); + assert_true(types.includes("first-input"), + "There should be 'first-input' in PerformanceObserver.supportedEntryTypes"); assert_true(types.includes("event"), "There should be 'event' in PerformanceObserver.supportedEntryTypes"); - assert_greater_than(types.indexOf("firstInput"), types.indexOf('event'), - "The 'firstInput' entry should appear after the 'event' entry"); -}, "supportedEntryTypes contains 'event' and 'firstInput'."); + assert_greater_than(types.indexOf("first-input"), types.indexOf('event'), + "The 'first-input' entry should appear after the 'event' entry"); +}, "supportedEntryTypes contains 'event' and 'first-input'.");
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html index 3716f93..fd4844d1 100644 --- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html +++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/cross-origin-image.sub.html
@@ -13,7 +13,7 @@ t.step_func_done(function(entryList) { assert_equals(entryList.getEntries().length, 1); const entry = entryList.getEntries()[0]; - assert_equals(entry.entryType, 'largestContentfulPaint'); + assert_equals(entry.entryType, 'largest-contentful-paint'); assert_equals(entry.startTime, 0, 'The startTime value should be 0 for a cross origin image.'); assert_equals(entry.duration, 0); // blue.png is 133 x 106. @@ -26,7 +26,7 @@ assert_equals(entry.element, document.getElementById('image_id')); }) ); - observer.observe({type: 'largestContentfulPaint', buffered: true}); + observer.observe({type: 'largest-contentful-paint', buffered: true}); }, 'Cross-origin image is observable, with startTime equal to 0.'); </script>
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-image.html b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-image.html index 8adf215..a1ecbce 100644 --- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-image.html +++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-image.html
@@ -14,7 +14,7 @@ t.step_func_done(function(entryList) { assert_equals(entryList.getEntries().length, 1); const entry = entryList.getEntries()[0]; - assert_equals(entry.entryType, 'largestContentfulPaint'); + assert_equals(entry.entryType, 'largest-contentful-paint'); assert_greater_than_equal(entry.startTime, beforeRender, 'The rendering timestamp should occur after script starts running.'); assert_greater_than_equal(performance.now(), entry.startTime, @@ -32,7 +32,7 @@ assert_equals(entry.element, document.getElementById('image_id')); }) ); - observer.observe({type: 'largestContentfulPaint', buffered: true}); + observer.observe({type: 'largest-contentful-paint', buffered: true}); }, 'Same-origin image is observable.'); </script>
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-text.html b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-text.html index a9a0d75..5889790 100644 --- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-text.html +++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/observe-text.html
@@ -19,7 +19,7 @@ t.step_func_done(function(entryList) { assert_equals(entryList.getEntries().length, 1); const entry = entryList.getEntries()[0]; - assert_equals(entry.entryType, 'largestContentfulPaint'); + assert_equals(entry.entryType, 'largest-contentful-paint'); assert_greater_than_equal(entry.startTime, beforeRender); assert_greater_than_equal(performance.now(), entry.startTime); assert_equals(entry.duration, 0); @@ -33,7 +33,7 @@ assert_equals(entry.element, document.getElementById('my_text')); }) ); - observer.observe({type: 'largestContentfulPaint', buffered: true}); + observer.observe({type: 'largest-contentful-paint', buffered: true}); beforeRender = performance.now(); }, 'Element with elementtiming attribute is observable.'); </script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/buffer-layout-shift.html b/third_party/blink/web_tests/external/wpt/layout-instability/buffer-layout-shift.html index c1d0dc6..2567785 100644 --- a/third_party/blink/web_tests/external/wpt/layout-instability/buffer-layout-shift.html +++ b/third_party/blink/web_tests/external/wpt/layout-instability/buffer-layout-shift.html
@@ -16,16 +16,16 @@ // Modify the position of the div. document.getElementById('myDiv').style = "top: 60px"; function testBufferedEntry() { - if (performance.getEntriesByType('layoutShift').length === 0) { + if (performance.getEntriesByType('layout-shift').length === 0) { t.step_timeout(testBufferedEntry, 0); return; } const endTime = performance.now(); - assert_equals(performance.getEntriesByType('layoutShift').length, 1); + assert_equals(performance.getEntriesByType('layout-shift').length, 1); assert_equals(performance.getEntries().filter( - entry => entry.entryType === 'layoutShift').length, 1); - const entry = performance.getEntriesByType('layoutShift')[0]; - assert_equals(entry.entryType, "layoutShift"); + entry => entry.entryType === 'layout-shift').length, 1); + const entry = performance.getEntriesByType('layout-shift')[0]; + assert_equals(entry.entryType, "layout-shift"); assert_equals(entry.name, ""); assert_greater_than_equal(entry.startTime, startTime) assert_less_than_equal(entry.startTime, endTime)
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/observe-layout-shift.html b/third_party/blink/web_tests/external/wpt/layout-instability/observe-layout-shift.html index 25e4950f6..297441b 100644 --- a/third_party/blink/web_tests/external/wpt/layout-instability/observe-layout-shift.html +++ b/third_party/blink/web_tests/external/wpt/layout-instability/observe-layout-shift.html
@@ -46,7 +46,7 @@ const endTime = performance.now(); assert_equals(entryList.getEntries().length, 1); const entry = entryList.getEntries()[0]; - assert_equals(entry.entryType, "layoutShift"); + assert_equals(entry.entryType, "layout-shift"); assert_equals(entry.name, ""); assert_greater_than_equal(entry.startTime, startTime) assert_less_than_equal(entry.startTime, endTime) @@ -56,7 +56,7 @@ (document.documentElement.clientWidth * document.documentElement.clientHeight)); }) ); - observer.observe({entryTypes: ['layoutShift']}); + observer.observe({entryTypes: ['layout-shift']}); window.onload = () => { // Modify the position of the div. document.getElementById('myDiv').style = "top: 60px"; @@ -70,7 +70,7 @@ const endTime = performance.now(); assert_equals(entryList.getEntries().length, 1); const entry = entryList.getEntries()[0]; - assert_equals(entry.entryType, "layoutShift"); + assert_equals(entry.entryType, "layout-shift"); assert_equals(entry.name, ""); assert_greater_than_equal(entry.startTime, startTime) assert_less_than_equal(entry.startTime, endTime) @@ -83,7 +83,7 @@ assert_greater_than_equal(timeAfterClick, entry.lastInputTime); }) ); - observer.observe({entryTypes: ['layoutShift']}); + observer.observe({entryTypes: ['layout-shift']}); window.onload = () => { // User input event clickAndBlockMain('button').then( () => {
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/supported-layout-type.html b/third_party/blink/web_tests/external/wpt/layout-instability/supported-layout-type.html index af0ff3a..9bc5370 100644 --- a/third_party/blink/web_tests/external/wpt/layout-instability/supported-layout-type.html +++ b/third_party/blink/web_tests/external/wpt/layout-instability/supported-layout-type.html
@@ -9,8 +9,8 @@ test(() => { if (typeof PerformanceObserver.supportedEntryTypes === "undefined") assert_unreached("supportedEntryTypes is not supported."); - assert_greater_than(PerformanceObserver.supportedEntryTypes.indexOf("layoutShift"), -1, - "There should be an entry 'layoutShift' in PerformanceObserver.supportedEntryTypes"); + assert_greater_than(PerformanceObserver.supportedEntryTypes.indexOf("layout-shift"), -1, + "There should be an entry 'layout-shift' in PerformanceObserver.supportedEntryTypes"); }, "supportedEntryTypes contains 'layoutShift'."); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto-ref.html new file mode 100644 index 0000000..f8eaf7a7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto-ref.html
@@ -0,0 +1,139 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>mathvariant auto (reference)</title> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><math class="testfont"><mi>𝜕</mi></math>=<span>1D715</span></span> + <span><math class="testfont"><mi>𝛻</mi></math>=<span>1D6FB</span></span> + <span><math class="testfont"><mi>𝚥</mi></math>=<span>1D6A5</span></span> + <span><math class="testfont"><mi>𝐴</mi></math>=<span>1D434</span></span> + <span><math class="testfont"><mi>𝐵</mi></math>=<span>1D435</span></span> + <span><math class="testfont"><mi>𝐶</mi></math>=<span>1D436</span></span> + <span><math class="testfont"><mi>𝐷</mi></math>=<span>1D437</span></span> + <span><math class="testfont"><mi>𝐸</mi></math>=<span>1D438</span></span> + <span><math class="testfont"><mi>𝐹</mi></math>=<span>1D439</span></span> + <span><math class="testfont"><mi>𝐺</mi></math>=<span>1D43A</span></span><br/> + <span><math class="testfont"><mi>𝐻</mi></math>=<span>1D43B</span></span> + <span><math class="testfont"><mi>𝐼</mi></math>=<span>1D43C</span></span> + <span><math class="testfont"><mi>𝐽</mi></math>=<span>1D43D</span></span> + <span><math class="testfont"><mi>𝐾</mi></math>=<span>1D43E</span></span> + <span><math class="testfont"><mi>𝐿</mi></math>=<span>1D43F</span></span> + <span><math class="testfont"><mi>𝑀</mi></math>=<span>1D440</span></span> + <span><math class="testfont"><mi>𝑁</mi></math>=<span>1D441</span></span> + <span><math class="testfont"><mi>𝑂</mi></math>=<span>1D442</span></span> + <span><math class="testfont"><mi>𝑃</mi></math>=<span>1D443</span></span> + <span><math class="testfont"><mi>𝑄</mi></math>=<span>1D444</span></span><br/> + <span><math class="testfont"><mi>𝑅</mi></math>=<span>1D445</span></span> + <span><math class="testfont"><mi>𝑆</mi></math>=<span>1D446</span></span> + <span><math class="testfont"><mi>𝑇</mi></math>=<span>1D447</span></span> + <span><math class="testfont"><mi>𝑈</mi></math>=<span>1D448</span></span> + <span><math class="testfont"><mi>𝑉</mi></math>=<span>1D449</span></span> + <span><math class="testfont"><mi>𝑊</mi></math>=<span>1D44A</span></span> + <span><math class="testfont"><mi>𝑋</mi></math>=<span>1D44B</span></span> + <span><math class="testfont"><mi>𝑌</mi></math>=<span>1D44C</span></span> + <span><math class="testfont"><mi>𝑍</mi></math>=<span>1D44D</span></span> + <span><math class="testfont"><mi>𝑎</mi></math>=<span>1D44E</span></span><br/> + <span><math class="testfont"><mi>𝑏</mi></math>=<span>1D44F</span></span> + <span><math class="testfont"><mi>𝑐</mi></math>=<span>1D450</span></span> + <span><math class="testfont"><mi>𝑑</mi></math>=<span>1D451</span></span> + <span><math class="testfont"><mi>𝑒</mi></math>=<span>1D452</span></span> + <span><math class="testfont"><mi>𝑓</mi></math>=<span>1D453</span></span> + <span><math class="testfont"><mi>𝑔</mi></math>=<span>1D454</span></span> + <span><math class="testfont"><mi>ℎ</mi></math>=<span>0210E</span></span> + <span><math class="testfont"><mi>𝑖</mi></math>=<span>1D456</span></span> + <span><math class="testfont"><mi>𝑗</mi></math>=<span>1D457</span></span> + <span><math class="testfont"><mi>𝑘</mi></math>=<span>1D458</span></span><br/> + <span><math class="testfont"><mi>𝑙</mi></math>=<span>1D459</span></span> + <span><math class="testfont"><mi>𝑚</mi></math>=<span>1D45A</span></span> + <span><math class="testfont"><mi>𝑛</mi></math>=<span>1D45B</span></span> + <span><math class="testfont"><mi>𝑜</mi></math>=<span>1D45C</span></span> + <span><math class="testfont"><mi>𝑝</mi></math>=<span>1D45D</span></span> + <span><math class="testfont"><mi>𝑞</mi></math>=<span>1D45E</span></span> + <span><math class="testfont"><mi>𝑟</mi></math>=<span>1D45F</span></span> + <span><math class="testfont"><mi>𝑠</mi></math>=<span>1D460</span></span> + <span><math class="testfont"><mi>𝑡</mi></math>=<span>1D461</span></span> + <span><math class="testfont"><mi>𝑢</mi></math>=<span>1D462</span></span><br/> + <span><math class="testfont"><mi>𝑣</mi></math>=<span>1D463</span></span> + <span><math class="testfont"><mi>𝑤</mi></math>=<span>1D464</span></span> + <span><math class="testfont"><mi>𝑥</mi></math>=<span>1D465</span></span> + <span><math class="testfont"><mi>𝑦</mi></math>=<span>1D466</span></span> + <span><math class="testfont"><mi>𝑧</mi></math>=<span>1D467</span></span> + <span><math class="testfont"><mi>𝚤</mi></math>=<span>1D6A4</span></span> + <span><math class="testfont"><mi>𝛢</mi></math>=<span>1D6E2</span></span> + <span><math class="testfont"><mi>𝛣</mi></math>=<span>1D6E3</span></span> + <span><math class="testfont"><mi>𝛤</mi></math>=<span>1D6E4</span></span> + <span><math class="testfont"><mi>𝛥</mi></math>=<span>1D6E5</span></span><br/> + <span><math class="testfont"><mi>𝛦</mi></math>=<span>1D6E6</span></span> + <span><math class="testfont"><mi>𝛧</mi></math>=<span>1D6E7</span></span> + <span><math class="testfont"><mi>𝛨</mi></math>=<span>1D6E8</span></span> + <span><math class="testfont"><mi>𝛩</mi></math>=<span>1D6E9</span></span> + <span><math class="testfont"><mi>𝛪</mi></math>=<span>1D6EA</span></span> + <span><math class="testfont"><mi>𝛫</mi></math>=<span>1D6EB</span></span> + <span><math class="testfont"><mi>𝛬</mi></math>=<span>1D6EC</span></span> + <span><math class="testfont"><mi>𝛭</mi></math>=<span>1D6ED</span></span> + <span><math class="testfont"><mi>𝛮</mi></math>=<span>1D6EE</span></span> + <span><math class="testfont"><mi>𝛯</mi></math>=<span>1D6EF</span></span><br/> + <span><math class="testfont"><mi>𝛰</mi></math>=<span>1D6F0</span></span> + <span><math class="testfont"><mi>𝛱</mi></math>=<span>1D6F1</span></span> + <span><math class="testfont"><mi>𝛲</mi></math>=<span>1D6F2</span></span> + <span><math class="testfont"><mi>𝛴</mi></math>=<span>1D6F4</span></span> + <span><math class="testfont"><mi>𝛵</mi></math>=<span>1D6F5</span></span> + <span><math class="testfont"><mi>𝛶</mi></math>=<span>1D6F6</span></span> + <span><math class="testfont"><mi>𝛷</mi></math>=<span>1D6F7</span></span> + <span><math class="testfont"><mi>𝛸</mi></math>=<span>1D6F8</span></span> + <span><math class="testfont"><mi>𝛹</mi></math>=<span>1D6F9</span></span> + <span><math class="testfont"><mi>𝛺</mi></math>=<span>1D6FA</span></span><br/> + <span><math class="testfont"><mi>𝛼</mi></math>=<span>1D6FC</span></span> + <span><math class="testfont"><mi>𝛽</mi></math>=<span>1D6FD</span></span> + <span><math class="testfont"><mi>𝛾</mi></math>=<span>1D6FE</span></span> + <span><math class="testfont"><mi>𝛿</mi></math>=<span>1D6FF</span></span> + <span><math class="testfont"><mi>𝜀</mi></math>=<span>1D700</span></span> + <span><math class="testfont"><mi>𝜁</mi></math>=<span>1D701</span></span> + <span><math class="testfont"><mi>𝜂</mi></math>=<span>1D702</span></span> + <span><math class="testfont"><mi>𝜃</mi></math>=<span>1D703</span></span> + <span><math class="testfont"><mi>𝜄</mi></math>=<span>1D704</span></span> + <span><math class="testfont"><mi>𝜅</mi></math>=<span>1D705</span></span><br/> + <span><math class="testfont"><mi>𝜆</mi></math>=<span>1D706</span></span> + <span><math class="testfont"><mi>𝜇</mi></math>=<span>1D707</span></span> + <span><math class="testfont"><mi>𝜈</mi></math>=<span>1D708</span></span> + <span><math class="testfont"><mi>𝜉</mi></math>=<span>1D709</span></span> + <span><math class="testfont"><mi>𝜊</mi></math>=<span>1D70A</span></span> + <span><math class="testfont"><mi>𝜋</mi></math>=<span>1D70B</span></span> + <span><math class="testfont"><mi>𝜌</mi></math>=<span>1D70C</span></span> + <span><math class="testfont"><mi>𝜍</mi></math>=<span>1D70D</span></span> + <span><math class="testfont"><mi>𝜎</mi></math>=<span>1D70E</span></span> + <span><math class="testfont"><mi>𝜏</mi></math>=<span>1D70F</span></span><br/> + <span><math class="testfont"><mi>𝜐</mi></math>=<span>1D710</span></span> + <span><math class="testfont"><mi>𝜑</mi></math>=<span>1D711</span></span> + <span><math class="testfont"><mi>𝜒</mi></math>=<span>1D712</span></span> + <span><math class="testfont"><mi>𝜓</mi></math>=<span>1D713</span></span> + <span><math class="testfont"><mi>𝜔</mi></math>=<span>1D714</span></span> + <span><math class="testfont"><mi>𝜗</mi></math>=<span>1D717</span></span> + <span><math class="testfont"><mi>𝜙</mi></math>=<span>1D719</span></span> + <span><math class="testfont"><mi>𝜛</mi></math>=<span>1D71B</span></span> + <span><math class="testfont"><mi>𝜘</mi></math>=<span>1D718</span></span> + <span><math class="testfont"><mi>𝜚</mi></math>=<span>1D71A</span></span><br/> + <span><math class="testfont"><mi>𝛳</mi></math>=<span>1D6F3</span></span> + <span><math class="testfont"><mi>𝜖</mi></math>=<span>1D716</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html new file mode 100644 index 0000000..3390fc0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-auto.html
@@ -0,0 +1,144 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>mathvariant auto</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values"> +<link rel="match" href="mathvariant-auto-ref.html"/> +<meta name="assert" content="Verify that a single-char <mi> is equivalent to an <mi> with the transformed italic unicode character."> +<style> + @font-face { + font-family: TestFont; + src: url("/fonts/math/mathvariant-italic.woff"); + } + body > span { + padding: 10px; + } + span > span { + font-family: monospace; + font-size: 10px; + } + .testfont { + font-family: TestFont; + font-size: 10px; + } +</style> +<body> + <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> + <p>Test passes if all the equalities below are true.</p> + <span><math class="testfont"><mi>∂</mi></math>=<span>1D715</span></span> + <span><math class="testfont"><mi>∇</mi></math>=<span>1D6FB</span></span> + <span><math class="testfont"><mi>ȷ</mi></math>=<span>1D6A5</span></span> + <span><math class="testfont"><mi>A</mi></math>=<span>1D434</span></span> + <span><math class="testfont"><mi>B</mi></math>=<span>1D435</span></span> + <span><math class="testfont"><mi>C</mi></math>=<span>1D436</span></span> + <span><math class="testfont"><mi>D</mi></math>=<span>1D437</span></span> + <span><math class="testfont"><mi>E</mi></math>=<span>1D438</span></span> + <span><math class="testfont"><mi>F</mi></math>=<span>1D439</span></span> + <span><math class="testfont"><mi>G</mi></math>=<span>1D43A</span></span><br/> + <span><math class="testfont"><mi>H</mi></math>=<span>1D43B</span></span> + <span><math class="testfont"><mi>I</mi></math>=<span>1D43C</span></span> + <span><math class="testfont"><mi>J</mi></math>=<span>1D43D</span></span> + <span><math class="testfont"><mi>K</mi></math>=<span>1D43E</span></span> + <span><math class="testfont"><mi>L</mi></math>=<span>1D43F</span></span> + <span><math class="testfont"><mi>M</mi></math>=<span>1D440</span></span> + <span><math class="testfont"><mi>N</mi></math>=<span>1D441</span></span> + <span><math class="testfont"><mi>O</mi></math>=<span>1D442</span></span> + <span><math class="testfont"><mi>P</mi></math>=<span>1D443</span></span> + <span><math class="testfont"><mi>Q</mi></math>=<span>1D444</span></span><br/> + <span><math class="testfont"><mi>R</mi></math>=<span>1D445</span></span> + <span><math class="testfont"><mi>S</mi></math>=<span>1D446</span></span> + <span><math class="testfont"><mi>T</mi></math>=<span>1D447</span></span> + <span><math class="testfont"><mi>U</mi></math>=<span>1D448</span></span> + <span><math class="testfont"><mi>V</mi></math>=<span>1D449</span></span> + <span><math class="testfont"><mi>W</mi></math>=<span>1D44A</span></span> + <span><math class="testfont"><mi>X</mi></math>=<span>1D44B</span></span> + <span><math class="testfont"><mi>Y</mi></math>=<span>1D44C</span></span> + <span><math class="testfont"><mi>Z</mi></math>=<span>1D44D</span></span> + <span><math class="testfont"><mi>a</mi></math>=<span>1D44E</span></span><br/> + <span><math class="testfont"><mi>b</mi></math>=<span>1D44F</span></span> + <span><math class="testfont"><mi>c</mi></math>=<span>1D450</span></span> + <span><math class="testfont"><mi>d</mi></math>=<span>1D451</span></span> + <span><math class="testfont"><mi>e</mi></math>=<span>1D452</span></span> + <span><math class="testfont"><mi>f</mi></math>=<span>1D453</span></span> + <span><math class="testfont"><mi>g</mi></math>=<span>1D454</span></span> + <span><math class="testfont"><mi>h</mi></math>=<span>0210E</span></span> + <span><math class="testfont"><mi>i</mi></math>=<span>1D456</span></span> + <span><math class="testfont"><mi>j</mi></math>=<span>1D457</span></span> + <span><math class="testfont"><mi>k</mi></math>=<span>1D458</span></span><br/> + <span><math class="testfont"><mi>l</mi></math>=<span>1D459</span></span> + <span><math class="testfont"><mi>m</mi></math>=<span>1D45A</span></span> + <span><math class="testfont"><mi>n</mi></math>=<span>1D45B</span></span> + <span><math class="testfont"><mi>o</mi></math>=<span>1D45C</span></span> + <span><math class="testfont"><mi>p</mi></math>=<span>1D45D</span></span> + <span><math class="testfont"><mi>q</mi></math>=<span>1D45E</span></span> + <span><math class="testfont"><mi>r</mi></math>=<span>1D45F</span></span> + <span><math class="testfont"><mi>s</mi></math>=<span>1D460</span></span> + <span><math class="testfont"><mi>t</mi></math>=<span>1D461</span></span> + <span><math class="testfont"><mi>u</mi></math>=<span>1D462</span></span><br/> + <span><math class="testfont"><mi>v</mi></math>=<span>1D463</span></span> + <span><math class="testfont"><mi>w</mi></math>=<span>1D464</span></span> + <span><math class="testfont"><mi>x</mi></math>=<span>1D465</span></span> + <span><math class="testfont"><mi>y</mi></math>=<span>1D466</span></span> + <span><math class="testfont"><mi>z</mi></math>=<span>1D467</span></span> + <span><math class="testfont"><mi>ı</mi></math>=<span>1D6A4</span></span> + <span><math class="testfont"><mi>Α</mi></math>=<span>1D6E2</span></span> + <span><math class="testfont"><mi>Β</mi></math>=<span>1D6E3</span></span> + <span><math class="testfont"><mi>Γ</mi></math>=<span>1D6E4</span></span> + <span><math class="testfont"><mi>Δ</mi></math>=<span>1D6E5</span></span><br/> + <span><math class="testfont"><mi>Ε</mi></math>=<span>1D6E6</span></span> + <span><math class="testfont"><mi>Ζ</mi></math>=<span>1D6E7</span></span> + <span><math class="testfont"><mi>Η</mi></math>=<span>1D6E8</span></span> + <span><math class="testfont"><mi>Θ</mi></math>=<span>1D6E9</span></span> + <span><math class="testfont"><mi>Ι</mi></math>=<span>1D6EA</span></span> + <span><math class="testfont"><mi>Κ</mi></math>=<span>1D6EB</span></span> + <span><math class="testfont"><mi>Λ</mi></math>=<span>1D6EC</span></span> + <span><math class="testfont"><mi>Μ</mi></math>=<span>1D6ED</span></span> + <span><math class="testfont"><mi>Ν</mi></math>=<span>1D6EE</span></span> + <span><math class="testfont"><mi>Ξ</mi></math>=<span>1D6EF</span></span><br/> + <span><math class="testfont"><mi>Ο</mi></math>=<span>1D6F0</span></span> + <span><math class="testfont"><mi>Π</mi></math>=<span>1D6F1</span></span> + <span><math class="testfont"><mi>Ρ</mi></math>=<span>1D6F2</span></span> + <span><math class="testfont"><mi>Σ</mi></math>=<span>1D6F4</span></span> + <span><math class="testfont"><mi>Τ</mi></math>=<span>1D6F5</span></span> + <span><math class="testfont"><mi>Υ</mi></math>=<span>1D6F6</span></span> + <span><math class="testfont"><mi>Φ</mi></math>=<span>1D6F7</span></span> + <span><math class="testfont"><mi>Χ</mi></math>=<span>1D6F8</span></span> + <span><math class="testfont"><mi>Ψ</mi></math>=<span>1D6F9</span></span> + <span><math class="testfont"><mi>Ω</mi></math>=<span>1D6FA</span></span><br/> + <span><math class="testfont"><mi>α</mi></math>=<span>1D6FC</span></span> + <span><math class="testfont"><mi>β</mi></math>=<span>1D6FD</span></span> + <span><math class="testfont"><mi>γ</mi></math>=<span>1D6FE</span></span> + <span><math class="testfont"><mi>δ</mi></math>=<span>1D6FF</span></span> + <span><math class="testfont"><mi>ε</mi></math>=<span>1D700</span></span> + <span><math class="testfont"><mi>ζ</mi></math>=<span>1D701</span></span> + <span><math class="testfont"><mi>η</mi></math>=<span>1D702</span></span> + <span><math class="testfont"><mi>θ</mi></math>=<span>1D703</span></span> + <span><math class="testfont"><mi>ι</mi></math>=<span>1D704</span></span> + <span><math class="testfont"><mi>κ</mi></math>=<span>1D705</span></span><br/> + <span><math class="testfont"><mi>λ</mi></math>=<span>1D706</span></span> + <span><math class="testfont"><mi>μ</mi></math>=<span>1D707</span></span> + <span><math class="testfont"><mi>ν</mi></math>=<span>1D708</span></span> + <span><math class="testfont"><mi>ξ</mi></math>=<span>1D709</span></span> + <span><math class="testfont"><mi>ο</mi></math>=<span>1D70A</span></span> + <span><math class="testfont"><mi>π</mi></math>=<span>1D70B</span></span> + <span><math class="testfont"><mi>ρ</mi></math>=<span>1D70C</span></span> + <span><math class="testfont"><mi>ς</mi></math>=<span>1D70D</span></span> + <span><math class="testfont"><mi>σ</mi></math>=<span>1D70E</span></span> + <span><math class="testfont"><mi>τ</mi></math>=<span>1D70F</span></span><br/> + <span><math class="testfont"><mi>υ</mi></math>=<span>1D710</span></span> + <span><math class="testfont"><mi>φ</mi></math>=<span>1D711</span></span> + <span><math class="testfont"><mi>χ</mi></math>=<span>1D712</span></span> + <span><math class="testfont"><mi>ψ</mi></math>=<span>1D713</span></span> + <span><math class="testfont"><mi>ω</mi></math>=<span>1D714</span></span> + <span><math class="testfont"><mi>ϑ</mi></math>=<span>1D717</span></span> + <span><math class="testfont"><mi>ϕ</mi></math>=<span>1D719</span></span> + <span><math class="testfont"><mi>ϖ</mi></math>=<span>1D71B</span></span> + <span><math class="testfont"><mi>ϰ</mi></math>=<span>1D718</span></span> + <span><math class="testfont"><mi>ϱ</mi></math>=<span>1D71A</span></span><br/> + <span><math class="testfont"><mi>ϴ</mi></math>=<span>1D6F3</span></span> + <span><math class="testfont"><mi>ϵ</mi></math>=<span>1D716</span></span> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html index b883b12..44588948e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,57 +23,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝕬</mtext></math>=<span>1D56C</span></span> - <span><math><mtext>𝕭</mtext></math>=<span>1D56D</span></span> - <span><math><mtext>𝕮</mtext></math>=<span>1D56E</span></span> - <span><math><mtext>𝕯</mtext></math>=<span>1D56F</span></span> - <span><math><mtext>𝕰</mtext></math>=<span>1D570</span></span> - <span><math><mtext>𝕱</mtext></math>=<span>1D571</span></span> - <span><math><mtext>𝕲</mtext></math>=<span>1D572</span></span> - <span><math><mtext>𝕳</mtext></math>=<span>1D573</span></span> - <span><math><mtext>𝕴</mtext></math>=<span>1D574</span></span> - <span><math><mtext>𝕵</mtext></math>=<span>1D575</span></span><br/> - <span><math><mtext>𝕶</mtext></math>=<span>1D576</span></span> - <span><math><mtext>𝕷</mtext></math>=<span>1D577</span></span> - <span><math><mtext>𝕸</mtext></math>=<span>1D578</span></span> - <span><math><mtext>𝕹</mtext></math>=<span>1D579</span></span> - <span><math><mtext>𝕺</mtext></math>=<span>1D57A</span></span> - <span><math><mtext>𝕻</mtext></math>=<span>1D57B</span></span> - <span><math><mtext>𝕼</mtext></math>=<span>1D57C</span></span> - <span><math><mtext>𝕽</mtext></math>=<span>1D57D</span></span> - <span><math><mtext>𝕾</mtext></math>=<span>1D57E</span></span> - <span><math><mtext>𝕿</mtext></math>=<span>1D57F</span></span><br/> - <span><math><mtext>𝖀</mtext></math>=<span>1D580</span></span> - <span><math><mtext>𝖁</mtext></math>=<span>1D581</span></span> - <span><math><mtext>𝖂</mtext></math>=<span>1D582</span></span> - <span><math><mtext>𝖃</mtext></math>=<span>1D583</span></span> - <span><math><mtext>𝖄</mtext></math>=<span>1D584</span></span> - <span><math><mtext>𝖅</mtext></math>=<span>1D585</span></span> - <span><math><mtext>𝖆</mtext></math>=<span>1D586</span></span> - <span><math><mtext>𝖇</mtext></math>=<span>1D587</span></span> - <span><math><mtext>𝖈</mtext></math>=<span>1D588</span></span> - <span><math><mtext>𝖉</mtext></math>=<span>1D589</span></span><br/> - <span><math><mtext>𝖊</mtext></math>=<span>1D58A</span></span> - <span><math><mtext>𝖋</mtext></math>=<span>1D58B</span></span> - <span><math><mtext>𝖌</mtext></math>=<span>1D58C</span></span> - <span><math><mtext>𝖍</mtext></math>=<span>1D58D</span></span> - <span><math><mtext>𝖎</mtext></math>=<span>1D58E</span></span> - <span><math><mtext>𝖏</mtext></math>=<span>1D58F</span></span> - <span><math><mtext>𝖐</mtext></math>=<span>1D590</span></span> - <span><math><mtext>𝖑</mtext></math>=<span>1D591</span></span> - <span><math><mtext>𝖒</mtext></math>=<span>1D592</span></span> - <span><math><mtext>𝖓</mtext></math>=<span>1D593</span></span><br/> - <span><math><mtext>𝖔</mtext></math>=<span>1D594</span></span> - <span><math><mtext>𝖕</mtext></math>=<span>1D595</span></span> - <span><math><mtext>𝖖</mtext></math>=<span>1D596</span></span> - <span><math><mtext>𝖗</mtext></math>=<span>1D597</span></span> - <span><math><mtext>𝖘</mtext></math>=<span>1D598</span></span> - <span><math><mtext>𝖙</mtext></math>=<span>1D599</span></span> - <span><math><mtext>𝖚</mtext></math>=<span>1D59A</span></span> - <span><math><mtext>𝖛</mtext></math>=<span>1D59B</span></span> - <span><math><mtext>𝖜</mtext></math>=<span>1D59C</span></span> - <span><math><mtext>𝖝</mtext></math>=<span>1D59D</span></span><br/> - <span><math><mtext>𝖞</mtext></math>=<span>1D59E</span></span> - <span><math><mtext>𝖟</mtext></math>=<span>1D59F</span></span> + <span><math class="testfont"><mtext>𝕬</mtext></math>=<span>1D56C</span></span> + <span><math class="testfont"><mtext>𝕭</mtext></math>=<span>1D56D</span></span> + <span><math class="testfont"><mtext>𝕮</mtext></math>=<span>1D56E</span></span> + <span><math class="testfont"><mtext>𝕯</mtext></math>=<span>1D56F</span></span> + <span><math class="testfont"><mtext>𝕰</mtext></math>=<span>1D570</span></span> + <span><math class="testfont"><mtext>𝕱</mtext></math>=<span>1D571</span></span> + <span><math class="testfont"><mtext>𝕲</mtext></math>=<span>1D572</span></span> + <span><math class="testfont"><mtext>𝕳</mtext></math>=<span>1D573</span></span> + <span><math class="testfont"><mtext>𝕴</mtext></math>=<span>1D574</span></span> + <span><math class="testfont"><mtext>𝕵</mtext></math>=<span>1D575</span></span><br/> + <span><math class="testfont"><mtext>𝕶</mtext></math>=<span>1D576</span></span> + <span><math class="testfont"><mtext>𝕷</mtext></math>=<span>1D577</span></span> + <span><math class="testfont"><mtext>𝕸</mtext></math>=<span>1D578</span></span> + <span><math class="testfont"><mtext>𝕹</mtext></math>=<span>1D579</span></span> + <span><math class="testfont"><mtext>𝕺</mtext></math>=<span>1D57A</span></span> + <span><math class="testfont"><mtext>𝕻</mtext></math>=<span>1D57B</span></span> + <span><math class="testfont"><mtext>𝕼</mtext></math>=<span>1D57C</span></span> + <span><math class="testfont"><mtext>𝕽</mtext></math>=<span>1D57D</span></span> + <span><math class="testfont"><mtext>𝕾</mtext></math>=<span>1D57E</span></span> + <span><math class="testfont"><mtext>𝕿</mtext></math>=<span>1D57F</span></span><br/> + <span><math class="testfont"><mtext>𝖀</mtext></math>=<span>1D580</span></span> + <span><math class="testfont"><mtext>𝖁</mtext></math>=<span>1D581</span></span> + <span><math class="testfont"><mtext>𝖂</mtext></math>=<span>1D582</span></span> + <span><math class="testfont"><mtext>𝖃</mtext></math>=<span>1D583</span></span> + <span><math class="testfont"><mtext>𝖄</mtext></math>=<span>1D584</span></span> + <span><math class="testfont"><mtext>𝖅</mtext></math>=<span>1D585</span></span> + <span><math class="testfont"><mtext>𝖆</mtext></math>=<span>1D586</span></span> + <span><math class="testfont"><mtext>𝖇</mtext></math>=<span>1D587</span></span> + <span><math class="testfont"><mtext>𝖈</mtext></math>=<span>1D588</span></span> + <span><math class="testfont"><mtext>𝖉</mtext></math>=<span>1D589</span></span><br/> + <span><math class="testfont"><mtext>𝖊</mtext></math>=<span>1D58A</span></span> + <span><math class="testfont"><mtext>𝖋</mtext></math>=<span>1D58B</span></span> + <span><math class="testfont"><mtext>𝖌</mtext></math>=<span>1D58C</span></span> + <span><math class="testfont"><mtext>𝖍</mtext></math>=<span>1D58D</span></span> + <span><math class="testfont"><mtext>𝖎</mtext></math>=<span>1D58E</span></span> + <span><math class="testfont"><mtext>𝖏</mtext></math>=<span>1D58F</span></span> + <span><math class="testfont"><mtext>𝖐</mtext></math>=<span>1D590</span></span> + <span><math class="testfont"><mtext>𝖑</mtext></math>=<span>1D591</span></span> + <span><math class="testfont"><mtext>𝖒</mtext></math>=<span>1D592</span></span> + <span><math class="testfont"><mtext>𝖓</mtext></math>=<span>1D593</span></span><br/> + <span><math class="testfont"><mtext>𝖔</mtext></math>=<span>1D594</span></span> + <span><math class="testfont"><mtext>𝖕</mtext></math>=<span>1D595</span></span> + <span><math class="testfont"><mtext>𝖖</mtext></math>=<span>1D596</span></span> + <span><math class="testfont"><mtext>𝖗</mtext></math>=<span>1D597</span></span> + <span><math class="testfont"><mtext>𝖘</mtext></math>=<span>1D598</span></span> + <span><math class="testfont"><mtext>𝖙</mtext></math>=<span>1D599</span></span> + <span><math class="testfont"><mtext>𝖚</mtext></math>=<span>1D59A</span></span> + <span><math class="testfont"><mtext>𝖛</mtext></math>=<span>1D59B</span></span> + <span><math class="testfont"><mtext>𝖜</mtext></math>=<span>1D59C</span></span> + <span><math class="testfont"><mtext>𝖝</mtext></math>=<span>1D59D</span></span><br/> + <span><math class="testfont"><mtext>𝖞</mtext></math>=<span>1D59E</span></span> + <span><math class="testfont"><mtext>𝖟</mtext></math>=<span>1D59F</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html index 8085ad5..2bfb8b7d 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-fraktur.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,57 +28,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="bold-fraktur">A</mtext></math>=<span>1D56C</span></span> - <span><math><mtext mathvariant="bold-fraktur">B</mtext></math>=<span>1D56D</span></span> - <span><math><mtext mathvariant="bold-fraktur">C</mtext></math>=<span>1D56E</span></span> - <span><math><mtext mathvariant="bold-fraktur">D</mtext></math>=<span>1D56F</span></span> - <span><math><mtext mathvariant="bold-fraktur">E</mtext></math>=<span>1D570</span></span> - <span><math><mtext mathvariant="bold-fraktur">F</mtext></math>=<span>1D571</span></span> - <span><math><mtext mathvariant="bold-fraktur">G</mtext></math>=<span>1D572</span></span> - <span><math><mtext mathvariant="bold-fraktur">H</mtext></math>=<span>1D573</span></span> - <span><math><mtext mathvariant="bold-fraktur">I</mtext></math>=<span>1D574</span></span> - <span><math><mtext mathvariant="bold-fraktur">J</mtext></math>=<span>1D575</span></span><br/> - <span><math><mtext mathvariant="bold-fraktur">K</mtext></math>=<span>1D576</span></span> - <span><math><mtext mathvariant="bold-fraktur">L</mtext></math>=<span>1D577</span></span> - <span><math><mtext mathvariant="bold-fraktur">M</mtext></math>=<span>1D578</span></span> - <span><math><mtext mathvariant="bold-fraktur">N</mtext></math>=<span>1D579</span></span> - <span><math><mtext mathvariant="bold-fraktur">O</mtext></math>=<span>1D57A</span></span> - <span><math><mtext mathvariant="bold-fraktur">P</mtext></math>=<span>1D57B</span></span> - <span><math><mtext mathvariant="bold-fraktur">Q</mtext></math>=<span>1D57C</span></span> - <span><math><mtext mathvariant="bold-fraktur">R</mtext></math>=<span>1D57D</span></span> - <span><math><mtext mathvariant="bold-fraktur">S</mtext></math>=<span>1D57E</span></span> - <span><math><mtext mathvariant="bold-fraktur">T</mtext></math>=<span>1D57F</span></span><br/> - <span><math><mtext mathvariant="bold-fraktur">U</mtext></math>=<span>1D580</span></span> - <span><math><mtext mathvariant="bold-fraktur">V</mtext></math>=<span>1D581</span></span> - <span><math><mtext mathvariant="bold-fraktur">W</mtext></math>=<span>1D582</span></span> - <span><math><mtext mathvariant="bold-fraktur">X</mtext></math>=<span>1D583</span></span> - <span><math><mtext mathvariant="bold-fraktur">Y</mtext></math>=<span>1D584</span></span> - <span><math><mtext mathvariant="bold-fraktur">Z</mtext></math>=<span>1D585</span></span> - <span><math><mtext mathvariant="bold-fraktur">a</mtext></math>=<span>1D586</span></span> - <span><math><mtext mathvariant="bold-fraktur">b</mtext></math>=<span>1D587</span></span> - <span><math><mtext mathvariant="bold-fraktur">c</mtext></math>=<span>1D588</span></span> - <span><math><mtext mathvariant="bold-fraktur">d</mtext></math>=<span>1D589</span></span><br/> - <span><math><mtext mathvariant="bold-fraktur">e</mtext></math>=<span>1D58A</span></span> - <span><math><mtext mathvariant="bold-fraktur">f</mtext></math>=<span>1D58B</span></span> - <span><math><mtext mathvariant="bold-fraktur">g</mtext></math>=<span>1D58C</span></span> - <span><math><mtext mathvariant="bold-fraktur">h</mtext></math>=<span>1D58D</span></span> - <span><math><mtext mathvariant="bold-fraktur">i</mtext></math>=<span>1D58E</span></span> - <span><math><mtext mathvariant="bold-fraktur">j</mtext></math>=<span>1D58F</span></span> - <span><math><mtext mathvariant="bold-fraktur">k</mtext></math>=<span>1D590</span></span> - <span><math><mtext mathvariant="bold-fraktur">l</mtext></math>=<span>1D591</span></span> - <span><math><mtext mathvariant="bold-fraktur">m</mtext></math>=<span>1D592</span></span> - <span><math><mtext mathvariant="bold-fraktur">n</mtext></math>=<span>1D593</span></span><br/> - <span><math><mtext mathvariant="bold-fraktur">o</mtext></math>=<span>1D594</span></span> - <span><math><mtext mathvariant="bold-fraktur">p</mtext></math>=<span>1D595</span></span> - <span><math><mtext mathvariant="bold-fraktur">q</mtext></math>=<span>1D596</span></span> - <span><math><mtext mathvariant="bold-fraktur">r</mtext></math>=<span>1D597</span></span> - <span><math><mtext mathvariant="bold-fraktur">s</mtext></math>=<span>1D598</span></span> - <span><math><mtext mathvariant="bold-fraktur">t</mtext></math>=<span>1D599</span></span> - <span><math><mtext mathvariant="bold-fraktur">u</mtext></math>=<span>1D59A</span></span> - <span><math><mtext mathvariant="bold-fraktur">v</mtext></math>=<span>1D59B</span></span> - <span><math><mtext mathvariant="bold-fraktur">w</mtext></math>=<span>1D59C</span></span> - <span><math><mtext mathvariant="bold-fraktur">x</mtext></math>=<span>1D59D</span></span><br/> - <span><math><mtext mathvariant="bold-fraktur">y</mtext></math>=<span>1D59E</span></span> - <span><math><mtext mathvariant="bold-fraktur">z</mtext></math>=<span>1D59F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">A</mtext></math>=<span>1D56C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">B</mtext></math>=<span>1D56D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">C</mtext></math>=<span>1D56E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">D</mtext></math>=<span>1D56F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">E</mtext></math>=<span>1D570</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">F</mtext></math>=<span>1D571</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">G</mtext></math>=<span>1D572</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">H</mtext></math>=<span>1D573</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">I</mtext></math>=<span>1D574</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">J</mtext></math>=<span>1D575</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">K</mtext></math>=<span>1D576</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">L</mtext></math>=<span>1D577</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">M</mtext></math>=<span>1D578</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">N</mtext></math>=<span>1D579</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">O</mtext></math>=<span>1D57A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">P</mtext></math>=<span>1D57B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">Q</mtext></math>=<span>1D57C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">R</mtext></math>=<span>1D57D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">S</mtext></math>=<span>1D57E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">T</mtext></math>=<span>1D57F</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">U</mtext></math>=<span>1D580</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">V</mtext></math>=<span>1D581</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">W</mtext></math>=<span>1D582</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">X</mtext></math>=<span>1D583</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">Y</mtext></math>=<span>1D584</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">Z</mtext></math>=<span>1D585</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">a</mtext></math>=<span>1D586</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">b</mtext></math>=<span>1D587</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">c</mtext></math>=<span>1D588</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">d</mtext></math>=<span>1D589</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">e</mtext></math>=<span>1D58A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">f</mtext></math>=<span>1D58B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">g</mtext></math>=<span>1D58C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">h</mtext></math>=<span>1D58D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">i</mtext></math>=<span>1D58E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">j</mtext></math>=<span>1D58F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">k</mtext></math>=<span>1D590</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">l</mtext></math>=<span>1D591</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">m</mtext></math>=<span>1D592</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">n</mtext></math>=<span>1D593</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">o</mtext></math>=<span>1D594</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">p</mtext></math>=<span>1D595</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">q</mtext></math>=<span>1D596</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">r</mtext></math>=<span>1D597</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">s</mtext></math>=<span>1D598</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">t</mtext></math>=<span>1D599</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">u</mtext></math>=<span>1D59A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">v</mtext></math>=<span>1D59B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">w</mtext></math>=<span>1D59C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">x</mtext></math>=<span>1D59D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">y</mtext></math>=<span>1D59E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-fraktur">z</mtext></math>=<span>1D59F</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic-ref.html index 1e71e89..c5eaa22e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,115 +23,115 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝝏</mtext></math>=<span>1D74F</span></span> - <span><math><mtext>𝜵</mtext></math>=<span>1D735</span></span> - <span><math><mtext>𝑨</mtext></math>=<span>1D468</span></span> - <span><math><mtext>𝑩</mtext></math>=<span>1D469</span></span> - <span><math><mtext>𝑪</mtext></math>=<span>1D46A</span></span> - <span><math><mtext>𝑫</mtext></math>=<span>1D46B</span></span> - <span><math><mtext>𝑬</mtext></math>=<span>1D46C</span></span> - <span><math><mtext>𝑭</mtext></math>=<span>1D46D</span></span> - <span><math><mtext>𝑮</mtext></math>=<span>1D46E</span></span> - <span><math><mtext>𝑯</mtext></math>=<span>1D46F</span></span><br/> - <span><math><mtext>𝑰</mtext></math>=<span>1D470</span></span> - <span><math><mtext>𝑱</mtext></math>=<span>1D471</span></span> - <span><math><mtext>𝑲</mtext></math>=<span>1D472</span></span> - <span><math><mtext>𝑳</mtext></math>=<span>1D473</span></span> - <span><math><mtext>𝑴</mtext></math>=<span>1D474</span></span> - <span><math><mtext>𝑵</mtext></math>=<span>1D475</span></span> - <span><math><mtext>𝑶</mtext></math>=<span>1D476</span></span> - <span><math><mtext>𝑷</mtext></math>=<span>1D477</span></span> - <span><math><mtext>𝑸</mtext></math>=<span>1D478</span></span> - <span><math><mtext>𝑹</mtext></math>=<span>1D479</span></span><br/> - <span><math><mtext>𝑺</mtext></math>=<span>1D47A</span></span> - <span><math><mtext>𝑻</mtext></math>=<span>1D47B</span></span> - <span><math><mtext>𝑼</mtext></math>=<span>1D47C</span></span> - <span><math><mtext>𝑽</mtext></math>=<span>1D47D</span></span> - <span><math><mtext>𝑾</mtext></math>=<span>1D47E</span></span> - <span><math><mtext>𝑿</mtext></math>=<span>1D47F</span></span> - <span><math><mtext>𝒀</mtext></math>=<span>1D480</span></span> - <span><math><mtext>𝒁</mtext></math>=<span>1D481</span></span> - <span><math><mtext>𝒂</mtext></math>=<span>1D482</span></span> - <span><math><mtext>𝒃</mtext></math>=<span>1D483</span></span><br/> - <span><math><mtext>𝒄</mtext></math>=<span>1D484</span></span> - <span><math><mtext>𝒅</mtext></math>=<span>1D485</span></span> - <span><math><mtext>𝒆</mtext></math>=<span>1D486</span></span> - <span><math><mtext>𝒇</mtext></math>=<span>1D487</span></span> - <span><math><mtext>𝒈</mtext></math>=<span>1D488</span></span> - <span><math><mtext>𝒉</mtext></math>=<span>1D489</span></span> - <span><math><mtext>𝒊</mtext></math>=<span>1D48A</span></span> - <span><math><mtext>𝒋</mtext></math>=<span>1D48B</span></span> - <span><math><mtext>𝒌</mtext></math>=<span>1D48C</span></span> - <span><math><mtext>𝒍</mtext></math>=<span>1D48D</span></span><br/> - <span><math><mtext>𝒎</mtext></math>=<span>1D48E</span></span> - <span><math><mtext>𝒏</mtext></math>=<span>1D48F</span></span> - <span><math><mtext>𝒐</mtext></math>=<span>1D490</span></span> - <span><math><mtext>𝒑</mtext></math>=<span>1D491</span></span> - <span><math><mtext>𝒒</mtext></math>=<span>1D492</span></span> - <span><math><mtext>𝒓</mtext></math>=<span>1D493</span></span> - <span><math><mtext>𝒔</mtext></math>=<span>1D494</span></span> - <span><math><mtext>𝒕</mtext></math>=<span>1D495</span></span> - <span><math><mtext>𝒖</mtext></math>=<span>1D496</span></span> - <span><math><mtext>𝒗</mtext></math>=<span>1D497</span></span><br/> - <span><math><mtext>𝒘</mtext></math>=<span>1D498</span></span> - <span><math><mtext>𝒙</mtext></math>=<span>1D499</span></span> - <span><math><mtext>𝒚</mtext></math>=<span>1D49A</span></span> - <span><math><mtext>𝒛</mtext></math>=<span>1D49B</span></span> - <span><math><mtext>𝜜</mtext></math>=<span>1D71C</span></span> - <span><math><mtext>𝜝</mtext></math>=<span>1D71D</span></span> - <span><math><mtext>𝜞</mtext></math>=<span>1D71E</span></span> - <span><math><mtext>𝜟</mtext></math>=<span>1D71F</span></span> - <span><math><mtext>𝜠</mtext></math>=<span>1D720</span></span> - <span><math><mtext>𝜡</mtext></math>=<span>1D721</span></span><br/> - <span><math><mtext>𝜢</mtext></math>=<span>1D722</span></span> - <span><math><mtext>𝜣</mtext></math>=<span>1D723</span></span> - <span><math><mtext>𝜤</mtext></math>=<span>1D724</span></span> - <span><math><mtext>𝜥</mtext></math>=<span>1D725</span></span> - <span><math><mtext>𝜦</mtext></math>=<span>1D726</span></span> - <span><math><mtext>𝜧</mtext></math>=<span>1D727</span></span> - <span><math><mtext>𝜨</mtext></math>=<span>1D728</span></span> - <span><math><mtext>𝜩</mtext></math>=<span>1D729</span></span> - <span><math><mtext>𝜪</mtext></math>=<span>1D72A</span></span> - <span><math><mtext>𝜫</mtext></math>=<span>1D72B</span></span><br/> - <span><math><mtext>𝜬</mtext></math>=<span>1D72C</span></span> - <span><math><mtext>𝜮</mtext></math>=<span>1D72E</span></span> - <span><math><mtext>𝜯</mtext></math>=<span>1D72F</span></span> - <span><math><mtext>𝜰</mtext></math>=<span>1D730</span></span> - <span><math><mtext>𝜱</mtext></math>=<span>1D731</span></span> - <span><math><mtext>𝜲</mtext></math>=<span>1D732</span></span> - <span><math><mtext>𝜳</mtext></math>=<span>1D733</span></span> - <span><math><mtext>𝜴</mtext></math>=<span>1D734</span></span> - <span><math><mtext>𝜶</mtext></math>=<span>1D736</span></span> - <span><math><mtext>𝜷</mtext></math>=<span>1D737</span></span><br/> - <span><math><mtext>𝜸</mtext></math>=<span>1D738</span></span> - <span><math><mtext>𝜹</mtext></math>=<span>1D739</span></span> - <span><math><mtext>𝜺</mtext></math>=<span>1D73A</span></span> - <span><math><mtext>𝜻</mtext></math>=<span>1D73B</span></span> - <span><math><mtext>𝜼</mtext></math>=<span>1D73C</span></span> - <span><math><mtext>𝜽</mtext></math>=<span>1D73D</span></span> - <span><math><mtext>𝜾</mtext></math>=<span>1D73E</span></span> - <span><math><mtext>𝜿</mtext></math>=<span>1D73F</span></span> - <span><math><mtext>𝝀</mtext></math>=<span>1D740</span></span> - <span><math><mtext>𝝁</mtext></math>=<span>1D741</span></span><br/> - <span><math><mtext>𝝂</mtext></math>=<span>1D742</span></span> - <span><math><mtext>𝝃</mtext></math>=<span>1D743</span></span> - <span><math><mtext>𝝄</mtext></math>=<span>1D744</span></span> - <span><math><mtext>𝝅</mtext></math>=<span>1D745</span></span> - <span><math><mtext>𝝆</mtext></math>=<span>1D746</span></span> - <span><math><mtext>𝝇</mtext></math>=<span>1D747</span></span> - <span><math><mtext>𝝈</mtext></math>=<span>1D748</span></span> - <span><math><mtext>𝝉</mtext></math>=<span>1D749</span></span> - <span><math><mtext>𝝊</mtext></math>=<span>1D74A</span></span> - <span><math><mtext>𝝋</mtext></math>=<span>1D74B</span></span><br/> - <span><math><mtext>𝝌</mtext></math>=<span>1D74C</span></span> - <span><math><mtext>𝝍</mtext></math>=<span>1D74D</span></span> - <span><math><mtext>𝝎</mtext></math>=<span>1D74E</span></span> - <span><math><mtext>𝝑</mtext></math>=<span>1D751</span></span> - <span><math><mtext>𝝓</mtext></math>=<span>1D753</span></span> - <span><math><mtext>𝝕</mtext></math>=<span>1D755</span></span> - <span><math><mtext>𝝒</mtext></math>=<span>1D752</span></span> - <span><math><mtext>𝝔</mtext></math>=<span>1D754</span></span> - <span><math><mtext>𝜭</mtext></math>=<span>1D72D</span></span> - <span><math><mtext>𝝐</mtext></math>=<span>1D750</span></span><br/> + <span><math class="testfont"><mtext>𝝏</mtext></math>=<span>1D74F</span></span> + <span><math class="testfont"><mtext>𝜵</mtext></math>=<span>1D735</span></span> + <span><math class="testfont"><mtext>𝑨</mtext></math>=<span>1D468</span></span> + <span><math class="testfont"><mtext>𝑩</mtext></math>=<span>1D469</span></span> + <span><math class="testfont"><mtext>𝑪</mtext></math>=<span>1D46A</span></span> + <span><math class="testfont"><mtext>𝑫</mtext></math>=<span>1D46B</span></span> + <span><math class="testfont"><mtext>𝑬</mtext></math>=<span>1D46C</span></span> + <span><math class="testfont"><mtext>𝑭</mtext></math>=<span>1D46D</span></span> + <span><math class="testfont"><mtext>𝑮</mtext></math>=<span>1D46E</span></span> + <span><math class="testfont"><mtext>𝑯</mtext></math>=<span>1D46F</span></span><br/> + <span><math class="testfont"><mtext>𝑰</mtext></math>=<span>1D470</span></span> + <span><math class="testfont"><mtext>𝑱</mtext></math>=<span>1D471</span></span> + <span><math class="testfont"><mtext>𝑲</mtext></math>=<span>1D472</span></span> + <span><math class="testfont"><mtext>𝑳</mtext></math>=<span>1D473</span></span> + <span><math class="testfont"><mtext>𝑴</mtext></math>=<span>1D474</span></span> + <span><math class="testfont"><mtext>𝑵</mtext></math>=<span>1D475</span></span> + <span><math class="testfont"><mtext>𝑶</mtext></math>=<span>1D476</span></span> + <span><math class="testfont"><mtext>𝑷</mtext></math>=<span>1D477</span></span> + <span><math class="testfont"><mtext>𝑸</mtext></math>=<span>1D478</span></span> + <span><math class="testfont"><mtext>𝑹</mtext></math>=<span>1D479</span></span><br/> + <span><math class="testfont"><mtext>𝑺</mtext></math>=<span>1D47A</span></span> + <span><math class="testfont"><mtext>𝑻</mtext></math>=<span>1D47B</span></span> + <span><math class="testfont"><mtext>𝑼</mtext></math>=<span>1D47C</span></span> + <span><math class="testfont"><mtext>𝑽</mtext></math>=<span>1D47D</span></span> + <span><math class="testfont"><mtext>𝑾</mtext></math>=<span>1D47E</span></span> + <span><math class="testfont"><mtext>𝑿</mtext></math>=<span>1D47F</span></span> + <span><math class="testfont"><mtext>𝒀</mtext></math>=<span>1D480</span></span> + <span><math class="testfont"><mtext>𝒁</mtext></math>=<span>1D481</span></span> + <span><math class="testfont"><mtext>𝒂</mtext></math>=<span>1D482</span></span> + <span><math class="testfont"><mtext>𝒃</mtext></math>=<span>1D483</span></span><br/> + <span><math class="testfont"><mtext>𝒄</mtext></math>=<span>1D484</span></span> + <span><math class="testfont"><mtext>𝒅</mtext></math>=<span>1D485</span></span> + <span><math class="testfont"><mtext>𝒆</mtext></math>=<span>1D486</span></span> + <span><math class="testfont"><mtext>𝒇</mtext></math>=<span>1D487</span></span> + <span><math class="testfont"><mtext>𝒈</mtext></math>=<span>1D488</span></span> + <span><math class="testfont"><mtext>𝒉</mtext></math>=<span>1D489</span></span> + <span><math class="testfont"><mtext>𝒊</mtext></math>=<span>1D48A</span></span> + <span><math class="testfont"><mtext>𝒋</mtext></math>=<span>1D48B</span></span> + <span><math class="testfont"><mtext>𝒌</mtext></math>=<span>1D48C</span></span> + <span><math class="testfont"><mtext>𝒍</mtext></math>=<span>1D48D</span></span><br/> + <span><math class="testfont"><mtext>𝒎</mtext></math>=<span>1D48E</span></span> + <span><math class="testfont"><mtext>𝒏</mtext></math>=<span>1D48F</span></span> + <span><math class="testfont"><mtext>𝒐</mtext></math>=<span>1D490</span></span> + <span><math class="testfont"><mtext>𝒑</mtext></math>=<span>1D491</span></span> + <span><math class="testfont"><mtext>𝒒</mtext></math>=<span>1D492</span></span> + <span><math class="testfont"><mtext>𝒓</mtext></math>=<span>1D493</span></span> + <span><math class="testfont"><mtext>𝒔</mtext></math>=<span>1D494</span></span> + <span><math class="testfont"><mtext>𝒕</mtext></math>=<span>1D495</span></span> + <span><math class="testfont"><mtext>𝒖</mtext></math>=<span>1D496</span></span> + <span><math class="testfont"><mtext>𝒗</mtext></math>=<span>1D497</span></span><br/> + <span><math class="testfont"><mtext>𝒘</mtext></math>=<span>1D498</span></span> + <span><math class="testfont"><mtext>𝒙</mtext></math>=<span>1D499</span></span> + <span><math class="testfont"><mtext>𝒚</mtext></math>=<span>1D49A</span></span> + <span><math class="testfont"><mtext>𝒛</mtext></math>=<span>1D49B</span></span> + <span><math class="testfont"><mtext>𝜜</mtext></math>=<span>1D71C</span></span> + <span><math class="testfont"><mtext>𝜝</mtext></math>=<span>1D71D</span></span> + <span><math class="testfont"><mtext>𝜞</mtext></math>=<span>1D71E</span></span> + <span><math class="testfont"><mtext>𝜟</mtext></math>=<span>1D71F</span></span> + <span><math class="testfont"><mtext>𝜠</mtext></math>=<span>1D720</span></span> + <span><math class="testfont"><mtext>𝜡</mtext></math>=<span>1D721</span></span><br/> + <span><math class="testfont"><mtext>𝜢</mtext></math>=<span>1D722</span></span> + <span><math class="testfont"><mtext>𝜣</mtext></math>=<span>1D723</span></span> + <span><math class="testfont"><mtext>𝜤</mtext></math>=<span>1D724</span></span> + <span><math class="testfont"><mtext>𝜥</mtext></math>=<span>1D725</span></span> + <span><math class="testfont"><mtext>𝜦</mtext></math>=<span>1D726</span></span> + <span><math class="testfont"><mtext>𝜧</mtext></math>=<span>1D727</span></span> + <span><math class="testfont"><mtext>𝜨</mtext></math>=<span>1D728</span></span> + <span><math class="testfont"><mtext>𝜩</mtext></math>=<span>1D729</span></span> + <span><math class="testfont"><mtext>𝜪</mtext></math>=<span>1D72A</span></span> + <span><math class="testfont"><mtext>𝜫</mtext></math>=<span>1D72B</span></span><br/> + <span><math class="testfont"><mtext>𝜬</mtext></math>=<span>1D72C</span></span> + <span><math class="testfont"><mtext>𝜮</mtext></math>=<span>1D72E</span></span> + <span><math class="testfont"><mtext>𝜯</mtext></math>=<span>1D72F</span></span> + <span><math class="testfont"><mtext>𝜰</mtext></math>=<span>1D730</span></span> + <span><math class="testfont"><mtext>𝜱</mtext></math>=<span>1D731</span></span> + <span><math class="testfont"><mtext>𝜲</mtext></math>=<span>1D732</span></span> + <span><math class="testfont"><mtext>𝜳</mtext></math>=<span>1D733</span></span> + <span><math class="testfont"><mtext>𝜴</mtext></math>=<span>1D734</span></span> + <span><math class="testfont"><mtext>𝜶</mtext></math>=<span>1D736</span></span> + <span><math class="testfont"><mtext>𝜷</mtext></math>=<span>1D737</span></span><br/> + <span><math class="testfont"><mtext>𝜸</mtext></math>=<span>1D738</span></span> + <span><math class="testfont"><mtext>𝜹</mtext></math>=<span>1D739</span></span> + <span><math class="testfont"><mtext>𝜺</mtext></math>=<span>1D73A</span></span> + <span><math class="testfont"><mtext>𝜻</mtext></math>=<span>1D73B</span></span> + <span><math class="testfont"><mtext>𝜼</mtext></math>=<span>1D73C</span></span> + <span><math class="testfont"><mtext>𝜽</mtext></math>=<span>1D73D</span></span> + <span><math class="testfont"><mtext>𝜾</mtext></math>=<span>1D73E</span></span> + <span><math class="testfont"><mtext>𝜿</mtext></math>=<span>1D73F</span></span> + <span><math class="testfont"><mtext>𝝀</mtext></math>=<span>1D740</span></span> + <span><math class="testfont"><mtext>𝝁</mtext></math>=<span>1D741</span></span><br/> + <span><math class="testfont"><mtext>𝝂</mtext></math>=<span>1D742</span></span> + <span><math class="testfont"><mtext>𝝃</mtext></math>=<span>1D743</span></span> + <span><math class="testfont"><mtext>𝝄</mtext></math>=<span>1D744</span></span> + <span><math class="testfont"><mtext>𝝅</mtext></math>=<span>1D745</span></span> + <span><math class="testfont"><mtext>𝝆</mtext></math>=<span>1D746</span></span> + <span><math class="testfont"><mtext>𝝇</mtext></math>=<span>1D747</span></span> + <span><math class="testfont"><mtext>𝝈</mtext></math>=<span>1D748</span></span> + <span><math class="testfont"><mtext>𝝉</mtext></math>=<span>1D749</span></span> + <span><math class="testfont"><mtext>𝝊</mtext></math>=<span>1D74A</span></span> + <span><math class="testfont"><mtext>𝝋</mtext></math>=<span>1D74B</span></span><br/> + <span><math class="testfont"><mtext>𝝌</mtext></math>=<span>1D74C</span></span> + <span><math class="testfont"><mtext>𝝍</mtext></math>=<span>1D74D</span></span> + <span><math class="testfont"><mtext>𝝎</mtext></math>=<span>1D74E</span></span> + <span><math class="testfont"><mtext>𝝑</mtext></math>=<span>1D751</span></span> + <span><math class="testfont"><mtext>𝝓</mtext></math>=<span>1D753</span></span> + <span><math class="testfont"><mtext>𝝕</mtext></math>=<span>1D755</span></span> + <span><math class="testfont"><mtext>𝝒</mtext></math>=<span>1D752</span></span> + <span><math class="testfont"><mtext>𝝔</mtext></math>=<span>1D754</span></span> + <span><math class="testfont"><mtext>𝜭</mtext></math>=<span>1D72D</span></span> + <span><math class="testfont"><mtext>𝝐</mtext></math>=<span>1D750</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html index 1e1b0b0d..5454b86 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-italic.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,115 +28,115 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="bold-italic">∂</mtext></math>=<span>1D74F</span></span> - <span><math><mtext mathvariant="bold-italic">∇</mtext></math>=<span>1D735</span></span> - <span><math><mtext mathvariant="bold-italic">A</mtext></math>=<span>1D468</span></span> - <span><math><mtext mathvariant="bold-italic">B</mtext></math>=<span>1D469</span></span> - <span><math><mtext mathvariant="bold-italic">C</mtext></math>=<span>1D46A</span></span> - <span><math><mtext mathvariant="bold-italic">D</mtext></math>=<span>1D46B</span></span> - <span><math><mtext mathvariant="bold-italic">E</mtext></math>=<span>1D46C</span></span> - <span><math><mtext mathvariant="bold-italic">F</mtext></math>=<span>1D46D</span></span> - <span><math><mtext mathvariant="bold-italic">G</mtext></math>=<span>1D46E</span></span> - <span><math><mtext mathvariant="bold-italic">H</mtext></math>=<span>1D46F</span></span><br/> - <span><math><mtext mathvariant="bold-italic">I</mtext></math>=<span>1D470</span></span> - <span><math><mtext mathvariant="bold-italic">J</mtext></math>=<span>1D471</span></span> - <span><math><mtext mathvariant="bold-italic">K</mtext></math>=<span>1D472</span></span> - <span><math><mtext mathvariant="bold-italic">L</mtext></math>=<span>1D473</span></span> - <span><math><mtext mathvariant="bold-italic">M</mtext></math>=<span>1D474</span></span> - <span><math><mtext mathvariant="bold-italic">N</mtext></math>=<span>1D475</span></span> - <span><math><mtext mathvariant="bold-italic">O</mtext></math>=<span>1D476</span></span> - <span><math><mtext mathvariant="bold-italic">P</mtext></math>=<span>1D477</span></span> - <span><math><mtext mathvariant="bold-italic">Q</mtext></math>=<span>1D478</span></span> - <span><math><mtext mathvariant="bold-italic">R</mtext></math>=<span>1D479</span></span><br/> - <span><math><mtext mathvariant="bold-italic">S</mtext></math>=<span>1D47A</span></span> - <span><math><mtext mathvariant="bold-italic">T</mtext></math>=<span>1D47B</span></span> - <span><math><mtext mathvariant="bold-italic">U</mtext></math>=<span>1D47C</span></span> - <span><math><mtext mathvariant="bold-italic">V</mtext></math>=<span>1D47D</span></span> - <span><math><mtext mathvariant="bold-italic">W</mtext></math>=<span>1D47E</span></span> - <span><math><mtext mathvariant="bold-italic">X</mtext></math>=<span>1D47F</span></span> - <span><math><mtext mathvariant="bold-italic">Y</mtext></math>=<span>1D480</span></span> - <span><math><mtext mathvariant="bold-italic">Z</mtext></math>=<span>1D481</span></span> - <span><math><mtext mathvariant="bold-italic">a</mtext></math>=<span>1D482</span></span> - <span><math><mtext mathvariant="bold-italic">b</mtext></math>=<span>1D483</span></span><br/> - <span><math><mtext mathvariant="bold-italic">c</mtext></math>=<span>1D484</span></span> - <span><math><mtext mathvariant="bold-italic">d</mtext></math>=<span>1D485</span></span> - <span><math><mtext mathvariant="bold-italic">e</mtext></math>=<span>1D486</span></span> - <span><math><mtext mathvariant="bold-italic">f</mtext></math>=<span>1D487</span></span> - <span><math><mtext mathvariant="bold-italic">g</mtext></math>=<span>1D488</span></span> - <span><math><mtext mathvariant="bold-italic">h</mtext></math>=<span>1D489</span></span> - <span><math><mtext mathvariant="bold-italic">i</mtext></math>=<span>1D48A</span></span> - <span><math><mtext mathvariant="bold-italic">j</mtext></math>=<span>1D48B</span></span> - <span><math><mtext mathvariant="bold-italic">k</mtext></math>=<span>1D48C</span></span> - <span><math><mtext mathvariant="bold-italic">l</mtext></math>=<span>1D48D</span></span><br/> - <span><math><mtext mathvariant="bold-italic">m</mtext></math>=<span>1D48E</span></span> - <span><math><mtext mathvariant="bold-italic">n</mtext></math>=<span>1D48F</span></span> - <span><math><mtext mathvariant="bold-italic">o</mtext></math>=<span>1D490</span></span> - <span><math><mtext mathvariant="bold-italic">p</mtext></math>=<span>1D491</span></span> - <span><math><mtext mathvariant="bold-italic">q</mtext></math>=<span>1D492</span></span> - <span><math><mtext mathvariant="bold-italic">r</mtext></math>=<span>1D493</span></span> - <span><math><mtext mathvariant="bold-italic">s</mtext></math>=<span>1D494</span></span> - <span><math><mtext mathvariant="bold-italic">t</mtext></math>=<span>1D495</span></span> - <span><math><mtext mathvariant="bold-italic">u</mtext></math>=<span>1D496</span></span> - <span><math><mtext mathvariant="bold-italic">v</mtext></math>=<span>1D497</span></span><br/> - <span><math><mtext mathvariant="bold-italic">w</mtext></math>=<span>1D498</span></span> - <span><math><mtext mathvariant="bold-italic">x</mtext></math>=<span>1D499</span></span> - <span><math><mtext mathvariant="bold-italic">y</mtext></math>=<span>1D49A</span></span> - <span><math><mtext mathvariant="bold-italic">z</mtext></math>=<span>1D49B</span></span> - <span><math><mtext mathvariant="bold-italic">Α</mtext></math>=<span>1D71C</span></span> - <span><math><mtext mathvariant="bold-italic">Β</mtext></math>=<span>1D71D</span></span> - <span><math><mtext mathvariant="bold-italic">Γ</mtext></math>=<span>1D71E</span></span> - <span><math><mtext mathvariant="bold-italic">Δ</mtext></math>=<span>1D71F</span></span> - <span><math><mtext mathvariant="bold-italic">Ε</mtext></math>=<span>1D720</span></span> - <span><math><mtext mathvariant="bold-italic">Ζ</mtext></math>=<span>1D721</span></span><br/> - <span><math><mtext mathvariant="bold-italic">Η</mtext></math>=<span>1D722</span></span> - <span><math><mtext mathvariant="bold-italic">Θ</mtext></math>=<span>1D723</span></span> - <span><math><mtext mathvariant="bold-italic">Ι</mtext></math>=<span>1D724</span></span> - <span><math><mtext mathvariant="bold-italic">Κ</mtext></math>=<span>1D725</span></span> - <span><math><mtext mathvariant="bold-italic">Λ</mtext></math>=<span>1D726</span></span> - <span><math><mtext mathvariant="bold-italic">Μ</mtext></math>=<span>1D727</span></span> - <span><math><mtext mathvariant="bold-italic">Ν</mtext></math>=<span>1D728</span></span> - <span><math><mtext mathvariant="bold-italic">Ξ</mtext></math>=<span>1D729</span></span> - <span><math><mtext mathvariant="bold-italic">Ο</mtext></math>=<span>1D72A</span></span> - <span><math><mtext mathvariant="bold-italic">Π</mtext></math>=<span>1D72B</span></span><br/> - <span><math><mtext mathvariant="bold-italic">Ρ</mtext></math>=<span>1D72C</span></span> - <span><math><mtext mathvariant="bold-italic">Σ</mtext></math>=<span>1D72E</span></span> - <span><math><mtext mathvariant="bold-italic">Τ</mtext></math>=<span>1D72F</span></span> - <span><math><mtext mathvariant="bold-italic">Υ</mtext></math>=<span>1D730</span></span> - <span><math><mtext mathvariant="bold-italic">Φ</mtext></math>=<span>1D731</span></span> - <span><math><mtext mathvariant="bold-italic">Χ</mtext></math>=<span>1D732</span></span> - <span><math><mtext mathvariant="bold-italic">Ψ</mtext></math>=<span>1D733</span></span> - <span><math><mtext mathvariant="bold-italic">Ω</mtext></math>=<span>1D734</span></span> - <span><math><mtext mathvariant="bold-italic">α</mtext></math>=<span>1D736</span></span> - <span><math><mtext mathvariant="bold-italic">β</mtext></math>=<span>1D737</span></span><br/> - <span><math><mtext mathvariant="bold-italic">γ</mtext></math>=<span>1D738</span></span> - <span><math><mtext mathvariant="bold-italic">δ</mtext></math>=<span>1D739</span></span> - <span><math><mtext mathvariant="bold-italic">ε</mtext></math>=<span>1D73A</span></span> - <span><math><mtext mathvariant="bold-italic">ζ</mtext></math>=<span>1D73B</span></span> - <span><math><mtext mathvariant="bold-italic">η</mtext></math>=<span>1D73C</span></span> - <span><math><mtext mathvariant="bold-italic">θ</mtext></math>=<span>1D73D</span></span> - <span><math><mtext mathvariant="bold-italic">ι</mtext></math>=<span>1D73E</span></span> - <span><math><mtext mathvariant="bold-italic">κ</mtext></math>=<span>1D73F</span></span> - <span><math><mtext mathvariant="bold-italic">λ</mtext></math>=<span>1D740</span></span> - <span><math><mtext mathvariant="bold-italic">μ</mtext></math>=<span>1D741</span></span><br/> - <span><math><mtext mathvariant="bold-italic">ν</mtext></math>=<span>1D742</span></span> - <span><math><mtext mathvariant="bold-italic">ξ</mtext></math>=<span>1D743</span></span> - <span><math><mtext mathvariant="bold-italic">ο</mtext></math>=<span>1D744</span></span> - <span><math><mtext mathvariant="bold-italic">π</mtext></math>=<span>1D745</span></span> - <span><math><mtext mathvariant="bold-italic">ρ</mtext></math>=<span>1D746</span></span> - <span><math><mtext mathvariant="bold-italic">ς</mtext></math>=<span>1D747</span></span> - <span><math><mtext mathvariant="bold-italic">σ</mtext></math>=<span>1D748</span></span> - <span><math><mtext mathvariant="bold-italic">τ</mtext></math>=<span>1D749</span></span> - <span><math><mtext mathvariant="bold-italic">υ</mtext></math>=<span>1D74A</span></span> - <span><math><mtext mathvariant="bold-italic">φ</mtext></math>=<span>1D74B</span></span><br/> - <span><math><mtext mathvariant="bold-italic">χ</mtext></math>=<span>1D74C</span></span> - <span><math><mtext mathvariant="bold-italic">ψ</mtext></math>=<span>1D74D</span></span> - <span><math><mtext mathvariant="bold-italic">ω</mtext></math>=<span>1D74E</span></span> - <span><math><mtext mathvariant="bold-italic">ϑ</mtext></math>=<span>1D751</span></span> - <span><math><mtext mathvariant="bold-italic">ϕ</mtext></math>=<span>1D753</span></span> - <span><math><mtext mathvariant="bold-italic">ϖ</mtext></math>=<span>1D755</span></span> - <span><math><mtext mathvariant="bold-italic">ϰ</mtext></math>=<span>1D752</span></span> - <span><math><mtext mathvariant="bold-italic">ϱ</mtext></math>=<span>1D754</span></span> - <span><math><mtext mathvariant="bold-italic">ϴ</mtext></math>=<span>1D72D</span></span> - <span><math><mtext mathvariant="bold-italic">ϵ</mtext></math>=<span>1D750</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">∂</mtext></math>=<span>1D74F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">∇</mtext></math>=<span>1D735</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">A</mtext></math>=<span>1D468</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">B</mtext></math>=<span>1D469</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">C</mtext></math>=<span>1D46A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">D</mtext></math>=<span>1D46B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">E</mtext></math>=<span>1D46C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">F</mtext></math>=<span>1D46D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">G</mtext></math>=<span>1D46E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">H</mtext></math>=<span>1D46F</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">I</mtext></math>=<span>1D470</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">J</mtext></math>=<span>1D471</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">K</mtext></math>=<span>1D472</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">L</mtext></math>=<span>1D473</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">M</mtext></math>=<span>1D474</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">N</mtext></math>=<span>1D475</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">O</mtext></math>=<span>1D476</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">P</mtext></math>=<span>1D477</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Q</mtext></math>=<span>1D478</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">R</mtext></math>=<span>1D479</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">S</mtext></math>=<span>1D47A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">T</mtext></math>=<span>1D47B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">U</mtext></math>=<span>1D47C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">V</mtext></math>=<span>1D47D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">W</mtext></math>=<span>1D47E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">X</mtext></math>=<span>1D47F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Y</mtext></math>=<span>1D480</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Z</mtext></math>=<span>1D481</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">a</mtext></math>=<span>1D482</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">b</mtext></math>=<span>1D483</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">c</mtext></math>=<span>1D484</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">d</mtext></math>=<span>1D485</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">e</mtext></math>=<span>1D486</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">f</mtext></math>=<span>1D487</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">g</mtext></math>=<span>1D488</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">h</mtext></math>=<span>1D489</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">i</mtext></math>=<span>1D48A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">j</mtext></math>=<span>1D48B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">k</mtext></math>=<span>1D48C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">l</mtext></math>=<span>1D48D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">m</mtext></math>=<span>1D48E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">n</mtext></math>=<span>1D48F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">o</mtext></math>=<span>1D490</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">p</mtext></math>=<span>1D491</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">q</mtext></math>=<span>1D492</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">r</mtext></math>=<span>1D493</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">s</mtext></math>=<span>1D494</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">t</mtext></math>=<span>1D495</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">u</mtext></math>=<span>1D496</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">v</mtext></math>=<span>1D497</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">w</mtext></math>=<span>1D498</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">x</mtext></math>=<span>1D499</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">y</mtext></math>=<span>1D49A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">z</mtext></math>=<span>1D49B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Α</mtext></math>=<span>1D71C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Β</mtext></math>=<span>1D71D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Γ</mtext></math>=<span>1D71E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Δ</mtext></math>=<span>1D71F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ε</mtext></math>=<span>1D720</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ζ</mtext></math>=<span>1D721</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">Η</mtext></math>=<span>1D722</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Θ</mtext></math>=<span>1D723</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ι</mtext></math>=<span>1D724</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Κ</mtext></math>=<span>1D725</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Λ</mtext></math>=<span>1D726</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Μ</mtext></math>=<span>1D727</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ν</mtext></math>=<span>1D728</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ξ</mtext></math>=<span>1D729</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ο</mtext></math>=<span>1D72A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Π</mtext></math>=<span>1D72B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ρ</mtext></math>=<span>1D72C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Σ</mtext></math>=<span>1D72E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Τ</mtext></math>=<span>1D72F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Υ</mtext></math>=<span>1D730</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Φ</mtext></math>=<span>1D731</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Χ</mtext></math>=<span>1D732</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ψ</mtext></math>=<span>1D733</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">Ω</mtext></math>=<span>1D734</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">α</mtext></math>=<span>1D736</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">β</mtext></math>=<span>1D737</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">γ</mtext></math>=<span>1D738</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">δ</mtext></math>=<span>1D739</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ε</mtext></math>=<span>1D73A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ζ</mtext></math>=<span>1D73B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">η</mtext></math>=<span>1D73C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">θ</mtext></math>=<span>1D73D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ι</mtext></math>=<span>1D73E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">κ</mtext></math>=<span>1D73F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">λ</mtext></math>=<span>1D740</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">μ</mtext></math>=<span>1D741</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">ν</mtext></math>=<span>1D742</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ξ</mtext></math>=<span>1D743</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ο</mtext></math>=<span>1D744</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">π</mtext></math>=<span>1D745</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ρ</mtext></math>=<span>1D746</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ς</mtext></math>=<span>1D747</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">σ</mtext></math>=<span>1D748</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">τ</mtext></math>=<span>1D749</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">υ</mtext></math>=<span>1D74A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">φ</mtext></math>=<span>1D74B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-italic">χ</mtext></math>=<span>1D74C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ψ</mtext></math>=<span>1D74D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ω</mtext></math>=<span>1D74E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϑ</mtext></math>=<span>1D751</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϕ</mtext></math>=<span>1D753</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϖ</mtext></math>=<span>1D755</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϰ</mtext></math>=<span>1D752</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϱ</mtext></math>=<span>1D754</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϴ</mtext></math>=<span>1D72D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-italic">ϵ</mtext></math>=<span>1D750</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-ref.html index 11cb2de..3a727872 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,127 +23,127 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝛛</mtext></math>=<span>1D6DB</span></span> - <span><math><mtext>𝛁</mtext></math>=<span>1D6C1</span></span> - <span><math><mtext>𝟎</mtext></math>=<span>1D7CE</span></span> - <span><math><mtext>𝟏</mtext></math>=<span>1D7CF</span></span> - <span><math><mtext>𝟐</mtext></math>=<span>1D7D0</span></span> - <span><math><mtext>𝟑</mtext></math>=<span>1D7D1</span></span> - <span><math><mtext>𝟒</mtext></math>=<span>1D7D2</span></span> - <span><math><mtext>𝟓</mtext></math>=<span>1D7D3</span></span> - <span><math><mtext>𝟔</mtext></math>=<span>1D7D4</span></span> - <span><math><mtext>𝟕</mtext></math>=<span>1D7D5</span></span><br/> - <span><math><mtext>𝟖</mtext></math>=<span>1D7D6</span></span> - <span><math><mtext>𝟗</mtext></math>=<span>1D7D7</span></span> - <span><math><mtext>𝐀</mtext></math>=<span>1D400</span></span> - <span><math><mtext>𝐁</mtext></math>=<span>1D401</span></span> - <span><math><mtext>𝐂</mtext></math>=<span>1D402</span></span> - <span><math><mtext>𝐃</mtext></math>=<span>1D403</span></span> - <span><math><mtext>𝐄</mtext></math>=<span>1D404</span></span> - <span><math><mtext>𝐅</mtext></math>=<span>1D405</span></span> - <span><math><mtext>𝐆</mtext></math>=<span>1D406</span></span> - <span><math><mtext>𝐇</mtext></math>=<span>1D407</span></span><br/> - <span><math><mtext>𝐈</mtext></math>=<span>1D408</span></span> - <span><math><mtext>𝐉</mtext></math>=<span>1D409</span></span> - <span><math><mtext>𝐊</mtext></math>=<span>1D40A</span></span> - <span><math><mtext>𝐋</mtext></math>=<span>1D40B</span></span> - <span><math><mtext>𝐌</mtext></math>=<span>1D40C</span></span> - <span><math><mtext>𝐍</mtext></math>=<span>1D40D</span></span> - <span><math><mtext>𝐎</mtext></math>=<span>1D40E</span></span> - <span><math><mtext>𝐏</mtext></math>=<span>1D40F</span></span> - <span><math><mtext>𝐐</mtext></math>=<span>1D410</span></span> - <span><math><mtext>𝐑</mtext></math>=<span>1D411</span></span><br/> - <span><math><mtext>𝐒</mtext></math>=<span>1D412</span></span> - <span><math><mtext>𝐓</mtext></math>=<span>1D413</span></span> - <span><math><mtext>𝐔</mtext></math>=<span>1D414</span></span> - <span><math><mtext>𝐕</mtext></math>=<span>1D415</span></span> - <span><math><mtext>𝐖</mtext></math>=<span>1D416</span></span> - <span><math><mtext>𝐗</mtext></math>=<span>1D417</span></span> - <span><math><mtext>𝐘</mtext></math>=<span>1D418</span></span> - <span><math><mtext>𝐙</mtext></math>=<span>1D419</span></span> - <span><math><mtext>𝐚</mtext></math>=<span>1D41A</span></span> - <span><math><mtext>𝐛</mtext></math>=<span>1D41B</span></span><br/> - <span><math><mtext>𝐜</mtext></math>=<span>1D41C</span></span> - <span><math><mtext>𝐝</mtext></math>=<span>1D41D</span></span> - <span><math><mtext>𝐞</mtext></math>=<span>1D41E</span></span> - <span><math><mtext>𝐟</mtext></math>=<span>1D41F</span></span> - <span><math><mtext>𝐠</mtext></math>=<span>1D420</span></span> - <span><math><mtext>𝐡</mtext></math>=<span>1D421</span></span> - <span><math><mtext>𝐢</mtext></math>=<span>1D422</span></span> - <span><math><mtext>𝐣</mtext></math>=<span>1D423</span></span> - <span><math><mtext>𝐤</mtext></math>=<span>1D424</span></span> - <span><math><mtext>𝐥</mtext></math>=<span>1D425</span></span><br/> - <span><math><mtext>𝐦</mtext></math>=<span>1D426</span></span> - <span><math><mtext>𝐧</mtext></math>=<span>1D427</span></span> - <span><math><mtext>𝐨</mtext></math>=<span>1D428</span></span> - <span><math><mtext>𝐩</mtext></math>=<span>1D429</span></span> - <span><math><mtext>𝐪</mtext></math>=<span>1D42A</span></span> - <span><math><mtext>𝐫</mtext></math>=<span>1D42B</span></span> - <span><math><mtext>𝐬</mtext></math>=<span>1D42C</span></span> - <span><math><mtext>𝐭</mtext></math>=<span>1D42D</span></span> - <span><math><mtext>𝐮</mtext></math>=<span>1D42E</span></span> - <span><math><mtext>𝐯</mtext></math>=<span>1D42F</span></span><br/> - <span><math><mtext>𝐰</mtext></math>=<span>1D430</span></span> - <span><math><mtext>𝐱</mtext></math>=<span>1D431</span></span> - <span><math><mtext>𝐲</mtext></math>=<span>1D432</span></span> - <span><math><mtext>𝐳</mtext></math>=<span>1D433</span></span> - <span><math><mtext>𝚨</mtext></math>=<span>1D6A8</span></span> - <span><math><mtext>𝚩</mtext></math>=<span>1D6A9</span></span> - <span><math><mtext>𝚪</mtext></math>=<span>1D6AA</span></span> - <span><math><mtext>𝚫</mtext></math>=<span>1D6AB</span></span> - <span><math><mtext>𝚬</mtext></math>=<span>1D6AC</span></span> - <span><math><mtext>𝚭</mtext></math>=<span>1D6AD</span></span><br/> - <span><math><mtext>𝚮</mtext></math>=<span>1D6AE</span></span> - <span><math><mtext>𝚯</mtext></math>=<span>1D6AF</span></span> - <span><math><mtext>𝚰</mtext></math>=<span>1D6B0</span></span> - <span><math><mtext>𝚱</mtext></math>=<span>1D6B1</span></span> - <span><math><mtext>𝚲</mtext></math>=<span>1D6B2</span></span> - <span><math><mtext>𝚳</mtext></math>=<span>1D6B3</span></span> - <span><math><mtext>𝚴</mtext></math>=<span>1D6B4</span></span> - <span><math><mtext>𝚵</mtext></math>=<span>1D6B5</span></span> - <span><math><mtext>𝚶</mtext></math>=<span>1D6B6</span></span> - <span><math><mtext>𝚷</mtext></math>=<span>1D6B7</span></span><br/> - <span><math><mtext>𝚸</mtext></math>=<span>1D6B8</span></span> - <span><math><mtext>𝚺</mtext></math>=<span>1D6BA</span></span> - <span><math><mtext>𝚻</mtext></math>=<span>1D6BB</span></span> - <span><math><mtext>𝚼</mtext></math>=<span>1D6BC</span></span> - <span><math><mtext>𝚽</mtext></math>=<span>1D6BD</span></span> - <span><math><mtext>𝚾</mtext></math>=<span>1D6BE</span></span> - <span><math><mtext>𝚿</mtext></math>=<span>1D6BF</span></span> - <span><math><mtext>𝛀</mtext></math>=<span>1D6C0</span></span> - <span><math><mtext>𝛂</mtext></math>=<span>1D6C2</span></span> - <span><math><mtext>𝛃</mtext></math>=<span>1D6C3</span></span><br/> - <span><math><mtext>𝛄</mtext></math>=<span>1D6C4</span></span> - <span><math><mtext>𝛅</mtext></math>=<span>1D6C5</span></span> - <span><math><mtext>𝛆</mtext></math>=<span>1D6C6</span></span> - <span><math><mtext>𝛇</mtext></math>=<span>1D6C7</span></span> - <span><math><mtext>𝛈</mtext></math>=<span>1D6C8</span></span> - <span><math><mtext>𝛉</mtext></math>=<span>1D6C9</span></span> - <span><math><mtext>𝛊</mtext></math>=<span>1D6CA</span></span> - <span><math><mtext>𝛋</mtext></math>=<span>1D6CB</span></span> - <span><math><mtext>𝛌</mtext></math>=<span>1D6CC</span></span> - <span><math><mtext>𝛍</mtext></math>=<span>1D6CD</span></span><br/> - <span><math><mtext>𝛎</mtext></math>=<span>1D6CE</span></span> - <span><math><mtext>𝛏</mtext></math>=<span>1D6CF</span></span> - <span><math><mtext>𝛐</mtext></math>=<span>1D6D0</span></span> - <span><math><mtext>𝛑</mtext></math>=<span>1D6D1</span></span> - <span><math><mtext>𝛒</mtext></math>=<span>1D6D2</span></span> - <span><math><mtext>𝛓</mtext></math>=<span>1D6D3</span></span> - <span><math><mtext>𝛔</mtext></math>=<span>1D6D4</span></span> - <span><math><mtext>𝛕</mtext></math>=<span>1D6D5</span></span> - <span><math><mtext>𝛖</mtext></math>=<span>1D6D6</span></span> - <span><math><mtext>𝛗</mtext></math>=<span>1D6D7</span></span><br/> - <span><math><mtext>𝛘</mtext></math>=<span>1D6D8</span></span> - <span><math><mtext>𝛙</mtext></math>=<span>1D6D9</span></span> - <span><math><mtext>𝛚</mtext></math>=<span>1D6DA</span></span> - <span><math><mtext>𝛝</mtext></math>=<span>1D6DD</span></span> - <span><math><mtext>𝛟</mtext></math>=<span>1D6DF</span></span> - <span><math><mtext>𝛡</mtext></math>=<span>1D6E1</span></span> - <span><math><mtext>𝟊</mtext></math>=<span>1D7CA</span></span> - <span><math><mtext>𝟋</mtext></math>=<span>1D7CB</span></span> - <span><math><mtext>𝛞</mtext></math>=<span>1D6DE</span></span> - <span><math><mtext>𝛠</mtext></math>=<span>1D6E0</span></span><br/> - <span><math><mtext>𝚹</mtext></math>=<span>1D6B9</span></span> - <span><math><mtext>𝛜</mtext></math>=<span>1D6DC</span></span> + <span><math class="testfont"><mtext>𝛛</mtext></math>=<span>1D6DB</span></span> + <span><math class="testfont"><mtext>𝛁</mtext></math>=<span>1D6C1</span></span> + <span><math class="testfont"><mtext>𝟎</mtext></math>=<span>1D7CE</span></span> + <span><math class="testfont"><mtext>𝟏</mtext></math>=<span>1D7CF</span></span> + <span><math class="testfont"><mtext>𝟐</mtext></math>=<span>1D7D0</span></span> + <span><math class="testfont"><mtext>𝟑</mtext></math>=<span>1D7D1</span></span> + <span><math class="testfont"><mtext>𝟒</mtext></math>=<span>1D7D2</span></span> + <span><math class="testfont"><mtext>𝟓</mtext></math>=<span>1D7D3</span></span> + <span><math class="testfont"><mtext>𝟔</mtext></math>=<span>1D7D4</span></span> + <span><math class="testfont"><mtext>𝟕</mtext></math>=<span>1D7D5</span></span><br/> + <span><math class="testfont"><mtext>𝟖</mtext></math>=<span>1D7D6</span></span> + <span><math class="testfont"><mtext>𝟗</mtext></math>=<span>1D7D7</span></span> + <span><math class="testfont"><mtext>𝐀</mtext></math>=<span>1D400</span></span> + <span><math class="testfont"><mtext>𝐁</mtext></math>=<span>1D401</span></span> + <span><math class="testfont"><mtext>𝐂</mtext></math>=<span>1D402</span></span> + <span><math class="testfont"><mtext>𝐃</mtext></math>=<span>1D403</span></span> + <span><math class="testfont"><mtext>𝐄</mtext></math>=<span>1D404</span></span> + <span><math class="testfont"><mtext>𝐅</mtext></math>=<span>1D405</span></span> + <span><math class="testfont"><mtext>𝐆</mtext></math>=<span>1D406</span></span> + <span><math class="testfont"><mtext>𝐇</mtext></math>=<span>1D407</span></span><br/> + <span><math class="testfont"><mtext>𝐈</mtext></math>=<span>1D408</span></span> + <span><math class="testfont"><mtext>𝐉</mtext></math>=<span>1D409</span></span> + <span><math class="testfont"><mtext>𝐊</mtext></math>=<span>1D40A</span></span> + <span><math class="testfont"><mtext>𝐋</mtext></math>=<span>1D40B</span></span> + <span><math class="testfont"><mtext>𝐌</mtext></math>=<span>1D40C</span></span> + <span><math class="testfont"><mtext>𝐍</mtext></math>=<span>1D40D</span></span> + <span><math class="testfont"><mtext>𝐎</mtext></math>=<span>1D40E</span></span> + <span><math class="testfont"><mtext>𝐏</mtext></math>=<span>1D40F</span></span> + <span><math class="testfont"><mtext>𝐐</mtext></math>=<span>1D410</span></span> + <span><math class="testfont"><mtext>𝐑</mtext></math>=<span>1D411</span></span><br/> + <span><math class="testfont"><mtext>𝐒</mtext></math>=<span>1D412</span></span> + <span><math class="testfont"><mtext>𝐓</mtext></math>=<span>1D413</span></span> + <span><math class="testfont"><mtext>𝐔</mtext></math>=<span>1D414</span></span> + <span><math class="testfont"><mtext>𝐕</mtext></math>=<span>1D415</span></span> + <span><math class="testfont"><mtext>𝐖</mtext></math>=<span>1D416</span></span> + <span><math class="testfont"><mtext>𝐗</mtext></math>=<span>1D417</span></span> + <span><math class="testfont"><mtext>𝐘</mtext></math>=<span>1D418</span></span> + <span><math class="testfont"><mtext>𝐙</mtext></math>=<span>1D419</span></span> + <span><math class="testfont"><mtext>𝐚</mtext></math>=<span>1D41A</span></span> + <span><math class="testfont"><mtext>𝐛</mtext></math>=<span>1D41B</span></span><br/> + <span><math class="testfont"><mtext>𝐜</mtext></math>=<span>1D41C</span></span> + <span><math class="testfont"><mtext>𝐝</mtext></math>=<span>1D41D</span></span> + <span><math class="testfont"><mtext>𝐞</mtext></math>=<span>1D41E</span></span> + <span><math class="testfont"><mtext>𝐟</mtext></math>=<span>1D41F</span></span> + <span><math class="testfont"><mtext>𝐠</mtext></math>=<span>1D420</span></span> + <span><math class="testfont"><mtext>𝐡</mtext></math>=<span>1D421</span></span> + <span><math class="testfont"><mtext>𝐢</mtext></math>=<span>1D422</span></span> + <span><math class="testfont"><mtext>𝐣</mtext></math>=<span>1D423</span></span> + <span><math class="testfont"><mtext>𝐤</mtext></math>=<span>1D424</span></span> + <span><math class="testfont"><mtext>𝐥</mtext></math>=<span>1D425</span></span><br/> + <span><math class="testfont"><mtext>𝐦</mtext></math>=<span>1D426</span></span> + <span><math class="testfont"><mtext>𝐧</mtext></math>=<span>1D427</span></span> + <span><math class="testfont"><mtext>𝐨</mtext></math>=<span>1D428</span></span> + <span><math class="testfont"><mtext>𝐩</mtext></math>=<span>1D429</span></span> + <span><math class="testfont"><mtext>𝐪</mtext></math>=<span>1D42A</span></span> + <span><math class="testfont"><mtext>𝐫</mtext></math>=<span>1D42B</span></span> + <span><math class="testfont"><mtext>𝐬</mtext></math>=<span>1D42C</span></span> + <span><math class="testfont"><mtext>𝐭</mtext></math>=<span>1D42D</span></span> + <span><math class="testfont"><mtext>𝐮</mtext></math>=<span>1D42E</span></span> + <span><math class="testfont"><mtext>𝐯</mtext></math>=<span>1D42F</span></span><br/> + <span><math class="testfont"><mtext>𝐰</mtext></math>=<span>1D430</span></span> + <span><math class="testfont"><mtext>𝐱</mtext></math>=<span>1D431</span></span> + <span><math class="testfont"><mtext>𝐲</mtext></math>=<span>1D432</span></span> + <span><math class="testfont"><mtext>𝐳</mtext></math>=<span>1D433</span></span> + <span><math class="testfont"><mtext>𝚨</mtext></math>=<span>1D6A8</span></span> + <span><math class="testfont"><mtext>𝚩</mtext></math>=<span>1D6A9</span></span> + <span><math class="testfont"><mtext>𝚪</mtext></math>=<span>1D6AA</span></span> + <span><math class="testfont"><mtext>𝚫</mtext></math>=<span>1D6AB</span></span> + <span><math class="testfont"><mtext>𝚬</mtext></math>=<span>1D6AC</span></span> + <span><math class="testfont"><mtext>𝚭</mtext></math>=<span>1D6AD</span></span><br/> + <span><math class="testfont"><mtext>𝚮</mtext></math>=<span>1D6AE</span></span> + <span><math class="testfont"><mtext>𝚯</mtext></math>=<span>1D6AF</span></span> + <span><math class="testfont"><mtext>𝚰</mtext></math>=<span>1D6B0</span></span> + <span><math class="testfont"><mtext>𝚱</mtext></math>=<span>1D6B1</span></span> + <span><math class="testfont"><mtext>𝚲</mtext></math>=<span>1D6B2</span></span> + <span><math class="testfont"><mtext>𝚳</mtext></math>=<span>1D6B3</span></span> + <span><math class="testfont"><mtext>𝚴</mtext></math>=<span>1D6B4</span></span> + <span><math class="testfont"><mtext>𝚵</mtext></math>=<span>1D6B5</span></span> + <span><math class="testfont"><mtext>𝚶</mtext></math>=<span>1D6B6</span></span> + <span><math class="testfont"><mtext>𝚷</mtext></math>=<span>1D6B7</span></span><br/> + <span><math class="testfont"><mtext>𝚸</mtext></math>=<span>1D6B8</span></span> + <span><math class="testfont"><mtext>𝚺</mtext></math>=<span>1D6BA</span></span> + <span><math class="testfont"><mtext>𝚻</mtext></math>=<span>1D6BB</span></span> + <span><math class="testfont"><mtext>𝚼</mtext></math>=<span>1D6BC</span></span> + <span><math class="testfont"><mtext>𝚽</mtext></math>=<span>1D6BD</span></span> + <span><math class="testfont"><mtext>𝚾</mtext></math>=<span>1D6BE</span></span> + <span><math class="testfont"><mtext>𝚿</mtext></math>=<span>1D6BF</span></span> + <span><math class="testfont"><mtext>𝛀</mtext></math>=<span>1D6C0</span></span> + <span><math class="testfont"><mtext>𝛂</mtext></math>=<span>1D6C2</span></span> + <span><math class="testfont"><mtext>𝛃</mtext></math>=<span>1D6C3</span></span><br/> + <span><math class="testfont"><mtext>𝛄</mtext></math>=<span>1D6C4</span></span> + <span><math class="testfont"><mtext>𝛅</mtext></math>=<span>1D6C5</span></span> + <span><math class="testfont"><mtext>𝛆</mtext></math>=<span>1D6C6</span></span> + <span><math class="testfont"><mtext>𝛇</mtext></math>=<span>1D6C7</span></span> + <span><math class="testfont"><mtext>𝛈</mtext></math>=<span>1D6C8</span></span> + <span><math class="testfont"><mtext>𝛉</mtext></math>=<span>1D6C9</span></span> + <span><math class="testfont"><mtext>𝛊</mtext></math>=<span>1D6CA</span></span> + <span><math class="testfont"><mtext>𝛋</mtext></math>=<span>1D6CB</span></span> + <span><math class="testfont"><mtext>𝛌</mtext></math>=<span>1D6CC</span></span> + <span><math class="testfont"><mtext>𝛍</mtext></math>=<span>1D6CD</span></span><br/> + <span><math class="testfont"><mtext>𝛎</mtext></math>=<span>1D6CE</span></span> + <span><math class="testfont"><mtext>𝛏</mtext></math>=<span>1D6CF</span></span> + <span><math class="testfont"><mtext>𝛐</mtext></math>=<span>1D6D0</span></span> + <span><math class="testfont"><mtext>𝛑</mtext></math>=<span>1D6D1</span></span> + <span><math class="testfont"><mtext>𝛒</mtext></math>=<span>1D6D2</span></span> + <span><math class="testfont"><mtext>𝛓</mtext></math>=<span>1D6D3</span></span> + <span><math class="testfont"><mtext>𝛔</mtext></math>=<span>1D6D4</span></span> + <span><math class="testfont"><mtext>𝛕</mtext></math>=<span>1D6D5</span></span> + <span><math class="testfont"><mtext>𝛖</mtext></math>=<span>1D6D6</span></span> + <span><math class="testfont"><mtext>𝛗</mtext></math>=<span>1D6D7</span></span><br/> + <span><math class="testfont"><mtext>𝛘</mtext></math>=<span>1D6D8</span></span> + <span><math class="testfont"><mtext>𝛙</mtext></math>=<span>1D6D9</span></span> + <span><math class="testfont"><mtext>𝛚</mtext></math>=<span>1D6DA</span></span> + <span><math class="testfont"><mtext>𝛝</mtext></math>=<span>1D6DD</span></span> + <span><math class="testfont"><mtext>𝛟</mtext></math>=<span>1D6DF</span></span> + <span><math class="testfont"><mtext>𝛡</mtext></math>=<span>1D6E1</span></span> + <span><math class="testfont"><mtext>𝟊</mtext></math>=<span>1D7CA</span></span> + <span><math class="testfont"><mtext>𝟋</mtext></math>=<span>1D7CB</span></span> + <span><math class="testfont"><mtext>𝛞</mtext></math>=<span>1D6DE</span></span> + <span><math class="testfont"><mtext>𝛠</mtext></math>=<span>1D6E0</span></span><br/> + <span><math class="testfont"><mtext>𝚹</mtext></math>=<span>1D6B9</span></span> + <span><math class="testfont"><mtext>𝛜</mtext></math>=<span>1D6DC</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html index a57fd18..ec292b8e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,125 +23,125 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝞉</mtext></math>=<span>1D789</span></span> - <span><math><mtext>𝝯</mtext></math>=<span>1D76F</span></span> - <span><math><mtext>𝟬</mtext></math>=<span>1D7EC</span></span> - <span><math><mtext>𝟭</mtext></math>=<span>1D7ED</span></span> - <span><math><mtext>𝟮</mtext></math>=<span>1D7EE</span></span> - <span><math><mtext>𝟯</mtext></math>=<span>1D7EF</span></span> - <span><math><mtext>𝟰</mtext></math>=<span>1D7F0</span></span> - <span><math><mtext>𝟱</mtext></math>=<span>1D7F1</span></span> - <span><math><mtext>𝟲</mtext></math>=<span>1D7F2</span></span> - <span><math><mtext>𝟳</mtext></math>=<span>1D7F3</span></span><br/> - <span><math><mtext>𝟴</mtext></math>=<span>1D7F4</span></span> - <span><math><mtext>𝟵</mtext></math>=<span>1D7F5</span></span> - <span><math><mtext>𝗔</mtext></math>=<span>1D5D4</span></span> - <span><math><mtext>𝗕</mtext></math>=<span>1D5D5</span></span> - <span><math><mtext>𝗖</mtext></math>=<span>1D5D6</span></span> - <span><math><mtext>𝗗</mtext></math>=<span>1D5D7</span></span> - <span><math><mtext>𝗘</mtext></math>=<span>1D5D8</span></span> - <span><math><mtext>𝗙</mtext></math>=<span>1D5D9</span></span> - <span><math><mtext>𝗚</mtext></math>=<span>1D5DA</span></span> - <span><math><mtext>𝗛</mtext></math>=<span>1D5DB</span></span><br/> - <span><math><mtext>𝗜</mtext></math>=<span>1D5DC</span></span> - <span><math><mtext>𝗝</mtext></math>=<span>1D5DD</span></span> - <span><math><mtext>𝗞</mtext></math>=<span>1D5DE</span></span> - <span><math><mtext>𝗟</mtext></math>=<span>1D5DF</span></span> - <span><math><mtext>𝗠</mtext></math>=<span>1D5E0</span></span> - <span><math><mtext>𝗡</mtext></math>=<span>1D5E1</span></span> - <span><math><mtext>𝗢</mtext></math>=<span>1D5E2</span></span> - <span><math><mtext>𝗣</mtext></math>=<span>1D5E3</span></span> - <span><math><mtext>𝗤</mtext></math>=<span>1D5E4</span></span> - <span><math><mtext>𝗥</mtext></math>=<span>1D5E5</span></span><br/> - <span><math><mtext>𝗦</mtext></math>=<span>1D5E6</span></span> - <span><math><mtext>𝗧</mtext></math>=<span>1D5E7</span></span> - <span><math><mtext>𝗨</mtext></math>=<span>1D5E8</span></span> - <span><math><mtext>𝗩</mtext></math>=<span>1D5E9</span></span> - <span><math><mtext>𝗪</mtext></math>=<span>1D5EA</span></span> - <span><math><mtext>𝗫</mtext></math>=<span>1D5EB</span></span> - <span><math><mtext>𝗬</mtext></math>=<span>1D5EC</span></span> - <span><math><mtext>𝗭</mtext></math>=<span>1D5ED</span></span> - <span><math><mtext>𝗮</mtext></math>=<span>1D5EE</span></span> - <span><math><mtext>𝗯</mtext></math>=<span>1D5EF</span></span><br/> - <span><math><mtext>𝗰</mtext></math>=<span>1D5F0</span></span> - <span><math><mtext>𝗱</mtext></math>=<span>1D5F1</span></span> - <span><math><mtext>𝗲</mtext></math>=<span>1D5F2</span></span> - <span><math><mtext>𝗳</mtext></math>=<span>1D5F3</span></span> - <span><math><mtext>𝗴</mtext></math>=<span>1D5F4</span></span> - <span><math><mtext>𝗵</mtext></math>=<span>1D5F5</span></span> - <span><math><mtext>𝗶</mtext></math>=<span>1D5F6</span></span> - <span><math><mtext>𝗷</mtext></math>=<span>1D5F7</span></span> - <span><math><mtext>𝗸</mtext></math>=<span>1D5F8</span></span> - <span><math><mtext>𝗹</mtext></math>=<span>1D5F9</span></span><br/> - <span><math><mtext>𝗺</mtext></math>=<span>1D5FA</span></span> - <span><math><mtext>𝗻</mtext></math>=<span>1D5FB</span></span> - <span><math><mtext>𝗼</mtext></math>=<span>1D5FC</span></span> - <span><math><mtext>𝗽</mtext></math>=<span>1D5FD</span></span> - <span><math><mtext>𝗾</mtext></math>=<span>1D5FE</span></span> - <span><math><mtext>𝗿</mtext></math>=<span>1D5FF</span></span> - <span><math><mtext>𝘀</mtext></math>=<span>1D600</span></span> - <span><math><mtext>𝘁</mtext></math>=<span>1D601</span></span> - <span><math><mtext>𝘂</mtext></math>=<span>1D602</span></span> - <span><math><mtext>𝘃</mtext></math>=<span>1D603</span></span><br/> - <span><math><mtext>𝘄</mtext></math>=<span>1D604</span></span> - <span><math><mtext>𝘅</mtext></math>=<span>1D605</span></span> - <span><math><mtext>𝘆</mtext></math>=<span>1D606</span></span> - <span><math><mtext>𝘇</mtext></math>=<span>1D607</span></span> - <span><math><mtext>𝝖</mtext></math>=<span>1D756</span></span> - <span><math><mtext>𝝗</mtext></math>=<span>1D757</span></span> - <span><math><mtext>𝝘</mtext></math>=<span>1D758</span></span> - <span><math><mtext>𝝙</mtext></math>=<span>1D759</span></span> - <span><math><mtext>𝝚</mtext></math>=<span>1D75A</span></span> - <span><math><mtext>𝝛</mtext></math>=<span>1D75B</span></span><br/> - <span><math><mtext>𝝜</mtext></math>=<span>1D75C</span></span> - <span><math><mtext>𝝝</mtext></math>=<span>1D75D</span></span> - <span><math><mtext>𝝞</mtext></math>=<span>1D75E</span></span> - <span><math><mtext>𝝟</mtext></math>=<span>1D75F</span></span> - <span><math><mtext>𝝠</mtext></math>=<span>1D760</span></span> - <span><math><mtext>𝝡</mtext></math>=<span>1D761</span></span> - <span><math><mtext>𝝢</mtext></math>=<span>1D762</span></span> - <span><math><mtext>𝝣</mtext></math>=<span>1D763</span></span> - <span><math><mtext>𝝤</mtext></math>=<span>1D764</span></span> - <span><math><mtext>𝝥</mtext></math>=<span>1D765</span></span><br/> - <span><math><mtext>𝝦</mtext></math>=<span>1D766</span></span> - <span><math><mtext>𝝨</mtext></math>=<span>1D768</span></span> - <span><math><mtext>𝝩</mtext></math>=<span>1D769</span></span> - <span><math><mtext>𝝪</mtext></math>=<span>1D76A</span></span> - <span><math><mtext>𝝫</mtext></math>=<span>1D76B</span></span> - <span><math><mtext>𝝬</mtext></math>=<span>1D76C</span></span> - <span><math><mtext>𝝭</mtext></math>=<span>1D76D</span></span> - <span><math><mtext>𝝮</mtext></math>=<span>1D76E</span></span> - <span><math><mtext>𝝰</mtext></math>=<span>1D770</span></span> - <span><math><mtext>𝝱</mtext></math>=<span>1D771</span></span><br/> - <span><math><mtext>𝝲</mtext></math>=<span>1D772</span></span> - <span><math><mtext>𝝳</mtext></math>=<span>1D773</span></span> - <span><math><mtext>𝝴</mtext></math>=<span>1D774</span></span> - <span><math><mtext>𝝵</mtext></math>=<span>1D775</span></span> - <span><math><mtext>𝝶</mtext></math>=<span>1D776</span></span> - <span><math><mtext>𝝷</mtext></math>=<span>1D777</span></span> - <span><math><mtext>𝝸</mtext></math>=<span>1D778</span></span> - <span><math><mtext>𝝹</mtext></math>=<span>1D779</span></span> - <span><math><mtext>𝝺</mtext></math>=<span>1D77A</span></span> - <span><math><mtext>𝝻</mtext></math>=<span>1D77B</span></span><br/> - <span><math><mtext>𝝼</mtext></math>=<span>1D77C</span></span> - <span><math><mtext>𝝽</mtext></math>=<span>1D77D</span></span> - <span><math><mtext>𝝾</mtext></math>=<span>1D77E</span></span> - <span><math><mtext>𝝿</mtext></math>=<span>1D77F</span></span> - <span><math><mtext>𝞀</mtext></math>=<span>1D780</span></span> - <span><math><mtext>𝞁</mtext></math>=<span>1D781</span></span> - <span><math><mtext>𝞂</mtext></math>=<span>1D782</span></span> - <span><math><mtext>𝞃</mtext></math>=<span>1D783</span></span> - <span><math><mtext>𝞄</mtext></math>=<span>1D784</span></span> - <span><math><mtext>𝞅</mtext></math>=<span>1D785</span></span><br/> - <span><math><mtext>𝞆</mtext></math>=<span>1D786</span></span> - <span><math><mtext>𝞇</mtext></math>=<span>1D787</span></span> - <span><math><mtext>𝞈</mtext></math>=<span>1D788</span></span> - <span><math><mtext>𝞋</mtext></math>=<span>1D78B</span></span> - <span><math><mtext>𝞍</mtext></math>=<span>1D78D</span></span> - <span><math><mtext>𝞏</mtext></math>=<span>1D78F</span></span> - <span><math><mtext>𝞌</mtext></math>=<span>1D78C</span></span> - <span><math><mtext>𝞎</mtext></math>=<span>1D78E</span></span> - <span><math><mtext>𝝧</mtext></math>=<span>1D767</span></span> - <span><math><mtext>𝞊</mtext></math>=<span>1D78A</span></span><br/> + <span><math class="testfont"><mtext>𝞉</mtext></math>=<span>1D789</span></span> + <span><math class="testfont"><mtext>𝝯</mtext></math>=<span>1D76F</span></span> + <span><math class="testfont"><mtext>𝟬</mtext></math>=<span>1D7EC</span></span> + <span><math class="testfont"><mtext>𝟭</mtext></math>=<span>1D7ED</span></span> + <span><math class="testfont"><mtext>𝟮</mtext></math>=<span>1D7EE</span></span> + <span><math class="testfont"><mtext>𝟯</mtext></math>=<span>1D7EF</span></span> + <span><math class="testfont"><mtext>𝟰</mtext></math>=<span>1D7F0</span></span> + <span><math class="testfont"><mtext>𝟱</mtext></math>=<span>1D7F1</span></span> + <span><math class="testfont"><mtext>𝟲</mtext></math>=<span>1D7F2</span></span> + <span><math class="testfont"><mtext>𝟳</mtext></math>=<span>1D7F3</span></span><br/> + <span><math class="testfont"><mtext>𝟴</mtext></math>=<span>1D7F4</span></span> + <span><math class="testfont"><mtext>𝟵</mtext></math>=<span>1D7F5</span></span> + <span><math class="testfont"><mtext>𝗔</mtext></math>=<span>1D5D4</span></span> + <span><math class="testfont"><mtext>𝗕</mtext></math>=<span>1D5D5</span></span> + <span><math class="testfont"><mtext>𝗖</mtext></math>=<span>1D5D6</span></span> + <span><math class="testfont"><mtext>𝗗</mtext></math>=<span>1D5D7</span></span> + <span><math class="testfont"><mtext>𝗘</mtext></math>=<span>1D5D8</span></span> + <span><math class="testfont"><mtext>𝗙</mtext></math>=<span>1D5D9</span></span> + <span><math class="testfont"><mtext>𝗚</mtext></math>=<span>1D5DA</span></span> + <span><math class="testfont"><mtext>𝗛</mtext></math>=<span>1D5DB</span></span><br/> + <span><math class="testfont"><mtext>𝗜</mtext></math>=<span>1D5DC</span></span> + <span><math class="testfont"><mtext>𝗝</mtext></math>=<span>1D5DD</span></span> + <span><math class="testfont"><mtext>𝗞</mtext></math>=<span>1D5DE</span></span> + <span><math class="testfont"><mtext>𝗟</mtext></math>=<span>1D5DF</span></span> + <span><math class="testfont"><mtext>𝗠</mtext></math>=<span>1D5E0</span></span> + <span><math class="testfont"><mtext>𝗡</mtext></math>=<span>1D5E1</span></span> + <span><math class="testfont"><mtext>𝗢</mtext></math>=<span>1D5E2</span></span> + <span><math class="testfont"><mtext>𝗣</mtext></math>=<span>1D5E3</span></span> + <span><math class="testfont"><mtext>𝗤</mtext></math>=<span>1D5E4</span></span> + <span><math class="testfont"><mtext>𝗥</mtext></math>=<span>1D5E5</span></span><br/> + <span><math class="testfont"><mtext>𝗦</mtext></math>=<span>1D5E6</span></span> + <span><math class="testfont"><mtext>𝗧</mtext></math>=<span>1D5E7</span></span> + <span><math class="testfont"><mtext>𝗨</mtext></math>=<span>1D5E8</span></span> + <span><math class="testfont"><mtext>𝗩</mtext></math>=<span>1D5E9</span></span> + <span><math class="testfont"><mtext>𝗪</mtext></math>=<span>1D5EA</span></span> + <span><math class="testfont"><mtext>𝗫</mtext></math>=<span>1D5EB</span></span> + <span><math class="testfont"><mtext>𝗬</mtext></math>=<span>1D5EC</span></span> + <span><math class="testfont"><mtext>𝗭</mtext></math>=<span>1D5ED</span></span> + <span><math class="testfont"><mtext>𝗮</mtext></math>=<span>1D5EE</span></span> + <span><math class="testfont"><mtext>𝗯</mtext></math>=<span>1D5EF</span></span><br/> + <span><math class="testfont"><mtext>𝗰</mtext></math>=<span>1D5F0</span></span> + <span><math class="testfont"><mtext>𝗱</mtext></math>=<span>1D5F1</span></span> + <span><math class="testfont"><mtext>𝗲</mtext></math>=<span>1D5F2</span></span> + <span><math class="testfont"><mtext>𝗳</mtext></math>=<span>1D5F3</span></span> + <span><math class="testfont"><mtext>𝗴</mtext></math>=<span>1D5F4</span></span> + <span><math class="testfont"><mtext>𝗵</mtext></math>=<span>1D5F5</span></span> + <span><math class="testfont"><mtext>𝗶</mtext></math>=<span>1D5F6</span></span> + <span><math class="testfont"><mtext>𝗷</mtext></math>=<span>1D5F7</span></span> + <span><math class="testfont"><mtext>𝗸</mtext></math>=<span>1D5F8</span></span> + <span><math class="testfont"><mtext>𝗹</mtext></math>=<span>1D5F9</span></span><br/> + <span><math class="testfont"><mtext>𝗺</mtext></math>=<span>1D5FA</span></span> + <span><math class="testfont"><mtext>𝗻</mtext></math>=<span>1D5FB</span></span> + <span><math class="testfont"><mtext>𝗼</mtext></math>=<span>1D5FC</span></span> + <span><math class="testfont"><mtext>𝗽</mtext></math>=<span>1D5FD</span></span> + <span><math class="testfont"><mtext>𝗾</mtext></math>=<span>1D5FE</span></span> + <span><math class="testfont"><mtext>𝗿</mtext></math>=<span>1D5FF</span></span> + <span><math class="testfont"><mtext>𝘀</mtext></math>=<span>1D600</span></span> + <span><math class="testfont"><mtext>𝘁</mtext></math>=<span>1D601</span></span> + <span><math class="testfont"><mtext>𝘂</mtext></math>=<span>1D602</span></span> + <span><math class="testfont"><mtext>𝘃</mtext></math>=<span>1D603</span></span><br/> + <span><math class="testfont"><mtext>𝘄</mtext></math>=<span>1D604</span></span> + <span><math class="testfont"><mtext>𝘅</mtext></math>=<span>1D605</span></span> + <span><math class="testfont"><mtext>𝘆</mtext></math>=<span>1D606</span></span> + <span><math class="testfont"><mtext>𝘇</mtext></math>=<span>1D607</span></span> + <span><math class="testfont"><mtext>𝝖</mtext></math>=<span>1D756</span></span> + <span><math class="testfont"><mtext>𝝗</mtext></math>=<span>1D757</span></span> + <span><math class="testfont"><mtext>𝝘</mtext></math>=<span>1D758</span></span> + <span><math class="testfont"><mtext>𝝙</mtext></math>=<span>1D759</span></span> + <span><math class="testfont"><mtext>𝝚</mtext></math>=<span>1D75A</span></span> + <span><math class="testfont"><mtext>𝝛</mtext></math>=<span>1D75B</span></span><br/> + <span><math class="testfont"><mtext>𝝜</mtext></math>=<span>1D75C</span></span> + <span><math class="testfont"><mtext>𝝝</mtext></math>=<span>1D75D</span></span> + <span><math class="testfont"><mtext>𝝞</mtext></math>=<span>1D75E</span></span> + <span><math class="testfont"><mtext>𝝟</mtext></math>=<span>1D75F</span></span> + <span><math class="testfont"><mtext>𝝠</mtext></math>=<span>1D760</span></span> + <span><math class="testfont"><mtext>𝝡</mtext></math>=<span>1D761</span></span> + <span><math class="testfont"><mtext>𝝢</mtext></math>=<span>1D762</span></span> + <span><math class="testfont"><mtext>𝝣</mtext></math>=<span>1D763</span></span> + <span><math class="testfont"><mtext>𝝤</mtext></math>=<span>1D764</span></span> + <span><math class="testfont"><mtext>𝝥</mtext></math>=<span>1D765</span></span><br/> + <span><math class="testfont"><mtext>𝝦</mtext></math>=<span>1D766</span></span> + <span><math class="testfont"><mtext>𝝨</mtext></math>=<span>1D768</span></span> + <span><math class="testfont"><mtext>𝝩</mtext></math>=<span>1D769</span></span> + <span><math class="testfont"><mtext>𝝪</mtext></math>=<span>1D76A</span></span> + <span><math class="testfont"><mtext>𝝫</mtext></math>=<span>1D76B</span></span> + <span><math class="testfont"><mtext>𝝬</mtext></math>=<span>1D76C</span></span> + <span><math class="testfont"><mtext>𝝭</mtext></math>=<span>1D76D</span></span> + <span><math class="testfont"><mtext>𝝮</mtext></math>=<span>1D76E</span></span> + <span><math class="testfont"><mtext>𝝰</mtext></math>=<span>1D770</span></span> + <span><math class="testfont"><mtext>𝝱</mtext></math>=<span>1D771</span></span><br/> + <span><math class="testfont"><mtext>𝝲</mtext></math>=<span>1D772</span></span> + <span><math class="testfont"><mtext>𝝳</mtext></math>=<span>1D773</span></span> + <span><math class="testfont"><mtext>𝝴</mtext></math>=<span>1D774</span></span> + <span><math class="testfont"><mtext>𝝵</mtext></math>=<span>1D775</span></span> + <span><math class="testfont"><mtext>𝝶</mtext></math>=<span>1D776</span></span> + <span><math class="testfont"><mtext>𝝷</mtext></math>=<span>1D777</span></span> + <span><math class="testfont"><mtext>𝝸</mtext></math>=<span>1D778</span></span> + <span><math class="testfont"><mtext>𝝹</mtext></math>=<span>1D779</span></span> + <span><math class="testfont"><mtext>𝝺</mtext></math>=<span>1D77A</span></span> + <span><math class="testfont"><mtext>𝝻</mtext></math>=<span>1D77B</span></span><br/> + <span><math class="testfont"><mtext>𝝼</mtext></math>=<span>1D77C</span></span> + <span><math class="testfont"><mtext>𝝽</mtext></math>=<span>1D77D</span></span> + <span><math class="testfont"><mtext>𝝾</mtext></math>=<span>1D77E</span></span> + <span><math class="testfont"><mtext>𝝿</mtext></math>=<span>1D77F</span></span> + <span><math class="testfont"><mtext>𝞀</mtext></math>=<span>1D780</span></span> + <span><math class="testfont"><mtext>𝞁</mtext></math>=<span>1D781</span></span> + <span><math class="testfont"><mtext>𝞂</mtext></math>=<span>1D782</span></span> + <span><math class="testfont"><mtext>𝞃</mtext></math>=<span>1D783</span></span> + <span><math class="testfont"><mtext>𝞄</mtext></math>=<span>1D784</span></span> + <span><math class="testfont"><mtext>𝞅</mtext></math>=<span>1D785</span></span><br/> + <span><math class="testfont"><mtext>𝞆</mtext></math>=<span>1D786</span></span> + <span><math class="testfont"><mtext>𝞇</mtext></math>=<span>1D787</span></span> + <span><math class="testfont"><mtext>𝞈</mtext></math>=<span>1D788</span></span> + <span><math class="testfont"><mtext>𝞋</mtext></math>=<span>1D78B</span></span> + <span><math class="testfont"><mtext>𝞍</mtext></math>=<span>1D78D</span></span> + <span><math class="testfont"><mtext>𝞏</mtext></math>=<span>1D78F</span></span> + <span><math class="testfont"><mtext>𝞌</mtext></math>=<span>1D78C</span></span> + <span><math class="testfont"><mtext>𝞎</mtext></math>=<span>1D78E</span></span> + <span><math class="testfont"><mtext>𝝧</mtext></math>=<span>1D767</span></span> + <span><math class="testfont"><mtext>𝞊</mtext></math>=<span>1D78A</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html index cd6cc7a..112c292 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-sans-serif.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,125 +28,125 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="bold-sans-serif">∂</mtext></math>=<span>1D789</span></span> - <span><math><mtext mathvariant="bold-sans-serif">∇</mtext></math>=<span>1D76F</span></span> - <span><math><mtext mathvariant="bold-sans-serif">0</mtext></math>=<span>1D7EC</span></span> - <span><math><mtext mathvariant="bold-sans-serif">1</mtext></math>=<span>1D7ED</span></span> - <span><math><mtext mathvariant="bold-sans-serif">2</mtext></math>=<span>1D7EE</span></span> - <span><math><mtext mathvariant="bold-sans-serif">3</mtext></math>=<span>1D7EF</span></span> - <span><math><mtext mathvariant="bold-sans-serif">4</mtext></math>=<span>1D7F0</span></span> - <span><math><mtext mathvariant="bold-sans-serif">5</mtext></math>=<span>1D7F1</span></span> - <span><math><mtext mathvariant="bold-sans-serif">6</mtext></math>=<span>1D7F2</span></span> - <span><math><mtext mathvariant="bold-sans-serif">7</mtext></math>=<span>1D7F3</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">8</mtext></math>=<span>1D7F4</span></span> - <span><math><mtext mathvariant="bold-sans-serif">9</mtext></math>=<span>1D7F5</span></span> - <span><math><mtext mathvariant="bold-sans-serif">A</mtext></math>=<span>1D5D4</span></span> - <span><math><mtext mathvariant="bold-sans-serif">B</mtext></math>=<span>1D5D5</span></span> - <span><math><mtext mathvariant="bold-sans-serif">C</mtext></math>=<span>1D5D6</span></span> - <span><math><mtext mathvariant="bold-sans-serif">D</mtext></math>=<span>1D5D7</span></span> - <span><math><mtext mathvariant="bold-sans-serif">E</mtext></math>=<span>1D5D8</span></span> - <span><math><mtext mathvariant="bold-sans-serif">F</mtext></math>=<span>1D5D9</span></span> - <span><math><mtext mathvariant="bold-sans-serif">G</mtext></math>=<span>1D5DA</span></span> - <span><math><mtext mathvariant="bold-sans-serif">H</mtext></math>=<span>1D5DB</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">I</mtext></math>=<span>1D5DC</span></span> - <span><math><mtext mathvariant="bold-sans-serif">J</mtext></math>=<span>1D5DD</span></span> - <span><math><mtext mathvariant="bold-sans-serif">K</mtext></math>=<span>1D5DE</span></span> - <span><math><mtext mathvariant="bold-sans-serif">L</mtext></math>=<span>1D5DF</span></span> - <span><math><mtext mathvariant="bold-sans-serif">M</mtext></math>=<span>1D5E0</span></span> - <span><math><mtext mathvariant="bold-sans-serif">N</mtext></math>=<span>1D5E1</span></span> - <span><math><mtext mathvariant="bold-sans-serif">O</mtext></math>=<span>1D5E2</span></span> - <span><math><mtext mathvariant="bold-sans-serif">P</mtext></math>=<span>1D5E3</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Q</mtext></math>=<span>1D5E4</span></span> - <span><math><mtext mathvariant="bold-sans-serif">R</mtext></math>=<span>1D5E5</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">S</mtext></math>=<span>1D5E6</span></span> - <span><math><mtext mathvariant="bold-sans-serif">T</mtext></math>=<span>1D5E7</span></span> - <span><math><mtext mathvariant="bold-sans-serif">U</mtext></math>=<span>1D5E8</span></span> - <span><math><mtext mathvariant="bold-sans-serif">V</mtext></math>=<span>1D5E9</span></span> - <span><math><mtext mathvariant="bold-sans-serif">W</mtext></math>=<span>1D5EA</span></span> - <span><math><mtext mathvariant="bold-sans-serif">X</mtext></math>=<span>1D5EB</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Y</mtext></math>=<span>1D5EC</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Z</mtext></math>=<span>1D5ED</span></span> - <span><math><mtext mathvariant="bold-sans-serif">a</mtext></math>=<span>1D5EE</span></span> - <span><math><mtext mathvariant="bold-sans-serif">b</mtext></math>=<span>1D5EF</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">c</mtext></math>=<span>1D5F0</span></span> - <span><math><mtext mathvariant="bold-sans-serif">d</mtext></math>=<span>1D5F1</span></span> - <span><math><mtext mathvariant="bold-sans-serif">e</mtext></math>=<span>1D5F2</span></span> - <span><math><mtext mathvariant="bold-sans-serif">f</mtext></math>=<span>1D5F3</span></span> - <span><math><mtext mathvariant="bold-sans-serif">g</mtext></math>=<span>1D5F4</span></span> - <span><math><mtext mathvariant="bold-sans-serif">h</mtext></math>=<span>1D5F5</span></span> - <span><math><mtext mathvariant="bold-sans-serif">i</mtext></math>=<span>1D5F6</span></span> - <span><math><mtext mathvariant="bold-sans-serif">j</mtext></math>=<span>1D5F7</span></span> - <span><math><mtext mathvariant="bold-sans-serif">k</mtext></math>=<span>1D5F8</span></span> - <span><math><mtext mathvariant="bold-sans-serif">l</mtext></math>=<span>1D5F9</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">m</mtext></math>=<span>1D5FA</span></span> - <span><math><mtext mathvariant="bold-sans-serif">n</mtext></math>=<span>1D5FB</span></span> - <span><math><mtext mathvariant="bold-sans-serif">o</mtext></math>=<span>1D5FC</span></span> - <span><math><mtext mathvariant="bold-sans-serif">p</mtext></math>=<span>1D5FD</span></span> - <span><math><mtext mathvariant="bold-sans-serif">q</mtext></math>=<span>1D5FE</span></span> - <span><math><mtext mathvariant="bold-sans-serif">r</mtext></math>=<span>1D5FF</span></span> - <span><math><mtext mathvariant="bold-sans-serif">s</mtext></math>=<span>1D600</span></span> - <span><math><mtext mathvariant="bold-sans-serif">t</mtext></math>=<span>1D601</span></span> - <span><math><mtext mathvariant="bold-sans-serif">u</mtext></math>=<span>1D602</span></span> - <span><math><mtext mathvariant="bold-sans-serif">v</mtext></math>=<span>1D603</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">w</mtext></math>=<span>1D604</span></span> - <span><math><mtext mathvariant="bold-sans-serif">x</mtext></math>=<span>1D605</span></span> - <span><math><mtext mathvariant="bold-sans-serif">y</mtext></math>=<span>1D606</span></span> - <span><math><mtext mathvariant="bold-sans-serif">z</mtext></math>=<span>1D607</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Α</mtext></math>=<span>1D756</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Β</mtext></math>=<span>1D757</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Γ</mtext></math>=<span>1D758</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Δ</mtext></math>=<span>1D759</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ε</mtext></math>=<span>1D75A</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ζ</mtext></math>=<span>1D75B</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">Η</mtext></math>=<span>1D75C</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Θ</mtext></math>=<span>1D75D</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ι</mtext></math>=<span>1D75E</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Κ</mtext></math>=<span>1D75F</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Λ</mtext></math>=<span>1D760</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Μ</mtext></math>=<span>1D761</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ν</mtext></math>=<span>1D762</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ξ</mtext></math>=<span>1D763</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ο</mtext></math>=<span>1D764</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Π</mtext></math>=<span>1D765</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">Ρ</mtext></math>=<span>1D766</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Σ</mtext></math>=<span>1D768</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Τ</mtext></math>=<span>1D769</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Υ</mtext></math>=<span>1D76A</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Φ</mtext></math>=<span>1D76B</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Χ</mtext></math>=<span>1D76C</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ψ</mtext></math>=<span>1D76D</span></span> - <span><math><mtext mathvariant="bold-sans-serif">Ω</mtext></math>=<span>1D76E</span></span> - <span><math><mtext mathvariant="bold-sans-serif">α</mtext></math>=<span>1D770</span></span> - <span><math><mtext mathvariant="bold-sans-serif">β</mtext></math>=<span>1D771</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">γ</mtext></math>=<span>1D772</span></span> - <span><math><mtext mathvariant="bold-sans-serif">δ</mtext></math>=<span>1D773</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ε</mtext></math>=<span>1D774</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ζ</mtext></math>=<span>1D775</span></span> - <span><math><mtext mathvariant="bold-sans-serif">η</mtext></math>=<span>1D776</span></span> - <span><math><mtext mathvariant="bold-sans-serif">θ</mtext></math>=<span>1D777</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ι</mtext></math>=<span>1D778</span></span> - <span><math><mtext mathvariant="bold-sans-serif">κ</mtext></math>=<span>1D779</span></span> - <span><math><mtext mathvariant="bold-sans-serif">λ</mtext></math>=<span>1D77A</span></span> - <span><math><mtext mathvariant="bold-sans-serif">μ</mtext></math>=<span>1D77B</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">ν</mtext></math>=<span>1D77C</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ξ</mtext></math>=<span>1D77D</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ο</mtext></math>=<span>1D77E</span></span> - <span><math><mtext mathvariant="bold-sans-serif">π</mtext></math>=<span>1D77F</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ρ</mtext></math>=<span>1D780</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ς</mtext></math>=<span>1D781</span></span> - <span><math><mtext mathvariant="bold-sans-serif">σ</mtext></math>=<span>1D782</span></span> - <span><math><mtext mathvariant="bold-sans-serif">τ</mtext></math>=<span>1D783</span></span> - <span><math><mtext mathvariant="bold-sans-serif">υ</mtext></math>=<span>1D784</span></span> - <span><math><mtext mathvariant="bold-sans-serif">φ</mtext></math>=<span>1D785</span></span><br/> - <span><math><mtext mathvariant="bold-sans-serif">χ</mtext></math>=<span>1D786</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ψ</mtext></math>=<span>1D787</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ω</mtext></math>=<span>1D788</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϑ</mtext></math>=<span>1D78B</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϕ</mtext></math>=<span>1D78D</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϖ</mtext></math>=<span>1D78F</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϰ</mtext></math>=<span>1D78C</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϱ</mtext></math>=<span>1D78E</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϴ</mtext></math>=<span>1D767</span></span> - <span><math><mtext mathvariant="bold-sans-serif">ϵ</mtext></math>=<span>1D78A</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">∂</mtext></math>=<span>1D789</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">∇</mtext></math>=<span>1D76F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">0</mtext></math>=<span>1D7EC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">1</mtext></math>=<span>1D7ED</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">2</mtext></math>=<span>1D7EE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">3</mtext></math>=<span>1D7EF</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">4</mtext></math>=<span>1D7F0</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">5</mtext></math>=<span>1D7F1</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">6</mtext></math>=<span>1D7F2</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">7</mtext></math>=<span>1D7F3</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">8</mtext></math>=<span>1D7F4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">9</mtext></math>=<span>1D7F5</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">A</mtext></math>=<span>1D5D4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">B</mtext></math>=<span>1D5D5</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">C</mtext></math>=<span>1D5D6</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">D</mtext></math>=<span>1D5D7</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">E</mtext></math>=<span>1D5D8</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">F</mtext></math>=<span>1D5D9</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">G</mtext></math>=<span>1D5DA</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">H</mtext></math>=<span>1D5DB</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">I</mtext></math>=<span>1D5DC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">J</mtext></math>=<span>1D5DD</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">K</mtext></math>=<span>1D5DE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">L</mtext></math>=<span>1D5DF</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">M</mtext></math>=<span>1D5E0</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">N</mtext></math>=<span>1D5E1</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">O</mtext></math>=<span>1D5E2</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">P</mtext></math>=<span>1D5E3</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Q</mtext></math>=<span>1D5E4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">R</mtext></math>=<span>1D5E5</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">S</mtext></math>=<span>1D5E6</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">T</mtext></math>=<span>1D5E7</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">U</mtext></math>=<span>1D5E8</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">V</mtext></math>=<span>1D5E9</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">W</mtext></math>=<span>1D5EA</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">X</mtext></math>=<span>1D5EB</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Y</mtext></math>=<span>1D5EC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Z</mtext></math>=<span>1D5ED</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">a</mtext></math>=<span>1D5EE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">b</mtext></math>=<span>1D5EF</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">c</mtext></math>=<span>1D5F0</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">d</mtext></math>=<span>1D5F1</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">e</mtext></math>=<span>1D5F2</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">f</mtext></math>=<span>1D5F3</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">g</mtext></math>=<span>1D5F4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">h</mtext></math>=<span>1D5F5</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">i</mtext></math>=<span>1D5F6</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">j</mtext></math>=<span>1D5F7</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">k</mtext></math>=<span>1D5F8</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">l</mtext></math>=<span>1D5F9</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">m</mtext></math>=<span>1D5FA</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">n</mtext></math>=<span>1D5FB</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">o</mtext></math>=<span>1D5FC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">p</mtext></math>=<span>1D5FD</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">q</mtext></math>=<span>1D5FE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">r</mtext></math>=<span>1D5FF</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">s</mtext></math>=<span>1D600</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">t</mtext></math>=<span>1D601</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">u</mtext></math>=<span>1D602</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">v</mtext></math>=<span>1D603</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">w</mtext></math>=<span>1D604</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">x</mtext></math>=<span>1D605</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">y</mtext></math>=<span>1D606</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">z</mtext></math>=<span>1D607</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Α</mtext></math>=<span>1D756</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Β</mtext></math>=<span>1D757</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Γ</mtext></math>=<span>1D758</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Δ</mtext></math>=<span>1D759</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ε</mtext></math>=<span>1D75A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ζ</mtext></math>=<span>1D75B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Η</mtext></math>=<span>1D75C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Θ</mtext></math>=<span>1D75D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ι</mtext></math>=<span>1D75E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Κ</mtext></math>=<span>1D75F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Λ</mtext></math>=<span>1D760</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Μ</mtext></math>=<span>1D761</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ν</mtext></math>=<span>1D762</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ξ</mtext></math>=<span>1D763</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ο</mtext></math>=<span>1D764</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Π</mtext></math>=<span>1D765</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ρ</mtext></math>=<span>1D766</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Σ</mtext></math>=<span>1D768</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Τ</mtext></math>=<span>1D769</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Υ</mtext></math>=<span>1D76A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Φ</mtext></math>=<span>1D76B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Χ</mtext></math>=<span>1D76C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ψ</mtext></math>=<span>1D76D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">Ω</mtext></math>=<span>1D76E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">α</mtext></math>=<span>1D770</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">β</mtext></math>=<span>1D771</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">γ</mtext></math>=<span>1D772</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">δ</mtext></math>=<span>1D773</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ε</mtext></math>=<span>1D774</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ζ</mtext></math>=<span>1D775</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">η</mtext></math>=<span>1D776</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">θ</mtext></math>=<span>1D777</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ι</mtext></math>=<span>1D778</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">κ</mtext></math>=<span>1D779</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">λ</mtext></math>=<span>1D77A</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">μ</mtext></math>=<span>1D77B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ν</mtext></math>=<span>1D77C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ξ</mtext></math>=<span>1D77D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ο</mtext></math>=<span>1D77E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">π</mtext></math>=<span>1D77F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ρ</mtext></math>=<span>1D780</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ς</mtext></math>=<span>1D781</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">σ</mtext></math>=<span>1D782</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">τ</mtext></math>=<span>1D783</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">υ</mtext></math>=<span>1D784</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">φ</mtext></math>=<span>1D785</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">χ</mtext></math>=<span>1D786</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ψ</mtext></math>=<span>1D787</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ω</mtext></math>=<span>1D788</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϑ</mtext></math>=<span>1D78B</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϕ</mtext></math>=<span>1D78D</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϖ</mtext></math>=<span>1D78F</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϰ</mtext></math>=<span>1D78C</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϱ</mtext></math>=<span>1D78E</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϴ</mtext></math>=<span>1D767</span></span> + <span><math class="testfont"><mtext mathvariant="bold-sans-serif">ϵ</mtext></math>=<span>1D78A</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script-ref.html index 4203861..ef11f7fb 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,57 +23,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝓐</mtext></math>=<span>1D4D0</span></span> - <span><math><mtext>𝓑</mtext></math>=<span>1D4D1</span></span> - <span><math><mtext>𝓒</mtext></math>=<span>1D4D2</span></span> - <span><math><mtext>𝓓</mtext></math>=<span>1D4D3</span></span> - <span><math><mtext>𝓔</mtext></math>=<span>1D4D4</span></span> - <span><math><mtext>𝓕</mtext></math>=<span>1D4D5</span></span> - <span><math><mtext>𝓖</mtext></math>=<span>1D4D6</span></span> - <span><math><mtext>𝓗</mtext></math>=<span>1D4D7</span></span> - <span><math><mtext>𝓘</mtext></math>=<span>1D4D8</span></span> - <span><math><mtext>𝓙</mtext></math>=<span>1D4D9</span></span><br/> - <span><math><mtext>𝓚</mtext></math>=<span>1D4DA</span></span> - <span><math><mtext>𝓛</mtext></math>=<span>1D4DB</span></span> - <span><math><mtext>𝓜</mtext></math>=<span>1D4DC</span></span> - <span><math><mtext>𝓝</mtext></math>=<span>1D4DD</span></span> - <span><math><mtext>𝓞</mtext></math>=<span>1D4DE</span></span> - <span><math><mtext>𝓟</mtext></math>=<span>1D4DF</span></span> - <span><math><mtext>𝓠</mtext></math>=<span>1D4E0</span></span> - <span><math><mtext>𝓡</mtext></math>=<span>1D4E1</span></span> - <span><math><mtext>𝓢</mtext></math>=<span>1D4E2</span></span> - <span><math><mtext>𝓣</mtext></math>=<span>1D4E3</span></span><br/> - <span><math><mtext>𝓤</mtext></math>=<span>1D4E4</span></span> - <span><math><mtext>𝓥</mtext></math>=<span>1D4E5</span></span> - <span><math><mtext>𝓦</mtext></math>=<span>1D4E6</span></span> - <span><math><mtext>𝓧</mtext></math>=<span>1D4E7</span></span> - <span><math><mtext>𝓨</mtext></math>=<span>1D4E8</span></span> - <span><math><mtext>𝓩</mtext></math>=<span>1D4E9</span></span> - <span><math><mtext>𝓪</mtext></math>=<span>1D4EA</span></span> - <span><math><mtext>𝓫</mtext></math>=<span>1D4EB</span></span> - <span><math><mtext>𝓬</mtext></math>=<span>1D4EC</span></span> - <span><math><mtext>𝓭</mtext></math>=<span>1D4ED</span></span><br/> - <span><math><mtext>𝓮</mtext></math>=<span>1D4EE</span></span> - <span><math><mtext>𝓯</mtext></math>=<span>1D4EF</span></span> - <span><math><mtext>𝓰</mtext></math>=<span>1D4F0</span></span> - <span><math><mtext>𝓱</mtext></math>=<span>1D4F1</span></span> - <span><math><mtext>𝓲</mtext></math>=<span>1D4F2</span></span> - <span><math><mtext>𝓳</mtext></math>=<span>1D4F3</span></span> - <span><math><mtext>𝓴</mtext></math>=<span>1D4F4</span></span> - <span><math><mtext>𝓵</mtext></math>=<span>1D4F5</span></span> - <span><math><mtext>𝓶</mtext></math>=<span>1D4F6</span></span> - <span><math><mtext>𝓷</mtext></math>=<span>1D4F7</span></span><br/> - <span><math><mtext>𝓸</mtext></math>=<span>1D4F8</span></span> - <span><math><mtext>𝓹</mtext></math>=<span>1D4F9</span></span> - <span><math><mtext>𝓺</mtext></math>=<span>1D4FA</span></span> - <span><math><mtext>𝓻</mtext></math>=<span>1D4FB</span></span> - <span><math><mtext>𝓼</mtext></math>=<span>1D4FC</span></span> - <span><math><mtext>𝓽</mtext></math>=<span>1D4FD</span></span> - <span><math><mtext>𝓾</mtext></math>=<span>1D4FE</span></span> - <span><math><mtext>𝓿</mtext></math>=<span>1D4FF</span></span> - <span><math><mtext>𝔀</mtext></math>=<span>1D500</span></span> - <span><math><mtext>𝔁</mtext></math>=<span>1D501</span></span><br/> - <span><math><mtext>𝔂</mtext></math>=<span>1D502</span></span> - <span><math><mtext>𝔃</mtext></math>=<span>1D503</span></span> + <span><math class="testfont"><mtext>𝓐</mtext></math>=<span>1D4D0</span></span> + <span><math class="testfont"><mtext>𝓑</mtext></math>=<span>1D4D1</span></span> + <span><math class="testfont"><mtext>𝓒</mtext></math>=<span>1D4D2</span></span> + <span><math class="testfont"><mtext>𝓓</mtext></math>=<span>1D4D3</span></span> + <span><math class="testfont"><mtext>𝓔</mtext></math>=<span>1D4D4</span></span> + <span><math class="testfont"><mtext>𝓕</mtext></math>=<span>1D4D5</span></span> + <span><math class="testfont"><mtext>𝓖</mtext></math>=<span>1D4D6</span></span> + <span><math class="testfont"><mtext>𝓗</mtext></math>=<span>1D4D7</span></span> + <span><math class="testfont"><mtext>𝓘</mtext></math>=<span>1D4D8</span></span> + <span><math class="testfont"><mtext>𝓙</mtext></math>=<span>1D4D9</span></span><br/> + <span><math class="testfont"><mtext>𝓚</mtext></math>=<span>1D4DA</span></span> + <span><math class="testfont"><mtext>𝓛</mtext></math>=<span>1D4DB</span></span> + <span><math class="testfont"><mtext>𝓜</mtext></math>=<span>1D4DC</span></span> + <span><math class="testfont"><mtext>𝓝</mtext></math>=<span>1D4DD</span></span> + <span><math class="testfont"><mtext>𝓞</mtext></math>=<span>1D4DE</span></span> + <span><math class="testfont"><mtext>𝓟</mtext></math>=<span>1D4DF</span></span> + <span><math class="testfont"><mtext>𝓠</mtext></math>=<span>1D4E0</span></span> + <span><math class="testfont"><mtext>𝓡</mtext></math>=<span>1D4E1</span></span> + <span><math class="testfont"><mtext>𝓢</mtext></math>=<span>1D4E2</span></span> + <span><math class="testfont"><mtext>𝓣</mtext></math>=<span>1D4E3</span></span><br/> + <span><math class="testfont"><mtext>𝓤</mtext></math>=<span>1D4E4</span></span> + <span><math class="testfont"><mtext>𝓥</mtext></math>=<span>1D4E5</span></span> + <span><math class="testfont"><mtext>𝓦</mtext></math>=<span>1D4E6</span></span> + <span><math class="testfont"><mtext>𝓧</mtext></math>=<span>1D4E7</span></span> + <span><math class="testfont"><mtext>𝓨</mtext></math>=<span>1D4E8</span></span> + <span><math class="testfont"><mtext>𝓩</mtext></math>=<span>1D4E9</span></span> + <span><math class="testfont"><mtext>𝓪</mtext></math>=<span>1D4EA</span></span> + <span><math class="testfont"><mtext>𝓫</mtext></math>=<span>1D4EB</span></span> + <span><math class="testfont"><mtext>𝓬</mtext></math>=<span>1D4EC</span></span> + <span><math class="testfont"><mtext>𝓭</mtext></math>=<span>1D4ED</span></span><br/> + <span><math class="testfont"><mtext>𝓮</mtext></math>=<span>1D4EE</span></span> + <span><math class="testfont"><mtext>𝓯</mtext></math>=<span>1D4EF</span></span> + <span><math class="testfont"><mtext>𝓰</mtext></math>=<span>1D4F0</span></span> + <span><math class="testfont"><mtext>𝓱</mtext></math>=<span>1D4F1</span></span> + <span><math class="testfont"><mtext>𝓲</mtext></math>=<span>1D4F2</span></span> + <span><math class="testfont"><mtext>𝓳</mtext></math>=<span>1D4F3</span></span> + <span><math class="testfont"><mtext>𝓴</mtext></math>=<span>1D4F4</span></span> + <span><math class="testfont"><mtext>𝓵</mtext></math>=<span>1D4F5</span></span> + <span><math class="testfont"><mtext>𝓶</mtext></math>=<span>1D4F6</span></span> + <span><math class="testfont"><mtext>𝓷</mtext></math>=<span>1D4F7</span></span><br/> + <span><math class="testfont"><mtext>𝓸</mtext></math>=<span>1D4F8</span></span> + <span><math class="testfont"><mtext>𝓹</mtext></math>=<span>1D4F9</span></span> + <span><math class="testfont"><mtext>𝓺</mtext></math>=<span>1D4FA</span></span> + <span><math class="testfont"><mtext>𝓻</mtext></math>=<span>1D4FB</span></span> + <span><math class="testfont"><mtext>𝓼</mtext></math>=<span>1D4FC</span></span> + <span><math class="testfont"><mtext>𝓽</mtext></math>=<span>1D4FD</span></span> + <span><math class="testfont"><mtext>𝓾</mtext></math>=<span>1D4FE</span></span> + <span><math class="testfont"><mtext>𝓿</mtext></math>=<span>1D4FF</span></span> + <span><math class="testfont"><mtext>𝔀</mtext></math>=<span>1D500</span></span> + <span><math class="testfont"><mtext>𝔁</mtext></math>=<span>1D501</span></span><br/> + <span><math class="testfont"><mtext>𝔂</mtext></math>=<span>1D502</span></span> + <span><math class="testfont"><mtext>𝔃</mtext></math>=<span>1D503</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html index 8ff7556da..47cf016 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold-script.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,57 +28,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="bold-script">A</mtext></math>=<span>1D4D0</span></span> - <span><math><mtext mathvariant="bold-script">B</mtext></math>=<span>1D4D1</span></span> - <span><math><mtext mathvariant="bold-script">C</mtext></math>=<span>1D4D2</span></span> - <span><math><mtext mathvariant="bold-script">D</mtext></math>=<span>1D4D3</span></span> - <span><math><mtext mathvariant="bold-script">E</mtext></math>=<span>1D4D4</span></span> - <span><math><mtext mathvariant="bold-script">F</mtext></math>=<span>1D4D5</span></span> - <span><math><mtext mathvariant="bold-script">G</mtext></math>=<span>1D4D6</span></span> - <span><math><mtext mathvariant="bold-script">H</mtext></math>=<span>1D4D7</span></span> - <span><math><mtext mathvariant="bold-script">I</mtext></math>=<span>1D4D8</span></span> - <span><math><mtext mathvariant="bold-script">J</mtext></math>=<span>1D4D9</span></span><br/> - <span><math><mtext mathvariant="bold-script">K</mtext></math>=<span>1D4DA</span></span> - <span><math><mtext mathvariant="bold-script">L</mtext></math>=<span>1D4DB</span></span> - <span><math><mtext mathvariant="bold-script">M</mtext></math>=<span>1D4DC</span></span> - <span><math><mtext mathvariant="bold-script">N</mtext></math>=<span>1D4DD</span></span> - <span><math><mtext mathvariant="bold-script">O</mtext></math>=<span>1D4DE</span></span> - <span><math><mtext mathvariant="bold-script">P</mtext></math>=<span>1D4DF</span></span> - <span><math><mtext mathvariant="bold-script">Q</mtext></math>=<span>1D4E0</span></span> - <span><math><mtext mathvariant="bold-script">R</mtext></math>=<span>1D4E1</span></span> - <span><math><mtext mathvariant="bold-script">S</mtext></math>=<span>1D4E2</span></span> - <span><math><mtext mathvariant="bold-script">T</mtext></math>=<span>1D4E3</span></span><br/> - <span><math><mtext mathvariant="bold-script">U</mtext></math>=<span>1D4E4</span></span> - <span><math><mtext mathvariant="bold-script">V</mtext></math>=<span>1D4E5</span></span> - <span><math><mtext mathvariant="bold-script">W</mtext></math>=<span>1D4E6</span></span> - <span><math><mtext mathvariant="bold-script">X</mtext></math>=<span>1D4E7</span></span> - <span><math><mtext mathvariant="bold-script">Y</mtext></math>=<span>1D4E8</span></span> - <span><math><mtext mathvariant="bold-script">Z</mtext></math>=<span>1D4E9</span></span> - <span><math><mtext mathvariant="bold-script">a</mtext></math>=<span>1D4EA</span></span> - <span><math><mtext mathvariant="bold-script">b</mtext></math>=<span>1D4EB</span></span> - <span><math><mtext mathvariant="bold-script">c</mtext></math>=<span>1D4EC</span></span> - <span><math><mtext mathvariant="bold-script">d</mtext></math>=<span>1D4ED</span></span><br/> - <span><math><mtext mathvariant="bold-script">e</mtext></math>=<span>1D4EE</span></span> - <span><math><mtext mathvariant="bold-script">f</mtext></math>=<span>1D4EF</span></span> - <span><math><mtext mathvariant="bold-script">g</mtext></math>=<span>1D4F0</span></span> - <span><math><mtext mathvariant="bold-script">h</mtext></math>=<span>1D4F1</span></span> - <span><math><mtext mathvariant="bold-script">i</mtext></math>=<span>1D4F2</span></span> - <span><math><mtext mathvariant="bold-script">j</mtext></math>=<span>1D4F3</span></span> - <span><math><mtext mathvariant="bold-script">k</mtext></math>=<span>1D4F4</span></span> - <span><math><mtext mathvariant="bold-script">l</mtext></math>=<span>1D4F5</span></span> - <span><math><mtext mathvariant="bold-script">m</mtext></math>=<span>1D4F6</span></span> - <span><math><mtext mathvariant="bold-script">n</mtext></math>=<span>1D4F7</span></span><br/> - <span><math><mtext mathvariant="bold-script">o</mtext></math>=<span>1D4F8</span></span> - <span><math><mtext mathvariant="bold-script">p</mtext></math>=<span>1D4F9</span></span> - <span><math><mtext mathvariant="bold-script">q</mtext></math>=<span>1D4FA</span></span> - <span><math><mtext mathvariant="bold-script">r</mtext></math>=<span>1D4FB</span></span> - <span><math><mtext mathvariant="bold-script">s</mtext></math>=<span>1D4FC</span></span> - <span><math><mtext mathvariant="bold-script">t</mtext></math>=<span>1D4FD</span></span> - <span><math><mtext mathvariant="bold-script">u</mtext></math>=<span>1D4FE</span></span> - <span><math><mtext mathvariant="bold-script">v</mtext></math>=<span>1D4FF</span></span> - <span><math><mtext mathvariant="bold-script">w</mtext></math>=<span>1D500</span></span> - <span><math><mtext mathvariant="bold-script">x</mtext></math>=<span>1D501</span></span><br/> - <span><math><mtext mathvariant="bold-script">y</mtext></math>=<span>1D502</span></span> - <span><math><mtext mathvariant="bold-script">z</mtext></math>=<span>1D503</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">A</mtext></math>=<span>1D4D0</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">B</mtext></math>=<span>1D4D1</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">C</mtext></math>=<span>1D4D2</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">D</mtext></math>=<span>1D4D3</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">E</mtext></math>=<span>1D4D4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">F</mtext></math>=<span>1D4D5</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">G</mtext></math>=<span>1D4D6</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">H</mtext></math>=<span>1D4D7</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">I</mtext></math>=<span>1D4D8</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">J</mtext></math>=<span>1D4D9</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-script">K</mtext></math>=<span>1D4DA</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">L</mtext></math>=<span>1D4DB</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">M</mtext></math>=<span>1D4DC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">N</mtext></math>=<span>1D4DD</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">O</mtext></math>=<span>1D4DE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">P</mtext></math>=<span>1D4DF</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">Q</mtext></math>=<span>1D4E0</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">R</mtext></math>=<span>1D4E1</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">S</mtext></math>=<span>1D4E2</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">T</mtext></math>=<span>1D4E3</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-script">U</mtext></math>=<span>1D4E4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">V</mtext></math>=<span>1D4E5</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">W</mtext></math>=<span>1D4E6</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">X</mtext></math>=<span>1D4E7</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">Y</mtext></math>=<span>1D4E8</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">Z</mtext></math>=<span>1D4E9</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">a</mtext></math>=<span>1D4EA</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">b</mtext></math>=<span>1D4EB</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">c</mtext></math>=<span>1D4EC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">d</mtext></math>=<span>1D4ED</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-script">e</mtext></math>=<span>1D4EE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">f</mtext></math>=<span>1D4EF</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">g</mtext></math>=<span>1D4F0</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">h</mtext></math>=<span>1D4F1</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">i</mtext></math>=<span>1D4F2</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">j</mtext></math>=<span>1D4F3</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">k</mtext></math>=<span>1D4F4</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">l</mtext></math>=<span>1D4F5</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">m</mtext></math>=<span>1D4F6</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">n</mtext></math>=<span>1D4F7</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-script">o</mtext></math>=<span>1D4F8</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">p</mtext></math>=<span>1D4F9</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">q</mtext></math>=<span>1D4FA</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">r</mtext></math>=<span>1D4FB</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">s</mtext></math>=<span>1D4FC</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">t</mtext></math>=<span>1D4FD</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">u</mtext></math>=<span>1D4FE</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">v</mtext></math>=<span>1D4FF</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">w</mtext></math>=<span>1D500</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">x</mtext></math>=<span>1D501</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold-script">y</mtext></math>=<span>1D502</span></span> + <span><math class="testfont"><mtext mathvariant="bold-script">z</mtext></math>=<span>1D503</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html index f11594f..a14fadf 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-bold.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,127 +28,127 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="bold">∂</mtext></math>=<span>1D6DB</span></span> - <span><math><mtext mathvariant="bold">∇</mtext></math>=<span>1D6C1</span></span> - <span><math><mtext mathvariant="bold">0</mtext></math>=<span>1D7CE</span></span> - <span><math><mtext mathvariant="bold">1</mtext></math>=<span>1D7CF</span></span> - <span><math><mtext mathvariant="bold">2</mtext></math>=<span>1D7D0</span></span> - <span><math><mtext mathvariant="bold">3</mtext></math>=<span>1D7D1</span></span> - <span><math><mtext mathvariant="bold">4</mtext></math>=<span>1D7D2</span></span> - <span><math><mtext mathvariant="bold">5</mtext></math>=<span>1D7D3</span></span> - <span><math><mtext mathvariant="bold">6</mtext></math>=<span>1D7D4</span></span> - <span><math><mtext mathvariant="bold">7</mtext></math>=<span>1D7D5</span></span><br/> - <span><math><mtext mathvariant="bold">8</mtext></math>=<span>1D7D6</span></span> - <span><math><mtext mathvariant="bold">9</mtext></math>=<span>1D7D7</span></span> - <span><math><mtext mathvariant="bold">A</mtext></math>=<span>1D400</span></span> - <span><math><mtext mathvariant="bold">B</mtext></math>=<span>1D401</span></span> - <span><math><mtext mathvariant="bold">C</mtext></math>=<span>1D402</span></span> - <span><math><mtext mathvariant="bold">D</mtext></math>=<span>1D403</span></span> - <span><math><mtext mathvariant="bold">E</mtext></math>=<span>1D404</span></span> - <span><math><mtext mathvariant="bold">F</mtext></math>=<span>1D405</span></span> - <span><math><mtext mathvariant="bold">G</mtext></math>=<span>1D406</span></span> - <span><math><mtext mathvariant="bold">H</mtext></math>=<span>1D407</span></span><br/> - <span><math><mtext mathvariant="bold">I</mtext></math>=<span>1D408</span></span> - <span><math><mtext mathvariant="bold">J</mtext></math>=<span>1D409</span></span> - <span><math><mtext mathvariant="bold">K</mtext></math>=<span>1D40A</span></span> - <span><math><mtext mathvariant="bold">L</mtext></math>=<span>1D40B</span></span> - <span><math><mtext mathvariant="bold">M</mtext></math>=<span>1D40C</span></span> - <span><math><mtext mathvariant="bold">N</mtext></math>=<span>1D40D</span></span> - <span><math><mtext mathvariant="bold">O</mtext></math>=<span>1D40E</span></span> - <span><math><mtext mathvariant="bold">P</mtext></math>=<span>1D40F</span></span> - <span><math><mtext mathvariant="bold">Q</mtext></math>=<span>1D410</span></span> - <span><math><mtext mathvariant="bold">R</mtext></math>=<span>1D411</span></span><br/> - <span><math><mtext mathvariant="bold">S</mtext></math>=<span>1D412</span></span> - <span><math><mtext mathvariant="bold">T</mtext></math>=<span>1D413</span></span> - <span><math><mtext mathvariant="bold">U</mtext></math>=<span>1D414</span></span> - <span><math><mtext mathvariant="bold">V</mtext></math>=<span>1D415</span></span> - <span><math><mtext mathvariant="bold">W</mtext></math>=<span>1D416</span></span> - <span><math><mtext mathvariant="bold">X</mtext></math>=<span>1D417</span></span> - <span><math><mtext mathvariant="bold">Y</mtext></math>=<span>1D418</span></span> - <span><math><mtext mathvariant="bold">Z</mtext></math>=<span>1D419</span></span> - <span><math><mtext mathvariant="bold">a</mtext></math>=<span>1D41A</span></span> - <span><math><mtext mathvariant="bold">b</mtext></math>=<span>1D41B</span></span><br/> - <span><math><mtext mathvariant="bold">c</mtext></math>=<span>1D41C</span></span> - <span><math><mtext mathvariant="bold">d</mtext></math>=<span>1D41D</span></span> - <span><math><mtext mathvariant="bold">e</mtext></math>=<span>1D41E</span></span> - <span><math><mtext mathvariant="bold">f</mtext></math>=<span>1D41F</span></span> - <span><math><mtext mathvariant="bold">g</mtext></math>=<span>1D420</span></span> - <span><math><mtext mathvariant="bold">h</mtext></math>=<span>1D421</span></span> - <span><math><mtext mathvariant="bold">i</mtext></math>=<span>1D422</span></span> - <span><math><mtext mathvariant="bold">j</mtext></math>=<span>1D423</span></span> - <span><math><mtext mathvariant="bold">k</mtext></math>=<span>1D424</span></span> - <span><math><mtext mathvariant="bold">l</mtext></math>=<span>1D425</span></span><br/> - <span><math><mtext mathvariant="bold">m</mtext></math>=<span>1D426</span></span> - <span><math><mtext mathvariant="bold">n</mtext></math>=<span>1D427</span></span> - <span><math><mtext mathvariant="bold">o</mtext></math>=<span>1D428</span></span> - <span><math><mtext mathvariant="bold">p</mtext></math>=<span>1D429</span></span> - <span><math><mtext mathvariant="bold">q</mtext></math>=<span>1D42A</span></span> - <span><math><mtext mathvariant="bold">r</mtext></math>=<span>1D42B</span></span> - <span><math><mtext mathvariant="bold">s</mtext></math>=<span>1D42C</span></span> - <span><math><mtext mathvariant="bold">t</mtext></math>=<span>1D42D</span></span> - <span><math><mtext mathvariant="bold">u</mtext></math>=<span>1D42E</span></span> - <span><math><mtext mathvariant="bold">v</mtext></math>=<span>1D42F</span></span><br/> - <span><math><mtext mathvariant="bold">w</mtext></math>=<span>1D430</span></span> - <span><math><mtext mathvariant="bold">x</mtext></math>=<span>1D431</span></span> - <span><math><mtext mathvariant="bold">y</mtext></math>=<span>1D432</span></span> - <span><math><mtext mathvariant="bold">z</mtext></math>=<span>1D433</span></span> - <span><math><mtext mathvariant="bold">Α</mtext></math>=<span>1D6A8</span></span> - <span><math><mtext mathvariant="bold">Β</mtext></math>=<span>1D6A9</span></span> - <span><math><mtext mathvariant="bold">Γ</mtext></math>=<span>1D6AA</span></span> - <span><math><mtext mathvariant="bold">Δ</mtext></math>=<span>1D6AB</span></span> - <span><math><mtext mathvariant="bold">Ε</mtext></math>=<span>1D6AC</span></span> - <span><math><mtext mathvariant="bold">Ζ</mtext></math>=<span>1D6AD</span></span><br/> - <span><math><mtext mathvariant="bold">Η</mtext></math>=<span>1D6AE</span></span> - <span><math><mtext mathvariant="bold">Θ</mtext></math>=<span>1D6AF</span></span> - <span><math><mtext mathvariant="bold">Ι</mtext></math>=<span>1D6B0</span></span> - <span><math><mtext mathvariant="bold">Κ</mtext></math>=<span>1D6B1</span></span> - <span><math><mtext mathvariant="bold">Λ</mtext></math>=<span>1D6B2</span></span> - <span><math><mtext mathvariant="bold">Μ</mtext></math>=<span>1D6B3</span></span> - <span><math><mtext mathvariant="bold">Ν</mtext></math>=<span>1D6B4</span></span> - <span><math><mtext mathvariant="bold">Ξ</mtext></math>=<span>1D6B5</span></span> - <span><math><mtext mathvariant="bold">Ο</mtext></math>=<span>1D6B6</span></span> - <span><math><mtext mathvariant="bold">Π</mtext></math>=<span>1D6B7</span></span><br/> - <span><math><mtext mathvariant="bold">Ρ</mtext></math>=<span>1D6B8</span></span> - <span><math><mtext mathvariant="bold">Σ</mtext></math>=<span>1D6BA</span></span> - <span><math><mtext mathvariant="bold">Τ</mtext></math>=<span>1D6BB</span></span> - <span><math><mtext mathvariant="bold">Υ</mtext></math>=<span>1D6BC</span></span> - <span><math><mtext mathvariant="bold">Φ</mtext></math>=<span>1D6BD</span></span> - <span><math><mtext mathvariant="bold">Χ</mtext></math>=<span>1D6BE</span></span> - <span><math><mtext mathvariant="bold">Ψ</mtext></math>=<span>1D6BF</span></span> - <span><math><mtext mathvariant="bold">Ω</mtext></math>=<span>1D6C0</span></span> - <span><math><mtext mathvariant="bold">α</mtext></math>=<span>1D6C2</span></span> - <span><math><mtext mathvariant="bold">β</mtext></math>=<span>1D6C3</span></span><br/> - <span><math><mtext mathvariant="bold">γ</mtext></math>=<span>1D6C4</span></span> - <span><math><mtext mathvariant="bold">δ</mtext></math>=<span>1D6C5</span></span> - <span><math><mtext mathvariant="bold">ε</mtext></math>=<span>1D6C6</span></span> - <span><math><mtext mathvariant="bold">ζ</mtext></math>=<span>1D6C7</span></span> - <span><math><mtext mathvariant="bold">η</mtext></math>=<span>1D6C8</span></span> - <span><math><mtext mathvariant="bold">θ</mtext></math>=<span>1D6C9</span></span> - <span><math><mtext mathvariant="bold">ι</mtext></math>=<span>1D6CA</span></span> - <span><math><mtext mathvariant="bold">κ</mtext></math>=<span>1D6CB</span></span> - <span><math><mtext mathvariant="bold">λ</mtext></math>=<span>1D6CC</span></span> - <span><math><mtext mathvariant="bold">μ</mtext></math>=<span>1D6CD</span></span><br/> - <span><math><mtext mathvariant="bold">ν</mtext></math>=<span>1D6CE</span></span> - <span><math><mtext mathvariant="bold">ξ</mtext></math>=<span>1D6CF</span></span> - <span><math><mtext mathvariant="bold">ο</mtext></math>=<span>1D6D0</span></span> - <span><math><mtext mathvariant="bold">π</mtext></math>=<span>1D6D1</span></span> - <span><math><mtext mathvariant="bold">ρ</mtext></math>=<span>1D6D2</span></span> - <span><math><mtext mathvariant="bold">ς</mtext></math>=<span>1D6D3</span></span> - <span><math><mtext mathvariant="bold">σ</mtext></math>=<span>1D6D4</span></span> - <span><math><mtext mathvariant="bold">τ</mtext></math>=<span>1D6D5</span></span> - <span><math><mtext mathvariant="bold">υ</mtext></math>=<span>1D6D6</span></span> - <span><math><mtext mathvariant="bold">φ</mtext></math>=<span>1D6D7</span></span><br/> - <span><math><mtext mathvariant="bold">χ</mtext></math>=<span>1D6D8</span></span> - <span><math><mtext mathvariant="bold">ψ</mtext></math>=<span>1D6D9</span></span> - <span><math><mtext mathvariant="bold">ω</mtext></math>=<span>1D6DA</span></span> - <span><math><mtext mathvariant="bold">ϑ</mtext></math>=<span>1D6DD</span></span> - <span><math><mtext mathvariant="bold">ϕ</mtext></math>=<span>1D6DF</span></span> - <span><math><mtext mathvariant="bold">ϖ</mtext></math>=<span>1D6E1</span></span> - <span><math><mtext mathvariant="bold">Ϝ</mtext></math>=<span>1D7CA</span></span> - <span><math><mtext mathvariant="bold">ϝ</mtext></math>=<span>1D7CB</span></span> - <span><math><mtext mathvariant="bold">ϰ</mtext></math>=<span>1D6DE</span></span> - <span><math><mtext mathvariant="bold">ϱ</mtext></math>=<span>1D6E0</span></span><br/> - <span><math><mtext mathvariant="bold">ϴ</mtext></math>=<span>1D6B9</span></span> - <span><math><mtext mathvariant="bold">ϵ</mtext></math>=<span>1D6DC</span></span> + <span><math class="testfont"><mtext mathvariant="bold">∂</mtext></math>=<span>1D6DB</span></span> + <span><math class="testfont"><mtext mathvariant="bold">∇</mtext></math>=<span>1D6C1</span></span> + <span><math class="testfont"><mtext mathvariant="bold">0</mtext></math>=<span>1D7CE</span></span> + <span><math class="testfont"><mtext mathvariant="bold">1</mtext></math>=<span>1D7CF</span></span> + <span><math class="testfont"><mtext mathvariant="bold">2</mtext></math>=<span>1D7D0</span></span> + <span><math class="testfont"><mtext mathvariant="bold">3</mtext></math>=<span>1D7D1</span></span> + <span><math class="testfont"><mtext mathvariant="bold">4</mtext></math>=<span>1D7D2</span></span> + <span><math class="testfont"><mtext mathvariant="bold">5</mtext></math>=<span>1D7D3</span></span> + <span><math class="testfont"><mtext mathvariant="bold">6</mtext></math>=<span>1D7D4</span></span> + <span><math class="testfont"><mtext mathvariant="bold">7</mtext></math>=<span>1D7D5</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">8</mtext></math>=<span>1D7D6</span></span> + <span><math class="testfont"><mtext mathvariant="bold">9</mtext></math>=<span>1D7D7</span></span> + <span><math class="testfont"><mtext mathvariant="bold">A</mtext></math>=<span>1D400</span></span> + <span><math class="testfont"><mtext mathvariant="bold">B</mtext></math>=<span>1D401</span></span> + <span><math class="testfont"><mtext mathvariant="bold">C</mtext></math>=<span>1D402</span></span> + <span><math class="testfont"><mtext mathvariant="bold">D</mtext></math>=<span>1D403</span></span> + <span><math class="testfont"><mtext mathvariant="bold">E</mtext></math>=<span>1D404</span></span> + <span><math class="testfont"><mtext mathvariant="bold">F</mtext></math>=<span>1D405</span></span> + <span><math class="testfont"><mtext mathvariant="bold">G</mtext></math>=<span>1D406</span></span> + <span><math class="testfont"><mtext mathvariant="bold">H</mtext></math>=<span>1D407</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">I</mtext></math>=<span>1D408</span></span> + <span><math class="testfont"><mtext mathvariant="bold">J</mtext></math>=<span>1D409</span></span> + <span><math class="testfont"><mtext mathvariant="bold">K</mtext></math>=<span>1D40A</span></span> + <span><math class="testfont"><mtext mathvariant="bold">L</mtext></math>=<span>1D40B</span></span> + <span><math class="testfont"><mtext mathvariant="bold">M</mtext></math>=<span>1D40C</span></span> + <span><math class="testfont"><mtext mathvariant="bold">N</mtext></math>=<span>1D40D</span></span> + <span><math class="testfont"><mtext mathvariant="bold">O</mtext></math>=<span>1D40E</span></span> + <span><math class="testfont"><mtext mathvariant="bold">P</mtext></math>=<span>1D40F</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Q</mtext></math>=<span>1D410</span></span> + <span><math class="testfont"><mtext mathvariant="bold">R</mtext></math>=<span>1D411</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">S</mtext></math>=<span>1D412</span></span> + <span><math class="testfont"><mtext mathvariant="bold">T</mtext></math>=<span>1D413</span></span> + <span><math class="testfont"><mtext mathvariant="bold">U</mtext></math>=<span>1D414</span></span> + <span><math class="testfont"><mtext mathvariant="bold">V</mtext></math>=<span>1D415</span></span> + <span><math class="testfont"><mtext mathvariant="bold">W</mtext></math>=<span>1D416</span></span> + <span><math class="testfont"><mtext mathvariant="bold">X</mtext></math>=<span>1D417</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Y</mtext></math>=<span>1D418</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Z</mtext></math>=<span>1D419</span></span> + <span><math class="testfont"><mtext mathvariant="bold">a</mtext></math>=<span>1D41A</span></span> + <span><math class="testfont"><mtext mathvariant="bold">b</mtext></math>=<span>1D41B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">c</mtext></math>=<span>1D41C</span></span> + <span><math class="testfont"><mtext mathvariant="bold">d</mtext></math>=<span>1D41D</span></span> + <span><math class="testfont"><mtext mathvariant="bold">e</mtext></math>=<span>1D41E</span></span> + <span><math class="testfont"><mtext mathvariant="bold">f</mtext></math>=<span>1D41F</span></span> + <span><math class="testfont"><mtext mathvariant="bold">g</mtext></math>=<span>1D420</span></span> + <span><math class="testfont"><mtext mathvariant="bold">h</mtext></math>=<span>1D421</span></span> + <span><math class="testfont"><mtext mathvariant="bold">i</mtext></math>=<span>1D422</span></span> + <span><math class="testfont"><mtext mathvariant="bold">j</mtext></math>=<span>1D423</span></span> + <span><math class="testfont"><mtext mathvariant="bold">k</mtext></math>=<span>1D424</span></span> + <span><math class="testfont"><mtext mathvariant="bold">l</mtext></math>=<span>1D425</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">m</mtext></math>=<span>1D426</span></span> + <span><math class="testfont"><mtext mathvariant="bold">n</mtext></math>=<span>1D427</span></span> + <span><math class="testfont"><mtext mathvariant="bold">o</mtext></math>=<span>1D428</span></span> + <span><math class="testfont"><mtext mathvariant="bold">p</mtext></math>=<span>1D429</span></span> + <span><math class="testfont"><mtext mathvariant="bold">q</mtext></math>=<span>1D42A</span></span> + <span><math class="testfont"><mtext mathvariant="bold">r</mtext></math>=<span>1D42B</span></span> + <span><math class="testfont"><mtext mathvariant="bold">s</mtext></math>=<span>1D42C</span></span> + <span><math class="testfont"><mtext mathvariant="bold">t</mtext></math>=<span>1D42D</span></span> + <span><math class="testfont"><mtext mathvariant="bold">u</mtext></math>=<span>1D42E</span></span> + <span><math class="testfont"><mtext mathvariant="bold">v</mtext></math>=<span>1D42F</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">w</mtext></math>=<span>1D430</span></span> + <span><math class="testfont"><mtext mathvariant="bold">x</mtext></math>=<span>1D431</span></span> + <span><math class="testfont"><mtext mathvariant="bold">y</mtext></math>=<span>1D432</span></span> + <span><math class="testfont"><mtext mathvariant="bold">z</mtext></math>=<span>1D433</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Α</mtext></math>=<span>1D6A8</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Β</mtext></math>=<span>1D6A9</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Γ</mtext></math>=<span>1D6AA</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Δ</mtext></math>=<span>1D6AB</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ε</mtext></math>=<span>1D6AC</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ζ</mtext></math>=<span>1D6AD</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">Η</mtext></math>=<span>1D6AE</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Θ</mtext></math>=<span>1D6AF</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ι</mtext></math>=<span>1D6B0</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Κ</mtext></math>=<span>1D6B1</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Λ</mtext></math>=<span>1D6B2</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Μ</mtext></math>=<span>1D6B3</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ν</mtext></math>=<span>1D6B4</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ξ</mtext></math>=<span>1D6B5</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ο</mtext></math>=<span>1D6B6</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Π</mtext></math>=<span>1D6B7</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">Ρ</mtext></math>=<span>1D6B8</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Σ</mtext></math>=<span>1D6BA</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Τ</mtext></math>=<span>1D6BB</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Υ</mtext></math>=<span>1D6BC</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Φ</mtext></math>=<span>1D6BD</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Χ</mtext></math>=<span>1D6BE</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ψ</mtext></math>=<span>1D6BF</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ω</mtext></math>=<span>1D6C0</span></span> + <span><math class="testfont"><mtext mathvariant="bold">α</mtext></math>=<span>1D6C2</span></span> + <span><math class="testfont"><mtext mathvariant="bold">β</mtext></math>=<span>1D6C3</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">γ</mtext></math>=<span>1D6C4</span></span> + <span><math class="testfont"><mtext mathvariant="bold">δ</mtext></math>=<span>1D6C5</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ε</mtext></math>=<span>1D6C6</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ζ</mtext></math>=<span>1D6C7</span></span> + <span><math class="testfont"><mtext mathvariant="bold">η</mtext></math>=<span>1D6C8</span></span> + <span><math class="testfont"><mtext mathvariant="bold">θ</mtext></math>=<span>1D6C9</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ι</mtext></math>=<span>1D6CA</span></span> + <span><math class="testfont"><mtext mathvariant="bold">κ</mtext></math>=<span>1D6CB</span></span> + <span><math class="testfont"><mtext mathvariant="bold">λ</mtext></math>=<span>1D6CC</span></span> + <span><math class="testfont"><mtext mathvariant="bold">μ</mtext></math>=<span>1D6CD</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">ν</mtext></math>=<span>1D6CE</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ξ</mtext></math>=<span>1D6CF</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ο</mtext></math>=<span>1D6D0</span></span> + <span><math class="testfont"><mtext mathvariant="bold">π</mtext></math>=<span>1D6D1</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ρ</mtext></math>=<span>1D6D2</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ς</mtext></math>=<span>1D6D3</span></span> + <span><math class="testfont"><mtext mathvariant="bold">σ</mtext></math>=<span>1D6D4</span></span> + <span><math class="testfont"><mtext mathvariant="bold">τ</mtext></math>=<span>1D6D5</span></span> + <span><math class="testfont"><mtext mathvariant="bold">υ</mtext></math>=<span>1D6D6</span></span> + <span><math class="testfont"><mtext mathvariant="bold">φ</mtext></math>=<span>1D6D7</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">χ</mtext></math>=<span>1D6D8</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ψ</mtext></math>=<span>1D6D9</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ω</mtext></math>=<span>1D6DA</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϑ</mtext></math>=<span>1D6DD</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϕ</mtext></math>=<span>1D6DF</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϖ</mtext></math>=<span>1D6E1</span></span> + <span><math class="testfont"><mtext mathvariant="bold">Ϝ</mtext></math>=<span>1D7CA</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϝ</mtext></math>=<span>1D7CB</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϰ</mtext></math>=<span>1D6DE</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϱ</mtext></math>=<span>1D6E0</span></span><br/> + <span><math class="testfont"><mtext mathvariant="bold">ϴ</mtext></math>=<span>1D6B9</span></span> + <span><math class="testfont"><mtext mathvariant="bold">ϵ</mtext></math>=<span>1D6DC</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck-ref.html index 56db2591..686aa49 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,92 +23,92 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𞺡</mtext></math>=<span>1EEA1</span></span> - <span><math><mtext>𞺵</mtext></math>=<span>1EEB5</span></span> - <span><math><mtext>𞺶</mtext></math>=<span>1EEB6</span></span> - <span><math><mtext>𞺢</mtext></math>=<span>1EEA2</span></span> - <span><math><mtext>𞺧</mtext></math>=<span>1EEA7</span></span> - <span><math><mtext>𞺷</mtext></math>=<span>1EEB7</span></span> - <span><math><mtext>𞺣</mtext></math>=<span>1EEA3</span></span> - <span><math><mtext>𞺸</mtext></math>=<span>1EEB8</span></span> - <span><math><mtext>𞺳</mtext></math>=<span>1EEB3</span></span> - <span><math><mtext>𞺦</mtext></math>=<span>1EEA6</span></span><br/> - <span><math><mtext>𝟛</mtext></math>=<span>1D7DB</span></span> - <span><math><mtext>𝟜</mtext></math>=<span>1D7DC</span></span> - <span><math><mtext>𝟝</mtext></math>=<span>1D7DD</span></span> - <span><math><mtext>𞺹</mtext></math>=<span>1EEB9</span></span> - <span><math><mtext>𞺨</mtext></math>=<span>1EEA8</span></span> - <span><math><mtext>𞺺</mtext></math>=<span>1EEBA</span></span> - <span><math><mtext>𝟡</mtext></math>=<span>1D7E1</span></span> - <span><math><mtext>𞺻</mtext></math>=<span>1EEBB</span></span> - <span><math><mtext>𞺰</mtext></math>=<span>1EEB0</span></span> - <span><math><mtext>𞺲</mtext></math>=<span>1EEB2</span></span><br/> - <span><math><mtext>ℂ</mtext></math>=<span>02102</span></span> - <span><math><mtext>𞺫</mtext></math>=<span>1EEAB</span></span> - <span><math><mtext>𞺬</mtext></math>=<span>1EEAC</span></span> - <span><math><mtext>𞺭</mtext></math>=<span>1EEAD</span></span> - <span><math><mtext>𝔾</mtext></math>=<span>1D53E</span></span> - <span><math><mtext>𞺥</mtext></math>=<span>1EEA5</span></span> - <span><math><mtext>𝕀</mtext></math>=<span>1D540</span></span> - <span><math><mtext>𞺩</mtext></math>=<span>1EEA9</span></span> - <span><math><mtext>𝕂</mtext></math>=<span>1D542</span></span> - <span><math><mtext>𝕃</mtext></math>=<span>1D543</span></span><br/> - <span><math><mtext>𝕄</mtext></math>=<span>1D544</span></span> - <span><math><mtext>ℕ</mtext></math>=<span>02115</span></span> - <span><math><mtext>𝕆</mtext></math>=<span>1D546</span></span> - <span><math><mtext>ℙ</mtext></math>=<span>02119</span></span> - <span><math><mtext>ℚ</mtext></math>=<span>0211A</span></span> - <span><math><mtext>ℝ</mtext></math>=<span>0211D</span></span> - <span><math><mtext>𝕊</mtext></math>=<span>1D54A</span></span> - <span><math><mtext>𝕋</mtext></math>=<span>1D54B</span></span> - <span><math><mtext>𝕌</mtext></math>=<span>1D54C</span></span> - <span><math><mtext>𝕍</mtext></math>=<span>1D54D</span></span><br/> - <span><math><mtext>𝕎</mtext></math>=<span>1D54E</span></span> - <span><math><mtext>𝕏</mtext></math>=<span>1D54F</span></span> - <span><math><mtext>𝕐</mtext></math>=<span>1D550</span></span> - <span><math><mtext>ℤ</mtext></math>=<span>02124</span></span> - <span><math><mtext>𝕒</mtext></math>=<span>1D552</span></span> - <span><math><mtext>𝕓</mtext></math>=<span>1D553</span></span> - <span><math><mtext>𝕔</mtext></math>=<span>1D554</span></span> - <span><math><mtext>𝕕</mtext></math>=<span>1D555</span></span> - <span><math><mtext>𝕖</mtext></math>=<span>1D556</span></span> - <span><math><mtext>𝕗</mtext></math>=<span>1D557</span></span><br/> - <span><math><mtext>𝕘</mtext></math>=<span>1D558</span></span> - <span><math><mtext>𝕙</mtext></math>=<span>1D559</span></span> - <span><math><mtext>𝕚</mtext></math>=<span>1D55A</span></span> - <span><math><mtext>𝕛</mtext></math>=<span>1D55B</span></span> - <span><math><mtext>𝕜</mtext></math>=<span>1D55C</span></span> - <span><math><mtext>𝕝</mtext></math>=<span>1D55D</span></span> - <span><math><mtext>𝕞</mtext></math>=<span>1D55E</span></span> - <span><math><mtext>𝕟</mtext></math>=<span>1D55F</span></span> - <span><math><mtext>𝕠</mtext></math>=<span>1D560</span></span> - <span><math><mtext>𝕡</mtext></math>=<span>1D561</span></span><br/> - <span><math><mtext>𝕢</mtext></math>=<span>1D562</span></span> - <span><math><mtext>𝕣</mtext></math>=<span>1D563</span></span> - <span><math><mtext>𝕤</mtext></math>=<span>1D564</span></span> - <span><math><mtext>𝕥</mtext></math>=<span>1D565</span></span> - <span><math><mtext>𝕦</mtext></math>=<span>1D566</span></span> - <span><math><mtext>𝕧</mtext></math>=<span>1D567</span></span> - <span><math><mtext>𝕨</mtext></math>=<span>1D568</span></span> - <span><math><mtext>𝕩</mtext></math>=<span>1D569</span></span> - <span><math><mtext>𝕪</mtext></math>=<span>1D56A</span></span> - <span><math><mtext>𝕫</mtext></math>=<span>1D56B</span></span><br/> - <span><math><mtext>𝟘</mtext></math>=<span>1D7D8</span></span> - <span><math><mtext>𝟙</mtext></math>=<span>1D7D9</span></span> - <span><math><mtext>𝟚</mtext></math>=<span>1D7DA</span></span> - <span><math><mtext>𞺮</mtext></math>=<span>1EEAE</span></span> - <span><math><mtext>𞺴</mtext></math>=<span>1EEB4</span></span> - <span><math><mtext>𞺱</mtext></math>=<span>1EEB1</span></span> - <span><math><mtext>𝟞</mtext></math>=<span>1D7DE</span></span> - <span><math><mtext>𝟟</mtext></math>=<span>1D7DF</span></span> - <span><math><mtext>𝟠</mtext></math>=<span>1D7E0</span></span> - <span><math><mtext>𞺯</mtext></math>=<span>1EEAF</span></span><br/> - <span><math><mtext>𝔸</mtext></math>=<span>1D538</span></span> - <span><math><mtext>𝔹</mtext></math>=<span>1D539</span></span> - <span><math><mtext>𝔻</mtext></math>=<span>1D53B</span></span> - <span><math><mtext>𝔼</mtext></math>=<span>1D53C</span></span> - <span><math><mtext>𝔽</mtext></math>=<span>1D53D</span></span> - <span><math><mtext>ℍ</mtext></math>=<span>0210D</span></span> - <span><math><mtext>𝕁</mtext></math>=<span>1D541</span></span> + <span><math class="testfont"><mtext>𞺡</mtext></math>=<span>1EEA1</span></span> + <span><math class="testfont"><mtext>𞺵</mtext></math>=<span>1EEB5</span></span> + <span><math class="testfont"><mtext>𞺶</mtext></math>=<span>1EEB6</span></span> + <span><math class="testfont"><mtext>𞺢</mtext></math>=<span>1EEA2</span></span> + <span><math class="testfont"><mtext>𞺧</mtext></math>=<span>1EEA7</span></span> + <span><math class="testfont"><mtext>𞺷</mtext></math>=<span>1EEB7</span></span> + <span><math class="testfont"><mtext>𞺣</mtext></math>=<span>1EEA3</span></span> + <span><math class="testfont"><mtext>𞺸</mtext></math>=<span>1EEB8</span></span> + <span><math class="testfont"><mtext>𞺳</mtext></math>=<span>1EEB3</span></span> + <span><math class="testfont"><mtext>𞺦</mtext></math>=<span>1EEA6</span></span><br/> + <span><math class="testfont"><mtext>𝟛</mtext></math>=<span>1D7DB</span></span> + <span><math class="testfont"><mtext>𝟜</mtext></math>=<span>1D7DC</span></span> + <span><math class="testfont"><mtext>𝟝</mtext></math>=<span>1D7DD</span></span> + <span><math class="testfont"><mtext>𞺹</mtext></math>=<span>1EEB9</span></span> + <span><math class="testfont"><mtext>𞺨</mtext></math>=<span>1EEA8</span></span> + <span><math class="testfont"><mtext>𞺺</mtext></math>=<span>1EEBA</span></span> + <span><math class="testfont"><mtext>𝟡</mtext></math>=<span>1D7E1</span></span> + <span><math class="testfont"><mtext>𞺻</mtext></math>=<span>1EEBB</span></span> + <span><math class="testfont"><mtext>𞺰</mtext></math>=<span>1EEB0</span></span> + <span><math class="testfont"><mtext>𞺲</mtext></math>=<span>1EEB2</span></span><br/> + <span><math class="testfont"><mtext>ℂ</mtext></math>=<span>02102</span></span> + <span><math class="testfont"><mtext>𞺫</mtext></math>=<span>1EEAB</span></span> + <span><math class="testfont"><mtext>𞺬</mtext></math>=<span>1EEAC</span></span> + <span><math class="testfont"><mtext>𞺭</mtext></math>=<span>1EEAD</span></span> + <span><math class="testfont"><mtext>𝔾</mtext></math>=<span>1D53E</span></span> + <span><math class="testfont"><mtext>𞺥</mtext></math>=<span>1EEA5</span></span> + <span><math class="testfont"><mtext>𝕀</mtext></math>=<span>1D540</span></span> + <span><math class="testfont"><mtext>𞺩</mtext></math>=<span>1EEA9</span></span> + <span><math class="testfont"><mtext>𝕂</mtext></math>=<span>1D542</span></span> + <span><math class="testfont"><mtext>𝕃</mtext></math>=<span>1D543</span></span><br/> + <span><math class="testfont"><mtext>𝕄</mtext></math>=<span>1D544</span></span> + <span><math class="testfont"><mtext>ℕ</mtext></math>=<span>02115</span></span> + <span><math class="testfont"><mtext>𝕆</mtext></math>=<span>1D546</span></span> + <span><math class="testfont"><mtext>ℙ</mtext></math>=<span>02119</span></span> + <span><math class="testfont"><mtext>ℚ</mtext></math>=<span>0211A</span></span> + <span><math class="testfont"><mtext>ℝ</mtext></math>=<span>0211D</span></span> + <span><math class="testfont"><mtext>𝕊</mtext></math>=<span>1D54A</span></span> + <span><math class="testfont"><mtext>𝕋</mtext></math>=<span>1D54B</span></span> + <span><math class="testfont"><mtext>𝕌</mtext></math>=<span>1D54C</span></span> + <span><math class="testfont"><mtext>𝕍</mtext></math>=<span>1D54D</span></span><br/> + <span><math class="testfont"><mtext>𝕎</mtext></math>=<span>1D54E</span></span> + <span><math class="testfont"><mtext>𝕏</mtext></math>=<span>1D54F</span></span> + <span><math class="testfont"><mtext>𝕐</mtext></math>=<span>1D550</span></span> + <span><math class="testfont"><mtext>ℤ</mtext></math>=<span>02124</span></span> + <span><math class="testfont"><mtext>𝕒</mtext></math>=<span>1D552</span></span> + <span><math class="testfont"><mtext>𝕓</mtext></math>=<span>1D553</span></span> + <span><math class="testfont"><mtext>𝕔</mtext></math>=<span>1D554</span></span> + <span><math class="testfont"><mtext>𝕕</mtext></math>=<span>1D555</span></span> + <span><math class="testfont"><mtext>𝕖</mtext></math>=<span>1D556</span></span> + <span><math class="testfont"><mtext>𝕗</mtext></math>=<span>1D557</span></span><br/> + <span><math class="testfont"><mtext>𝕘</mtext></math>=<span>1D558</span></span> + <span><math class="testfont"><mtext>𝕙</mtext></math>=<span>1D559</span></span> + <span><math class="testfont"><mtext>𝕚</mtext></math>=<span>1D55A</span></span> + <span><math class="testfont"><mtext>𝕛</mtext></math>=<span>1D55B</span></span> + <span><math class="testfont"><mtext>𝕜</mtext></math>=<span>1D55C</span></span> + <span><math class="testfont"><mtext>𝕝</mtext></math>=<span>1D55D</span></span> + <span><math class="testfont"><mtext>𝕞</mtext></math>=<span>1D55E</span></span> + <span><math class="testfont"><mtext>𝕟</mtext></math>=<span>1D55F</span></span> + <span><math class="testfont"><mtext>𝕠</mtext></math>=<span>1D560</span></span> + <span><math class="testfont"><mtext>𝕡</mtext></math>=<span>1D561</span></span><br/> + <span><math class="testfont"><mtext>𝕢</mtext></math>=<span>1D562</span></span> + <span><math class="testfont"><mtext>𝕣</mtext></math>=<span>1D563</span></span> + <span><math class="testfont"><mtext>𝕤</mtext></math>=<span>1D564</span></span> + <span><math class="testfont"><mtext>𝕥</mtext></math>=<span>1D565</span></span> + <span><math class="testfont"><mtext>𝕦</mtext></math>=<span>1D566</span></span> + <span><math class="testfont"><mtext>𝕧</mtext></math>=<span>1D567</span></span> + <span><math class="testfont"><mtext>𝕨</mtext></math>=<span>1D568</span></span> + <span><math class="testfont"><mtext>𝕩</mtext></math>=<span>1D569</span></span> + <span><math class="testfont"><mtext>𝕪</mtext></math>=<span>1D56A</span></span> + <span><math class="testfont"><mtext>𝕫</mtext></math>=<span>1D56B</span></span><br/> + <span><math class="testfont"><mtext>𝟘</mtext></math>=<span>1D7D8</span></span> + <span><math class="testfont"><mtext>𝟙</mtext></math>=<span>1D7D9</span></span> + <span><math class="testfont"><mtext>𝟚</mtext></math>=<span>1D7DA</span></span> + <span><math class="testfont"><mtext>𞺮</mtext></math>=<span>1EEAE</span></span> + <span><math class="testfont"><mtext>𞺴</mtext></math>=<span>1EEB4</span></span> + <span><math class="testfont"><mtext>𞺱</mtext></math>=<span>1EEB1</span></span> + <span><math class="testfont"><mtext>𝟞</mtext></math>=<span>1D7DE</span></span> + <span><math class="testfont"><mtext>𝟟</mtext></math>=<span>1D7DF</span></span> + <span><math class="testfont"><mtext>𝟠</mtext></math>=<span>1D7E0</span></span> + <span><math class="testfont"><mtext>𞺯</mtext></math>=<span>1EEAF</span></span><br/> + <span><math class="testfont"><mtext>𝔸</mtext></math>=<span>1D538</span></span> + <span><math class="testfont"><mtext>𝔹</mtext></math>=<span>1D539</span></span> + <span><math class="testfont"><mtext>𝔻</mtext></math>=<span>1D53B</span></span> + <span><math class="testfont"><mtext>𝔼</mtext></math>=<span>1D53C</span></span> + <span><math class="testfont"><mtext>𝔽</mtext></math>=<span>1D53D</span></span> + <span><math class="testfont"><mtext>ℍ</mtext></math>=<span>0210D</span></span> + <span><math class="testfont"><mtext>𝕁</mtext></math>=<span>1D541</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html index 856672b..4650617 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-double-struck.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,92 +28,92 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="double-struck">ب</mtext></math>=<span>1EEA1</span></span> - <span><math><mtext mathvariant="double-struck">ت</mtext></math>=<span>1EEB5</span></span> - <span><math><mtext mathvariant="double-struck">ث</mtext></math>=<span>1EEB6</span></span> - <span><math><mtext mathvariant="double-struck">ج</mtext></math>=<span>1EEA2</span></span> - <span><math><mtext mathvariant="double-struck">ح</mtext></math>=<span>1EEA7</span></span> - <span><math><mtext mathvariant="double-struck">خ</mtext></math>=<span>1EEB7</span></span> - <span><math><mtext mathvariant="double-struck">د</mtext></math>=<span>1EEA3</span></span> - <span><math><mtext mathvariant="double-struck">ذ</mtext></math>=<span>1EEB8</span></span> - <span><math><mtext mathvariant="double-struck">ر</mtext></math>=<span>1EEB3</span></span> - <span><math><mtext mathvariant="double-struck">ز</mtext></math>=<span>1EEA6</span></span><br/> - <span><math><mtext mathvariant="double-struck">3</mtext></math>=<span>1D7DB</span></span> - <span><math><mtext mathvariant="double-struck">4</mtext></math>=<span>1D7DC</span></span> - <span><math><mtext mathvariant="double-struck">5</mtext></math>=<span>1D7DD</span></span> - <span><math><mtext mathvariant="double-struck">ض</mtext></math>=<span>1EEB9</span></span> - <span><math><mtext mathvariant="double-struck">ط</mtext></math>=<span>1EEA8</span></span> - <span><math><mtext mathvariant="double-struck">ظ</mtext></math>=<span>1EEBA</span></span> - <span><math><mtext mathvariant="double-struck">9</mtext></math>=<span>1D7E1</span></span> - <span><math><mtext mathvariant="double-struck">غ</mtext></math>=<span>1EEBB</span></span> - <span><math><mtext mathvariant="double-struck">ف</mtext></math>=<span>1EEB0</span></span> - <span><math><mtext mathvariant="double-struck">ق</mtext></math>=<span>1EEB2</span></span><br/> - <span><math><mtext mathvariant="double-struck">C</mtext></math>=<span>02102</span></span> - <span><math><mtext mathvariant="double-struck">ل</mtext></math>=<span>1EEAB</span></span> - <span><math><mtext mathvariant="double-struck">م</mtext></math>=<span>1EEAC</span></span> - <span><math><mtext mathvariant="double-struck">ن</mtext></math>=<span>1EEAD</span></span> - <span><math><mtext mathvariant="double-struck">G</mtext></math>=<span>1D53E</span></span> - <span><math><mtext mathvariant="double-struck">و</mtext></math>=<span>1EEA5</span></span> - <span><math><mtext mathvariant="double-struck">I</mtext></math>=<span>1D540</span></span> - <span><math><mtext mathvariant="double-struck">ي</mtext></math>=<span>1EEA9</span></span> - <span><math><mtext mathvariant="double-struck">K</mtext></math>=<span>1D542</span></span> - <span><math><mtext mathvariant="double-struck">L</mtext></math>=<span>1D543</span></span><br/> - <span><math><mtext mathvariant="double-struck">M</mtext></math>=<span>1D544</span></span> - <span><math><mtext mathvariant="double-struck">N</mtext></math>=<span>02115</span></span> - <span><math><mtext mathvariant="double-struck">O</mtext></math>=<span>1D546</span></span> - <span><math><mtext mathvariant="double-struck">P</mtext></math>=<span>02119</span></span> - <span><math><mtext mathvariant="double-struck">Q</mtext></math>=<span>0211A</span></span> - <span><math><mtext mathvariant="double-struck">R</mtext></math>=<span>0211D</span></span> - <span><math><mtext mathvariant="double-struck">S</mtext></math>=<span>1D54A</span></span> - <span><math><mtext mathvariant="double-struck">T</mtext></math>=<span>1D54B</span></span> - <span><math><mtext mathvariant="double-struck">U</mtext></math>=<span>1D54C</span></span> - <span><math><mtext mathvariant="double-struck">V</mtext></math>=<span>1D54D</span></span><br/> - <span><math><mtext mathvariant="double-struck">W</mtext></math>=<span>1D54E</span></span> - <span><math><mtext mathvariant="double-struck">X</mtext></math>=<span>1D54F</span></span> - <span><math><mtext mathvariant="double-struck">Y</mtext></math>=<span>1D550</span></span> - <span><math><mtext mathvariant="double-struck">Z</mtext></math>=<span>02124</span></span> - <span><math><mtext mathvariant="double-struck">a</mtext></math>=<span>1D552</span></span> - <span><math><mtext mathvariant="double-struck">b</mtext></math>=<span>1D553</span></span> - <span><math><mtext mathvariant="double-struck">c</mtext></math>=<span>1D554</span></span> - <span><math><mtext mathvariant="double-struck">d</mtext></math>=<span>1D555</span></span> - <span><math><mtext mathvariant="double-struck">e</mtext></math>=<span>1D556</span></span> - <span><math><mtext mathvariant="double-struck">f</mtext></math>=<span>1D557</span></span><br/> - <span><math><mtext mathvariant="double-struck">g</mtext></math>=<span>1D558</span></span> - <span><math><mtext mathvariant="double-struck">h</mtext></math>=<span>1D559</span></span> - <span><math><mtext mathvariant="double-struck">i</mtext></math>=<span>1D55A</span></span> - <span><math><mtext mathvariant="double-struck">j</mtext></math>=<span>1D55B</span></span> - <span><math><mtext mathvariant="double-struck">k</mtext></math>=<span>1D55C</span></span> - <span><math><mtext mathvariant="double-struck">l</mtext></math>=<span>1D55D</span></span> - <span><math><mtext mathvariant="double-struck">m</mtext></math>=<span>1D55E</span></span> - <span><math><mtext mathvariant="double-struck">n</mtext></math>=<span>1D55F</span></span> - <span><math><mtext mathvariant="double-struck">o</mtext></math>=<span>1D560</span></span> - <span><math><mtext mathvariant="double-struck">p</mtext></math>=<span>1D561</span></span><br/> - <span><math><mtext mathvariant="double-struck">q</mtext></math>=<span>1D562</span></span> - <span><math><mtext mathvariant="double-struck">r</mtext></math>=<span>1D563</span></span> - <span><math><mtext mathvariant="double-struck">s</mtext></math>=<span>1D564</span></span> - <span><math><mtext mathvariant="double-struck">t</mtext></math>=<span>1D565</span></span> - <span><math><mtext mathvariant="double-struck">u</mtext></math>=<span>1D566</span></span> - <span><math><mtext mathvariant="double-struck">v</mtext></math>=<span>1D567</span></span> - <span><math><mtext mathvariant="double-struck">w</mtext></math>=<span>1D568</span></span> - <span><math><mtext mathvariant="double-struck">x</mtext></math>=<span>1D569</span></span> - <span><math><mtext mathvariant="double-struck">y</mtext></math>=<span>1D56A</span></span> - <span><math><mtext mathvariant="double-struck">z</mtext></math>=<span>1D56B</span></span><br/> - <span><math><mtext mathvariant="double-struck">0</mtext></math>=<span>1D7D8</span></span> - <span><math><mtext mathvariant="double-struck">1</mtext></math>=<span>1D7D9</span></span> - <span><math><mtext mathvariant="double-struck">2</mtext></math>=<span>1D7DA</span></span> - <span><math><mtext mathvariant="double-struck">س</mtext></math>=<span>1EEAE</span></span> - <span><math><mtext mathvariant="double-struck">ش</mtext></math>=<span>1EEB4</span></span> - <span><math><mtext mathvariant="double-struck">ص</mtext></math>=<span>1EEB1</span></span> - <span><math><mtext mathvariant="double-struck">6</mtext></math>=<span>1D7DE</span></span> - <span><math><mtext mathvariant="double-struck">7</mtext></math>=<span>1D7DF</span></span> - <span><math><mtext mathvariant="double-struck">8</mtext></math>=<span>1D7E0</span></span> - <span><math><mtext mathvariant="double-struck">ع</mtext></math>=<span>1EEAF</span></span><br/> - <span><math><mtext mathvariant="double-struck">A</mtext></math>=<span>1D538</span></span> - <span><math><mtext mathvariant="double-struck">B</mtext></math>=<span>1D539</span></span> - <span><math><mtext mathvariant="double-struck">D</mtext></math>=<span>1D53B</span></span> - <span><math><mtext mathvariant="double-struck">E</mtext></math>=<span>1D53C</span></span> - <span><math><mtext mathvariant="double-struck">F</mtext></math>=<span>1D53D</span></span> - <span><math><mtext mathvariant="double-struck">H</mtext></math>=<span>0210D</span></span> - <span><math><mtext mathvariant="double-struck">J</mtext></math>=<span>1D541</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ب</mtext></math>=<span>1EEA1</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ت</mtext></math>=<span>1EEB5</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ث</mtext></math>=<span>1EEB6</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ج</mtext></math>=<span>1EEA2</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ح</mtext></math>=<span>1EEA7</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">خ</mtext></math>=<span>1EEB7</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">د</mtext></math>=<span>1EEA3</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ذ</mtext></math>=<span>1EEB8</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ر</mtext></math>=<span>1EEB3</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ز</mtext></math>=<span>1EEA6</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">3</mtext></math>=<span>1D7DB</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">4</mtext></math>=<span>1D7DC</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">5</mtext></math>=<span>1D7DD</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ض</mtext></math>=<span>1EEB9</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ط</mtext></math>=<span>1EEA8</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ظ</mtext></math>=<span>1EEBA</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">9</mtext></math>=<span>1D7E1</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">غ</mtext></math>=<span>1EEBB</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ف</mtext></math>=<span>1EEB0</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ق</mtext></math>=<span>1EEB2</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">C</mtext></math>=<span>02102</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ل</mtext></math>=<span>1EEAB</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">م</mtext></math>=<span>1EEAC</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ن</mtext></math>=<span>1EEAD</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">G</mtext></math>=<span>1D53E</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">و</mtext></math>=<span>1EEA5</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">I</mtext></math>=<span>1D540</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ي</mtext></math>=<span>1EEA9</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">K</mtext></math>=<span>1D542</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">L</mtext></math>=<span>1D543</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">M</mtext></math>=<span>1D544</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">N</mtext></math>=<span>02115</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">O</mtext></math>=<span>1D546</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">P</mtext></math>=<span>02119</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">Q</mtext></math>=<span>0211A</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">R</mtext></math>=<span>0211D</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">S</mtext></math>=<span>1D54A</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">T</mtext></math>=<span>1D54B</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">U</mtext></math>=<span>1D54C</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">V</mtext></math>=<span>1D54D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">W</mtext></math>=<span>1D54E</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">X</mtext></math>=<span>1D54F</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">Y</mtext></math>=<span>1D550</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">Z</mtext></math>=<span>02124</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">a</mtext></math>=<span>1D552</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">b</mtext></math>=<span>1D553</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">c</mtext></math>=<span>1D554</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">d</mtext></math>=<span>1D555</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">e</mtext></math>=<span>1D556</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">f</mtext></math>=<span>1D557</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">g</mtext></math>=<span>1D558</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">h</mtext></math>=<span>1D559</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">i</mtext></math>=<span>1D55A</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">j</mtext></math>=<span>1D55B</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">k</mtext></math>=<span>1D55C</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">l</mtext></math>=<span>1D55D</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">m</mtext></math>=<span>1D55E</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">n</mtext></math>=<span>1D55F</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">o</mtext></math>=<span>1D560</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">p</mtext></math>=<span>1D561</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">q</mtext></math>=<span>1D562</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">r</mtext></math>=<span>1D563</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">s</mtext></math>=<span>1D564</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">t</mtext></math>=<span>1D565</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">u</mtext></math>=<span>1D566</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">v</mtext></math>=<span>1D567</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">w</mtext></math>=<span>1D568</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">x</mtext></math>=<span>1D569</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">y</mtext></math>=<span>1D56A</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">z</mtext></math>=<span>1D56B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">0</mtext></math>=<span>1D7D8</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">1</mtext></math>=<span>1D7D9</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">2</mtext></math>=<span>1D7DA</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">س</mtext></math>=<span>1EEAE</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ش</mtext></math>=<span>1EEB4</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ص</mtext></math>=<span>1EEB1</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">6</mtext></math>=<span>1D7DE</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">7</mtext></math>=<span>1D7DF</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">8</mtext></math>=<span>1D7E0</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">ع</mtext></math>=<span>1EEAF</span></span><br/> + <span><math class="testfont"><mtext mathvariant="double-struck">A</mtext></math>=<span>1D538</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">B</mtext></math>=<span>1D539</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">D</mtext></math>=<span>1D53B</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">E</mtext></math>=<span>1D53C</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">F</mtext></math>=<span>1D53D</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">H</mtext></math>=<span>0210D</span></span> + <span><math class="testfont"><mtext mathvariant="double-struck">J</mtext></math>=<span>1D541</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur-ref.html index 5e0721c..3d1dd50 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,57 +23,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝔄</mtext></math>=<span>1D504</span></span> - <span><math><mtext>𝔅</mtext></math>=<span>1D505</span></span> - <span><math><mtext>ℭ</mtext></math>=<span>0212D</span></span> - <span><math><mtext>𝔇</mtext></math>=<span>1D507</span></span> - <span><math><mtext>𝔈</mtext></math>=<span>1D508</span></span> - <span><math><mtext>𝔉</mtext></math>=<span>1D509</span></span> - <span><math><mtext>𝔊</mtext></math>=<span>1D50A</span></span> - <span><math><mtext>ℌ</mtext></math>=<span>0210C</span></span> - <span><math><mtext>ℑ</mtext></math>=<span>02111</span></span> - <span><math><mtext>𝔍</mtext></math>=<span>1D50D</span></span><br/> - <span><math><mtext>𝔎</mtext></math>=<span>1D50E</span></span> - <span><math><mtext>𝔏</mtext></math>=<span>1D50F</span></span> - <span><math><mtext>𝔐</mtext></math>=<span>1D510</span></span> - <span><math><mtext>𝔑</mtext></math>=<span>1D511</span></span> - <span><math><mtext>𝔒</mtext></math>=<span>1D512</span></span> - <span><math><mtext>𝔓</mtext></math>=<span>1D513</span></span> - <span><math><mtext>𝔔</mtext></math>=<span>1D514</span></span> - <span><math><mtext>ℜ</mtext></math>=<span>0211C</span></span> - <span><math><mtext>𝔖</mtext></math>=<span>1D516</span></span> - <span><math><mtext>𝔗</mtext></math>=<span>1D517</span></span><br/> - <span><math><mtext>𝔘</mtext></math>=<span>1D518</span></span> - <span><math><mtext>𝔙</mtext></math>=<span>1D519</span></span> - <span><math><mtext>𝔚</mtext></math>=<span>1D51A</span></span> - <span><math><mtext>𝔛</mtext></math>=<span>1D51B</span></span> - <span><math><mtext>𝔜</mtext></math>=<span>1D51C</span></span> - <span><math><mtext>ℨ</mtext></math>=<span>02128</span></span> - <span><math><mtext>𝔞</mtext></math>=<span>1D51E</span></span> - <span><math><mtext>𝔟</mtext></math>=<span>1D51F</span></span> - <span><math><mtext>𝔠</mtext></math>=<span>1D520</span></span> - <span><math><mtext>𝔡</mtext></math>=<span>1D521</span></span><br/> - <span><math><mtext>𝔢</mtext></math>=<span>1D522</span></span> - <span><math><mtext>𝔣</mtext></math>=<span>1D523</span></span> - <span><math><mtext>𝔤</mtext></math>=<span>1D524</span></span> - <span><math><mtext>𝔥</mtext></math>=<span>1D525</span></span> - <span><math><mtext>𝔦</mtext></math>=<span>1D526</span></span> - <span><math><mtext>𝔧</mtext></math>=<span>1D527</span></span> - <span><math><mtext>𝔨</mtext></math>=<span>1D528</span></span> - <span><math><mtext>𝔩</mtext></math>=<span>1D529</span></span> - <span><math><mtext>𝔪</mtext></math>=<span>1D52A</span></span> - <span><math><mtext>𝔫</mtext></math>=<span>1D52B</span></span><br/> - <span><math><mtext>𝔬</mtext></math>=<span>1D52C</span></span> - <span><math><mtext>𝔭</mtext></math>=<span>1D52D</span></span> - <span><math><mtext>𝔮</mtext></math>=<span>1D52E</span></span> - <span><math><mtext>𝔯</mtext></math>=<span>1D52F</span></span> - <span><math><mtext>𝔰</mtext></math>=<span>1D530</span></span> - <span><math><mtext>𝔱</mtext></math>=<span>1D531</span></span> - <span><math><mtext>𝔲</mtext></math>=<span>1D532</span></span> - <span><math><mtext>𝔳</mtext></math>=<span>1D533</span></span> - <span><math><mtext>𝔴</mtext></math>=<span>1D534</span></span> - <span><math><mtext>𝔵</mtext></math>=<span>1D535</span></span><br/> - <span><math><mtext>𝔶</mtext></math>=<span>1D536</span></span> - <span><math><mtext>𝔷</mtext></math>=<span>1D537</span></span> + <span><math class="testfont"><mtext>𝔄</mtext></math>=<span>1D504</span></span> + <span><math class="testfont"><mtext>𝔅</mtext></math>=<span>1D505</span></span> + <span><math class="testfont"><mtext>ℭ</mtext></math>=<span>0212D</span></span> + <span><math class="testfont"><mtext>𝔇</mtext></math>=<span>1D507</span></span> + <span><math class="testfont"><mtext>𝔈</mtext></math>=<span>1D508</span></span> + <span><math class="testfont"><mtext>𝔉</mtext></math>=<span>1D509</span></span> + <span><math class="testfont"><mtext>𝔊</mtext></math>=<span>1D50A</span></span> + <span><math class="testfont"><mtext>ℌ</mtext></math>=<span>0210C</span></span> + <span><math class="testfont"><mtext>ℑ</mtext></math>=<span>02111</span></span> + <span><math class="testfont"><mtext>𝔍</mtext></math>=<span>1D50D</span></span><br/> + <span><math class="testfont"><mtext>𝔎</mtext></math>=<span>1D50E</span></span> + <span><math class="testfont"><mtext>𝔏</mtext></math>=<span>1D50F</span></span> + <span><math class="testfont"><mtext>𝔐</mtext></math>=<span>1D510</span></span> + <span><math class="testfont"><mtext>𝔑</mtext></math>=<span>1D511</span></span> + <span><math class="testfont"><mtext>𝔒</mtext></math>=<span>1D512</span></span> + <span><math class="testfont"><mtext>𝔓</mtext></math>=<span>1D513</span></span> + <span><math class="testfont"><mtext>𝔔</mtext></math>=<span>1D514</span></span> + <span><math class="testfont"><mtext>ℜ</mtext></math>=<span>0211C</span></span> + <span><math class="testfont"><mtext>𝔖</mtext></math>=<span>1D516</span></span> + <span><math class="testfont"><mtext>𝔗</mtext></math>=<span>1D517</span></span><br/> + <span><math class="testfont"><mtext>𝔘</mtext></math>=<span>1D518</span></span> + <span><math class="testfont"><mtext>𝔙</mtext></math>=<span>1D519</span></span> + <span><math class="testfont"><mtext>𝔚</mtext></math>=<span>1D51A</span></span> + <span><math class="testfont"><mtext>𝔛</mtext></math>=<span>1D51B</span></span> + <span><math class="testfont"><mtext>𝔜</mtext></math>=<span>1D51C</span></span> + <span><math class="testfont"><mtext>ℨ</mtext></math>=<span>02128</span></span> + <span><math class="testfont"><mtext>𝔞</mtext></math>=<span>1D51E</span></span> + <span><math class="testfont"><mtext>𝔟</mtext></math>=<span>1D51F</span></span> + <span><math class="testfont"><mtext>𝔠</mtext></math>=<span>1D520</span></span> + <span><math class="testfont"><mtext>𝔡</mtext></math>=<span>1D521</span></span><br/> + <span><math class="testfont"><mtext>𝔢</mtext></math>=<span>1D522</span></span> + <span><math class="testfont"><mtext>𝔣</mtext></math>=<span>1D523</span></span> + <span><math class="testfont"><mtext>𝔤</mtext></math>=<span>1D524</span></span> + <span><math class="testfont"><mtext>𝔥</mtext></math>=<span>1D525</span></span> + <span><math class="testfont"><mtext>𝔦</mtext></math>=<span>1D526</span></span> + <span><math class="testfont"><mtext>𝔧</mtext></math>=<span>1D527</span></span> + <span><math class="testfont"><mtext>𝔨</mtext></math>=<span>1D528</span></span> + <span><math class="testfont"><mtext>𝔩</mtext></math>=<span>1D529</span></span> + <span><math class="testfont"><mtext>𝔪</mtext></math>=<span>1D52A</span></span> + <span><math class="testfont"><mtext>𝔫</mtext></math>=<span>1D52B</span></span><br/> + <span><math class="testfont"><mtext>𝔬</mtext></math>=<span>1D52C</span></span> + <span><math class="testfont"><mtext>𝔭</mtext></math>=<span>1D52D</span></span> + <span><math class="testfont"><mtext>𝔮</mtext></math>=<span>1D52E</span></span> + <span><math class="testfont"><mtext>𝔯</mtext></math>=<span>1D52F</span></span> + <span><math class="testfont"><mtext>𝔰</mtext></math>=<span>1D530</span></span> + <span><math class="testfont"><mtext>𝔱</mtext></math>=<span>1D531</span></span> + <span><math class="testfont"><mtext>𝔲</mtext></math>=<span>1D532</span></span> + <span><math class="testfont"><mtext>𝔳</mtext></math>=<span>1D533</span></span> + <span><math class="testfont"><mtext>𝔴</mtext></math>=<span>1D534</span></span> + <span><math class="testfont"><mtext>𝔵</mtext></math>=<span>1D535</span></span><br/> + <span><math class="testfont"><mtext>𝔶</mtext></math>=<span>1D536</span></span> + <span><math class="testfont"><mtext>𝔷</mtext></math>=<span>1D537</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html index 8ef57a0..72f20b78 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-fraktur.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,57 +28,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="fraktur">A</mtext></math>=<span>1D504</span></span> - <span><math><mtext mathvariant="fraktur">B</mtext></math>=<span>1D505</span></span> - <span><math><mtext mathvariant="fraktur">C</mtext></math>=<span>0212D</span></span> - <span><math><mtext mathvariant="fraktur">D</mtext></math>=<span>1D507</span></span> - <span><math><mtext mathvariant="fraktur">E</mtext></math>=<span>1D508</span></span> - <span><math><mtext mathvariant="fraktur">F</mtext></math>=<span>1D509</span></span> - <span><math><mtext mathvariant="fraktur">G</mtext></math>=<span>1D50A</span></span> - <span><math><mtext mathvariant="fraktur">H</mtext></math>=<span>0210C</span></span> - <span><math><mtext mathvariant="fraktur">I</mtext></math>=<span>02111</span></span> - <span><math><mtext mathvariant="fraktur">J</mtext></math>=<span>1D50D</span></span><br/> - <span><math><mtext mathvariant="fraktur">K</mtext></math>=<span>1D50E</span></span> - <span><math><mtext mathvariant="fraktur">L</mtext></math>=<span>1D50F</span></span> - <span><math><mtext mathvariant="fraktur">M</mtext></math>=<span>1D510</span></span> - <span><math><mtext mathvariant="fraktur">N</mtext></math>=<span>1D511</span></span> - <span><math><mtext mathvariant="fraktur">O</mtext></math>=<span>1D512</span></span> - <span><math><mtext mathvariant="fraktur">P</mtext></math>=<span>1D513</span></span> - <span><math><mtext mathvariant="fraktur">Q</mtext></math>=<span>1D514</span></span> - <span><math><mtext mathvariant="fraktur">R</mtext></math>=<span>0211C</span></span> - <span><math><mtext mathvariant="fraktur">S</mtext></math>=<span>1D516</span></span> - <span><math><mtext mathvariant="fraktur">T</mtext></math>=<span>1D517</span></span><br/> - <span><math><mtext mathvariant="fraktur">U</mtext></math>=<span>1D518</span></span> - <span><math><mtext mathvariant="fraktur">V</mtext></math>=<span>1D519</span></span> - <span><math><mtext mathvariant="fraktur">W</mtext></math>=<span>1D51A</span></span> - <span><math><mtext mathvariant="fraktur">X</mtext></math>=<span>1D51B</span></span> - <span><math><mtext mathvariant="fraktur">Y</mtext></math>=<span>1D51C</span></span> - <span><math><mtext mathvariant="fraktur">Z</mtext></math>=<span>02128</span></span> - <span><math><mtext mathvariant="fraktur">a</mtext></math>=<span>1D51E</span></span> - <span><math><mtext mathvariant="fraktur">b</mtext></math>=<span>1D51F</span></span> - <span><math><mtext mathvariant="fraktur">c</mtext></math>=<span>1D520</span></span> - <span><math><mtext mathvariant="fraktur">d</mtext></math>=<span>1D521</span></span><br/> - <span><math><mtext mathvariant="fraktur">e</mtext></math>=<span>1D522</span></span> - <span><math><mtext mathvariant="fraktur">f</mtext></math>=<span>1D523</span></span> - <span><math><mtext mathvariant="fraktur">g</mtext></math>=<span>1D524</span></span> - <span><math><mtext mathvariant="fraktur">h</mtext></math>=<span>1D525</span></span> - <span><math><mtext mathvariant="fraktur">i</mtext></math>=<span>1D526</span></span> - <span><math><mtext mathvariant="fraktur">j</mtext></math>=<span>1D527</span></span> - <span><math><mtext mathvariant="fraktur">k</mtext></math>=<span>1D528</span></span> - <span><math><mtext mathvariant="fraktur">l</mtext></math>=<span>1D529</span></span> - <span><math><mtext mathvariant="fraktur">m</mtext></math>=<span>1D52A</span></span> - <span><math><mtext mathvariant="fraktur">n</mtext></math>=<span>1D52B</span></span><br/> - <span><math><mtext mathvariant="fraktur">o</mtext></math>=<span>1D52C</span></span> - <span><math><mtext mathvariant="fraktur">p</mtext></math>=<span>1D52D</span></span> - <span><math><mtext mathvariant="fraktur">q</mtext></math>=<span>1D52E</span></span> - <span><math><mtext mathvariant="fraktur">r</mtext></math>=<span>1D52F</span></span> - <span><math><mtext mathvariant="fraktur">s</mtext></math>=<span>1D530</span></span> - <span><math><mtext mathvariant="fraktur">t</mtext></math>=<span>1D531</span></span> - <span><math><mtext mathvariant="fraktur">u</mtext></math>=<span>1D532</span></span> - <span><math><mtext mathvariant="fraktur">v</mtext></math>=<span>1D533</span></span> - <span><math><mtext mathvariant="fraktur">w</mtext></math>=<span>1D534</span></span> - <span><math><mtext mathvariant="fraktur">x</mtext></math>=<span>1D535</span></span><br/> - <span><math><mtext mathvariant="fraktur">y</mtext></math>=<span>1D536</span></span> - <span><math><mtext mathvariant="fraktur">z</mtext></math>=<span>1D537</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">A</mtext></math>=<span>1D504</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">B</mtext></math>=<span>1D505</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">C</mtext></math>=<span>0212D</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">D</mtext></math>=<span>1D507</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">E</mtext></math>=<span>1D508</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">F</mtext></math>=<span>1D509</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">G</mtext></math>=<span>1D50A</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">H</mtext></math>=<span>0210C</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">I</mtext></math>=<span>02111</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">J</mtext></math>=<span>1D50D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="fraktur">K</mtext></math>=<span>1D50E</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">L</mtext></math>=<span>1D50F</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">M</mtext></math>=<span>1D510</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">N</mtext></math>=<span>1D511</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">O</mtext></math>=<span>1D512</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">P</mtext></math>=<span>1D513</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">Q</mtext></math>=<span>1D514</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">R</mtext></math>=<span>0211C</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">S</mtext></math>=<span>1D516</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">T</mtext></math>=<span>1D517</span></span><br/> + <span><math class="testfont"><mtext mathvariant="fraktur">U</mtext></math>=<span>1D518</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">V</mtext></math>=<span>1D519</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">W</mtext></math>=<span>1D51A</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">X</mtext></math>=<span>1D51B</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">Y</mtext></math>=<span>1D51C</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">Z</mtext></math>=<span>02128</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">a</mtext></math>=<span>1D51E</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">b</mtext></math>=<span>1D51F</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">c</mtext></math>=<span>1D520</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">d</mtext></math>=<span>1D521</span></span><br/> + <span><math class="testfont"><mtext mathvariant="fraktur">e</mtext></math>=<span>1D522</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">f</mtext></math>=<span>1D523</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">g</mtext></math>=<span>1D524</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">h</mtext></math>=<span>1D525</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">i</mtext></math>=<span>1D526</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">j</mtext></math>=<span>1D527</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">k</mtext></math>=<span>1D528</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">l</mtext></math>=<span>1D529</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">m</mtext></math>=<span>1D52A</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">n</mtext></math>=<span>1D52B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="fraktur">o</mtext></math>=<span>1D52C</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">p</mtext></math>=<span>1D52D</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">q</mtext></math>=<span>1D52E</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">r</mtext></math>=<span>1D52F</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">s</mtext></math>=<span>1D530</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">t</mtext></math>=<span>1D531</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">u</mtext></math>=<span>1D532</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">v</mtext></math>=<span>1D533</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">w</mtext></math>=<span>1D534</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">x</mtext></math>=<span>1D535</span></span><br/> + <span><math class="testfont"><mtext mathvariant="fraktur">y</mtext></math>=<span>1D536</span></span> + <span><math class="testfont"><mtext mathvariant="fraktur">z</mtext></math>=<span>1D537</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial-ref.html index 722ce5f..597277a 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,25 +23,25 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𞸰</mtext></math>=<span>1EE30</span></span> - <span><math><mtext>𞸲</mtext></math>=<span>1EE32</span></span> - <span><math><mtext>𞸪</mtext></math>=<span>1EE2A</span></span> - <span><math><mtext>𞸫</mtext></math>=<span>1EE2B</span></span> - <span><math><mtext>𞸬</mtext></math>=<span>1EE2C</span></span> - <span><math><mtext>𞸭</mtext></math>=<span>1EE2D</span></span> - <span><math><mtext>𞸤</mtext></math>=<span>1EE24</span></span> - <span><math><mtext>𞸡</mtext></math>=<span>1EE21</span></span> - <span><math><mtext>𞸩</mtext></math>=<span>1EE29</span></span> - <span><math><mtext>𞸶</mtext></math>=<span>1EE36</span></span><br/> - <span><math><mtext>𞸢</mtext></math>=<span>1EE22</span></span> - <span><math><mtext>𞸧</mtext></math>=<span>1EE27</span></span> - <span><math><mtext>𞸷</mtext></math>=<span>1EE37</span></span> - <span><math><mtext>𞸮</mtext></math>=<span>1EE2E</span></span> - <span><math><mtext>𞸴</mtext></math>=<span>1EE34</span></span> - <span><math><mtext>𞸱</mtext></math>=<span>1EE31</span></span> - <span><math><mtext>𞸹</mtext></math>=<span>1EE39</span></span> - <span><math><mtext>𞸯</mtext></math>=<span>1EE2F</span></span> - <span><math><mtext>𞸻</mtext></math>=<span>1EE3B</span></span> - <span><math><mtext>𞸵</mtext></math>=<span>1EE35</span></span><br/> + <span><math class="testfont"><mtext>𞸰</mtext></math>=<span>1EE30</span></span> + <span><math class="testfont"><mtext>𞸲</mtext></math>=<span>1EE32</span></span> + <span><math class="testfont"><mtext>𞸪</mtext></math>=<span>1EE2A</span></span> + <span><math class="testfont"><mtext>𞸫</mtext></math>=<span>1EE2B</span></span> + <span><math class="testfont"><mtext>𞸬</mtext></math>=<span>1EE2C</span></span> + <span><math class="testfont"><mtext>𞸭</mtext></math>=<span>1EE2D</span></span> + <span><math class="testfont"><mtext>𞸤</mtext></math>=<span>1EE24</span></span> + <span><math class="testfont"><mtext>𞸡</mtext></math>=<span>1EE21</span></span> + <span><math class="testfont"><mtext>𞸩</mtext></math>=<span>1EE29</span></span> + <span><math class="testfont"><mtext>𞸶</mtext></math>=<span>1EE36</span></span><br/> + <span><math class="testfont"><mtext>𞸢</mtext></math>=<span>1EE22</span></span> + <span><math class="testfont"><mtext>𞸧</mtext></math>=<span>1EE27</span></span> + <span><math class="testfont"><mtext>𞸷</mtext></math>=<span>1EE37</span></span> + <span><math class="testfont"><mtext>𞸮</mtext></math>=<span>1EE2E</span></span> + <span><math class="testfont"><mtext>𞸴</mtext></math>=<span>1EE34</span></span> + <span><math class="testfont"><mtext>𞸱</mtext></math>=<span>1EE31</span></span> + <span><math class="testfont"><mtext>𞸹</mtext></math>=<span>1EE39</span></span> + <span><math class="testfont"><mtext>𞸯</mtext></math>=<span>1EE2F</span></span> + <span><math class="testfont"><mtext>𞸻</mtext></math>=<span>1EE3B</span></span> + <span><math class="testfont"><mtext>𞸵</mtext></math>=<span>1EE35</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html index de4b89f..4f35d38 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-initial.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,25 +28,25 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="initial">ف</mtext></math>=<span>1EE30</span></span> - <span><math><mtext mathvariant="initial">ق</mtext></math>=<span>1EE32</span></span> - <span><math><mtext mathvariant="initial">ك</mtext></math>=<span>1EE2A</span></span> - <span><math><mtext mathvariant="initial">ل</mtext></math>=<span>1EE2B</span></span> - <span><math><mtext mathvariant="initial">م</mtext></math>=<span>1EE2C</span></span> - <span><math><mtext mathvariant="initial">ن</mtext></math>=<span>1EE2D</span></span> - <span><math><mtext mathvariant="initial">ه</mtext></math>=<span>1EE24</span></span> - <span><math><mtext mathvariant="initial">ب</mtext></math>=<span>1EE21</span></span> - <span><math><mtext mathvariant="initial">ي</mtext></math>=<span>1EE29</span></span> - <span><math><mtext mathvariant="initial">ث</mtext></math>=<span>1EE36</span></span><br/> - <span><math><mtext mathvariant="initial">ج</mtext></math>=<span>1EE22</span></span> - <span><math><mtext mathvariant="initial">ح</mtext></math>=<span>1EE27</span></span> - <span><math><mtext mathvariant="initial">خ</mtext></math>=<span>1EE37</span></span> - <span><math><mtext mathvariant="initial">س</mtext></math>=<span>1EE2E</span></span> - <span><math><mtext mathvariant="initial">ش</mtext></math>=<span>1EE34</span></span> - <span><math><mtext mathvariant="initial">ص</mtext></math>=<span>1EE31</span></span> - <span><math><mtext mathvariant="initial">ض</mtext></math>=<span>1EE39</span></span> - <span><math><mtext mathvariant="initial">ع</mtext></math>=<span>1EE2F</span></span> - <span><math><mtext mathvariant="initial">غ</mtext></math>=<span>1EE3B</span></span> - <span><math><mtext mathvariant="initial">ت</mtext></math>=<span>1EE35</span></span><br/> + <span><math class="testfont"><mtext mathvariant="initial">ف</mtext></math>=<span>1EE30</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ق</mtext></math>=<span>1EE32</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ك</mtext></math>=<span>1EE2A</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ل</mtext></math>=<span>1EE2B</span></span> + <span><math class="testfont"><mtext mathvariant="initial">م</mtext></math>=<span>1EE2C</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ن</mtext></math>=<span>1EE2D</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ه</mtext></math>=<span>1EE24</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ب</mtext></math>=<span>1EE21</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ي</mtext></math>=<span>1EE29</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ث</mtext></math>=<span>1EE36</span></span><br/> + <span><math class="testfont"><mtext mathvariant="initial">ج</mtext></math>=<span>1EE22</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ح</mtext></math>=<span>1EE27</span></span> + <span><math class="testfont"><mtext mathvariant="initial">خ</mtext></math>=<span>1EE37</span></span> + <span><math class="testfont"><mtext mathvariant="initial">س</mtext></math>=<span>1EE2E</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ش</mtext></math>=<span>1EE34</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ص</mtext></math>=<span>1EE31</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ض</mtext></math>=<span>1EE39</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ع</mtext></math>=<span>1EE2F</span></span> + <span><math class="testfont"><mtext mathvariant="initial">غ</mtext></math>=<span>1EE3B</span></span> + <span><math class="testfont"><mtext mathvariant="initial">ت</mtext></math>=<span>1EE35</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic-ref.html index 70643b3..f503794e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,117 +23,117 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝜕</mtext></math>=<span>1D715</span></span> - <span><math><mtext>𝛻</mtext></math>=<span>1D6FB</span></span> - <span><math><mtext>𝚥</mtext></math>=<span>1D6A5</span></span> - <span><math><mtext>𝐴</mtext></math>=<span>1D434</span></span> - <span><math><mtext>𝐵</mtext></math>=<span>1D435</span></span> - <span><math><mtext>𝐶</mtext></math>=<span>1D436</span></span> - <span><math><mtext>𝐷</mtext></math>=<span>1D437</span></span> - <span><math><mtext>𝐸</mtext></math>=<span>1D438</span></span> - <span><math><mtext>𝐹</mtext></math>=<span>1D439</span></span> - <span><math><mtext>𝐺</mtext></math>=<span>1D43A</span></span><br/> - <span><math><mtext>𝐻</mtext></math>=<span>1D43B</span></span> - <span><math><mtext>𝐼</mtext></math>=<span>1D43C</span></span> - <span><math><mtext>𝐽</mtext></math>=<span>1D43D</span></span> - <span><math><mtext>𝐾</mtext></math>=<span>1D43E</span></span> - <span><math><mtext>𝐿</mtext></math>=<span>1D43F</span></span> - <span><math><mtext>𝑀</mtext></math>=<span>1D440</span></span> - <span><math><mtext>𝑁</mtext></math>=<span>1D441</span></span> - <span><math><mtext>𝑂</mtext></math>=<span>1D442</span></span> - <span><math><mtext>𝑃</mtext></math>=<span>1D443</span></span> - <span><math><mtext>𝑄</mtext></math>=<span>1D444</span></span><br/> - <span><math><mtext>𝑅</mtext></math>=<span>1D445</span></span> - <span><math><mtext>𝑆</mtext></math>=<span>1D446</span></span> - <span><math><mtext>𝑇</mtext></math>=<span>1D447</span></span> - <span><math><mtext>𝑈</mtext></math>=<span>1D448</span></span> - <span><math><mtext>𝑉</mtext></math>=<span>1D449</span></span> - <span><math><mtext>𝑊</mtext></math>=<span>1D44A</span></span> - <span><math><mtext>𝑋</mtext></math>=<span>1D44B</span></span> - <span><math><mtext>𝑌</mtext></math>=<span>1D44C</span></span> - <span><math><mtext>𝑍</mtext></math>=<span>1D44D</span></span> - <span><math><mtext>𝑎</mtext></math>=<span>1D44E</span></span><br/> - <span><math><mtext>𝑏</mtext></math>=<span>1D44F</span></span> - <span><math><mtext>𝑐</mtext></math>=<span>1D450</span></span> - <span><math><mtext>𝑑</mtext></math>=<span>1D451</span></span> - <span><math><mtext>𝑒</mtext></math>=<span>1D452</span></span> - <span><math><mtext>𝑓</mtext></math>=<span>1D453</span></span> - <span><math><mtext>𝑔</mtext></math>=<span>1D454</span></span> - <span><math><mtext>ℎ</mtext></math>=<span>0210E</span></span> - <span><math><mtext>𝑖</mtext></math>=<span>1D456</span></span> - <span><math><mtext>𝑗</mtext></math>=<span>1D457</span></span> - <span><math><mtext>𝑘</mtext></math>=<span>1D458</span></span><br/> - <span><math><mtext>𝑙</mtext></math>=<span>1D459</span></span> - <span><math><mtext>𝑚</mtext></math>=<span>1D45A</span></span> - <span><math><mtext>𝑛</mtext></math>=<span>1D45B</span></span> - <span><math><mtext>𝑜</mtext></math>=<span>1D45C</span></span> - <span><math><mtext>𝑝</mtext></math>=<span>1D45D</span></span> - <span><math><mtext>𝑞</mtext></math>=<span>1D45E</span></span> - <span><math><mtext>𝑟</mtext></math>=<span>1D45F</span></span> - <span><math><mtext>𝑠</mtext></math>=<span>1D460</span></span> - <span><math><mtext>𝑡</mtext></math>=<span>1D461</span></span> - <span><math><mtext>𝑢</mtext></math>=<span>1D462</span></span><br/> - <span><math><mtext>𝑣</mtext></math>=<span>1D463</span></span> - <span><math><mtext>𝑤</mtext></math>=<span>1D464</span></span> - <span><math><mtext>𝑥</mtext></math>=<span>1D465</span></span> - <span><math><mtext>𝑦</mtext></math>=<span>1D466</span></span> - <span><math><mtext>𝑧</mtext></math>=<span>1D467</span></span> - <span><math><mtext>𝚤</mtext></math>=<span>1D6A4</span></span> - <span><math><mtext>𝛢</mtext></math>=<span>1D6E2</span></span> - <span><math><mtext>𝛣</mtext></math>=<span>1D6E3</span></span> - <span><math><mtext>𝛤</mtext></math>=<span>1D6E4</span></span> - <span><math><mtext>𝛥</mtext></math>=<span>1D6E5</span></span><br/> - <span><math><mtext>𝛦</mtext></math>=<span>1D6E6</span></span> - <span><math><mtext>𝛧</mtext></math>=<span>1D6E7</span></span> - <span><math><mtext>𝛨</mtext></math>=<span>1D6E8</span></span> - <span><math><mtext>𝛩</mtext></math>=<span>1D6E9</span></span> - <span><math><mtext>𝛪</mtext></math>=<span>1D6EA</span></span> - <span><math><mtext>𝛫</mtext></math>=<span>1D6EB</span></span> - <span><math><mtext>𝛬</mtext></math>=<span>1D6EC</span></span> - <span><math><mtext>𝛭</mtext></math>=<span>1D6ED</span></span> - <span><math><mtext>𝛮</mtext></math>=<span>1D6EE</span></span> - <span><math><mtext>𝛯</mtext></math>=<span>1D6EF</span></span><br/> - <span><math><mtext>𝛰</mtext></math>=<span>1D6F0</span></span> - <span><math><mtext>𝛱</mtext></math>=<span>1D6F1</span></span> - <span><math><mtext>𝛲</mtext></math>=<span>1D6F2</span></span> - <span><math><mtext>𝛴</mtext></math>=<span>1D6F4</span></span> - <span><math><mtext>𝛵</mtext></math>=<span>1D6F5</span></span> - <span><math><mtext>𝛶</mtext></math>=<span>1D6F6</span></span> - <span><math><mtext>𝛷</mtext></math>=<span>1D6F7</span></span> - <span><math><mtext>𝛸</mtext></math>=<span>1D6F8</span></span> - <span><math><mtext>𝛹</mtext></math>=<span>1D6F9</span></span> - <span><math><mtext>𝛺</mtext></math>=<span>1D6FA</span></span><br/> - <span><math><mtext>𝛼</mtext></math>=<span>1D6FC</span></span> - <span><math><mtext>𝛽</mtext></math>=<span>1D6FD</span></span> - <span><math><mtext>𝛾</mtext></math>=<span>1D6FE</span></span> - <span><math><mtext>𝛿</mtext></math>=<span>1D6FF</span></span> - <span><math><mtext>𝜀</mtext></math>=<span>1D700</span></span> - <span><math><mtext>𝜁</mtext></math>=<span>1D701</span></span> - <span><math><mtext>𝜂</mtext></math>=<span>1D702</span></span> - <span><math><mtext>𝜃</mtext></math>=<span>1D703</span></span> - <span><math><mtext>𝜄</mtext></math>=<span>1D704</span></span> - <span><math><mtext>𝜅</mtext></math>=<span>1D705</span></span><br/> - <span><math><mtext>𝜆</mtext></math>=<span>1D706</span></span> - <span><math><mtext>𝜇</mtext></math>=<span>1D707</span></span> - <span><math><mtext>𝜈</mtext></math>=<span>1D708</span></span> - <span><math><mtext>𝜉</mtext></math>=<span>1D709</span></span> - <span><math><mtext>𝜊</mtext></math>=<span>1D70A</span></span> - <span><math><mtext>𝜋</mtext></math>=<span>1D70B</span></span> - <span><math><mtext>𝜌</mtext></math>=<span>1D70C</span></span> - <span><math><mtext>𝜍</mtext></math>=<span>1D70D</span></span> - <span><math><mtext>𝜎</mtext></math>=<span>1D70E</span></span> - <span><math><mtext>𝜏</mtext></math>=<span>1D70F</span></span><br/> - <span><math><mtext>𝜐</mtext></math>=<span>1D710</span></span> - <span><math><mtext>𝜑</mtext></math>=<span>1D711</span></span> - <span><math><mtext>𝜒</mtext></math>=<span>1D712</span></span> - <span><math><mtext>𝜓</mtext></math>=<span>1D713</span></span> - <span><math><mtext>𝜔</mtext></math>=<span>1D714</span></span> - <span><math><mtext>𝜗</mtext></math>=<span>1D717</span></span> - <span><math><mtext>𝜙</mtext></math>=<span>1D719</span></span> - <span><math><mtext>𝜛</mtext></math>=<span>1D71B</span></span> - <span><math><mtext>𝜘</mtext></math>=<span>1D718</span></span> - <span><math><mtext>𝜚</mtext></math>=<span>1D71A</span></span><br/> - <span><math><mtext>𝛳</mtext></math>=<span>1D6F3</span></span> - <span><math><mtext>𝜖</mtext></math>=<span>1D716</span></span> + <span><math class="testfont"><mtext>𝜕</mtext></math>=<span>1D715</span></span> + <span><math class="testfont"><mtext>𝛻</mtext></math>=<span>1D6FB</span></span> + <span><math class="testfont"><mtext>𝚥</mtext></math>=<span>1D6A5</span></span> + <span><math class="testfont"><mtext>𝐴</mtext></math>=<span>1D434</span></span> + <span><math class="testfont"><mtext>𝐵</mtext></math>=<span>1D435</span></span> + <span><math class="testfont"><mtext>𝐶</mtext></math>=<span>1D436</span></span> + <span><math class="testfont"><mtext>𝐷</mtext></math>=<span>1D437</span></span> + <span><math class="testfont"><mtext>𝐸</mtext></math>=<span>1D438</span></span> + <span><math class="testfont"><mtext>𝐹</mtext></math>=<span>1D439</span></span> + <span><math class="testfont"><mtext>𝐺</mtext></math>=<span>1D43A</span></span><br/> + <span><math class="testfont"><mtext>𝐻</mtext></math>=<span>1D43B</span></span> + <span><math class="testfont"><mtext>𝐼</mtext></math>=<span>1D43C</span></span> + <span><math class="testfont"><mtext>𝐽</mtext></math>=<span>1D43D</span></span> + <span><math class="testfont"><mtext>𝐾</mtext></math>=<span>1D43E</span></span> + <span><math class="testfont"><mtext>𝐿</mtext></math>=<span>1D43F</span></span> + <span><math class="testfont"><mtext>𝑀</mtext></math>=<span>1D440</span></span> + <span><math class="testfont"><mtext>𝑁</mtext></math>=<span>1D441</span></span> + <span><math class="testfont"><mtext>𝑂</mtext></math>=<span>1D442</span></span> + <span><math class="testfont"><mtext>𝑃</mtext></math>=<span>1D443</span></span> + <span><math class="testfont"><mtext>𝑄</mtext></math>=<span>1D444</span></span><br/> + <span><math class="testfont"><mtext>𝑅</mtext></math>=<span>1D445</span></span> + <span><math class="testfont"><mtext>𝑆</mtext></math>=<span>1D446</span></span> + <span><math class="testfont"><mtext>𝑇</mtext></math>=<span>1D447</span></span> + <span><math class="testfont"><mtext>𝑈</mtext></math>=<span>1D448</span></span> + <span><math class="testfont"><mtext>𝑉</mtext></math>=<span>1D449</span></span> + <span><math class="testfont"><mtext>𝑊</mtext></math>=<span>1D44A</span></span> + <span><math class="testfont"><mtext>𝑋</mtext></math>=<span>1D44B</span></span> + <span><math class="testfont"><mtext>𝑌</mtext></math>=<span>1D44C</span></span> + <span><math class="testfont"><mtext>𝑍</mtext></math>=<span>1D44D</span></span> + <span><math class="testfont"><mtext>𝑎</mtext></math>=<span>1D44E</span></span><br/> + <span><math class="testfont"><mtext>𝑏</mtext></math>=<span>1D44F</span></span> + <span><math class="testfont"><mtext>𝑐</mtext></math>=<span>1D450</span></span> + <span><math class="testfont"><mtext>𝑑</mtext></math>=<span>1D451</span></span> + <span><math class="testfont"><mtext>𝑒</mtext></math>=<span>1D452</span></span> + <span><math class="testfont"><mtext>𝑓</mtext></math>=<span>1D453</span></span> + <span><math class="testfont"><mtext>𝑔</mtext></math>=<span>1D454</span></span> + <span><math class="testfont"><mtext>ℎ</mtext></math>=<span>0210E</span></span> + <span><math class="testfont"><mtext>𝑖</mtext></math>=<span>1D456</span></span> + <span><math class="testfont"><mtext>𝑗</mtext></math>=<span>1D457</span></span> + <span><math class="testfont"><mtext>𝑘</mtext></math>=<span>1D458</span></span><br/> + <span><math class="testfont"><mtext>𝑙</mtext></math>=<span>1D459</span></span> + <span><math class="testfont"><mtext>𝑚</mtext></math>=<span>1D45A</span></span> + <span><math class="testfont"><mtext>𝑛</mtext></math>=<span>1D45B</span></span> + <span><math class="testfont"><mtext>𝑜</mtext></math>=<span>1D45C</span></span> + <span><math class="testfont"><mtext>𝑝</mtext></math>=<span>1D45D</span></span> + <span><math class="testfont"><mtext>𝑞</mtext></math>=<span>1D45E</span></span> + <span><math class="testfont"><mtext>𝑟</mtext></math>=<span>1D45F</span></span> + <span><math class="testfont"><mtext>𝑠</mtext></math>=<span>1D460</span></span> + <span><math class="testfont"><mtext>𝑡</mtext></math>=<span>1D461</span></span> + <span><math class="testfont"><mtext>𝑢</mtext></math>=<span>1D462</span></span><br/> + <span><math class="testfont"><mtext>𝑣</mtext></math>=<span>1D463</span></span> + <span><math class="testfont"><mtext>𝑤</mtext></math>=<span>1D464</span></span> + <span><math class="testfont"><mtext>𝑥</mtext></math>=<span>1D465</span></span> + <span><math class="testfont"><mtext>𝑦</mtext></math>=<span>1D466</span></span> + <span><math class="testfont"><mtext>𝑧</mtext></math>=<span>1D467</span></span> + <span><math class="testfont"><mtext>𝚤</mtext></math>=<span>1D6A4</span></span> + <span><math class="testfont"><mtext>𝛢</mtext></math>=<span>1D6E2</span></span> + <span><math class="testfont"><mtext>𝛣</mtext></math>=<span>1D6E3</span></span> + <span><math class="testfont"><mtext>𝛤</mtext></math>=<span>1D6E4</span></span> + <span><math class="testfont"><mtext>𝛥</mtext></math>=<span>1D6E5</span></span><br/> + <span><math class="testfont"><mtext>𝛦</mtext></math>=<span>1D6E6</span></span> + <span><math class="testfont"><mtext>𝛧</mtext></math>=<span>1D6E7</span></span> + <span><math class="testfont"><mtext>𝛨</mtext></math>=<span>1D6E8</span></span> + <span><math class="testfont"><mtext>𝛩</mtext></math>=<span>1D6E9</span></span> + <span><math class="testfont"><mtext>𝛪</mtext></math>=<span>1D6EA</span></span> + <span><math class="testfont"><mtext>𝛫</mtext></math>=<span>1D6EB</span></span> + <span><math class="testfont"><mtext>𝛬</mtext></math>=<span>1D6EC</span></span> + <span><math class="testfont"><mtext>𝛭</mtext></math>=<span>1D6ED</span></span> + <span><math class="testfont"><mtext>𝛮</mtext></math>=<span>1D6EE</span></span> + <span><math class="testfont"><mtext>𝛯</mtext></math>=<span>1D6EF</span></span><br/> + <span><math class="testfont"><mtext>𝛰</mtext></math>=<span>1D6F0</span></span> + <span><math class="testfont"><mtext>𝛱</mtext></math>=<span>1D6F1</span></span> + <span><math class="testfont"><mtext>𝛲</mtext></math>=<span>1D6F2</span></span> + <span><math class="testfont"><mtext>𝛴</mtext></math>=<span>1D6F4</span></span> + <span><math class="testfont"><mtext>𝛵</mtext></math>=<span>1D6F5</span></span> + <span><math class="testfont"><mtext>𝛶</mtext></math>=<span>1D6F6</span></span> + <span><math class="testfont"><mtext>𝛷</mtext></math>=<span>1D6F7</span></span> + <span><math class="testfont"><mtext>𝛸</mtext></math>=<span>1D6F8</span></span> + <span><math class="testfont"><mtext>𝛹</mtext></math>=<span>1D6F9</span></span> + <span><math class="testfont"><mtext>𝛺</mtext></math>=<span>1D6FA</span></span><br/> + <span><math class="testfont"><mtext>𝛼</mtext></math>=<span>1D6FC</span></span> + <span><math class="testfont"><mtext>𝛽</mtext></math>=<span>1D6FD</span></span> + <span><math class="testfont"><mtext>𝛾</mtext></math>=<span>1D6FE</span></span> + <span><math class="testfont"><mtext>𝛿</mtext></math>=<span>1D6FF</span></span> + <span><math class="testfont"><mtext>𝜀</mtext></math>=<span>1D700</span></span> + <span><math class="testfont"><mtext>𝜁</mtext></math>=<span>1D701</span></span> + <span><math class="testfont"><mtext>𝜂</mtext></math>=<span>1D702</span></span> + <span><math class="testfont"><mtext>𝜃</mtext></math>=<span>1D703</span></span> + <span><math class="testfont"><mtext>𝜄</mtext></math>=<span>1D704</span></span> + <span><math class="testfont"><mtext>𝜅</mtext></math>=<span>1D705</span></span><br/> + <span><math class="testfont"><mtext>𝜆</mtext></math>=<span>1D706</span></span> + <span><math class="testfont"><mtext>𝜇</mtext></math>=<span>1D707</span></span> + <span><math class="testfont"><mtext>𝜈</mtext></math>=<span>1D708</span></span> + <span><math class="testfont"><mtext>𝜉</mtext></math>=<span>1D709</span></span> + <span><math class="testfont"><mtext>𝜊</mtext></math>=<span>1D70A</span></span> + <span><math class="testfont"><mtext>𝜋</mtext></math>=<span>1D70B</span></span> + <span><math class="testfont"><mtext>𝜌</mtext></math>=<span>1D70C</span></span> + <span><math class="testfont"><mtext>𝜍</mtext></math>=<span>1D70D</span></span> + <span><math class="testfont"><mtext>𝜎</mtext></math>=<span>1D70E</span></span> + <span><math class="testfont"><mtext>𝜏</mtext></math>=<span>1D70F</span></span><br/> + <span><math class="testfont"><mtext>𝜐</mtext></math>=<span>1D710</span></span> + <span><math class="testfont"><mtext>𝜑</mtext></math>=<span>1D711</span></span> + <span><math class="testfont"><mtext>𝜒</mtext></math>=<span>1D712</span></span> + <span><math class="testfont"><mtext>𝜓</mtext></math>=<span>1D713</span></span> + <span><math class="testfont"><mtext>𝜔</mtext></math>=<span>1D714</span></span> + <span><math class="testfont"><mtext>𝜗</mtext></math>=<span>1D717</span></span> + <span><math class="testfont"><mtext>𝜙</mtext></math>=<span>1D719</span></span> + <span><math class="testfont"><mtext>𝜛</mtext></math>=<span>1D71B</span></span> + <span><math class="testfont"><mtext>𝜘</mtext></math>=<span>1D718</span></span> + <span><math class="testfont"><mtext>𝜚</mtext></math>=<span>1D71A</span></span><br/> + <span><math class="testfont"><mtext>𝛳</mtext></math>=<span>1D6F3</span></span> + <span><math class="testfont"><mtext>𝜖</mtext></math>=<span>1D716</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html index 4cf3de04..f30a2c7 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-italic.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,117 +28,117 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="italic">∂</mtext></math>=<span>1D715</span></span> - <span><math><mtext mathvariant="italic">∇</mtext></math>=<span>1D6FB</span></span> - <span><math><mtext mathvariant="italic">ȷ</mtext></math>=<span>1D6A5</span></span> - <span><math><mtext mathvariant="italic">A</mtext></math>=<span>1D434</span></span> - <span><math><mtext mathvariant="italic">B</mtext></math>=<span>1D435</span></span> - <span><math><mtext mathvariant="italic">C</mtext></math>=<span>1D436</span></span> - <span><math><mtext mathvariant="italic">D</mtext></math>=<span>1D437</span></span> - <span><math><mtext mathvariant="italic">E</mtext></math>=<span>1D438</span></span> - <span><math><mtext mathvariant="italic">F</mtext></math>=<span>1D439</span></span> - <span><math><mtext mathvariant="italic">G</mtext></math>=<span>1D43A</span></span><br/> - <span><math><mtext mathvariant="italic">H</mtext></math>=<span>1D43B</span></span> - <span><math><mtext mathvariant="italic">I</mtext></math>=<span>1D43C</span></span> - <span><math><mtext mathvariant="italic">J</mtext></math>=<span>1D43D</span></span> - <span><math><mtext mathvariant="italic">K</mtext></math>=<span>1D43E</span></span> - <span><math><mtext mathvariant="italic">L</mtext></math>=<span>1D43F</span></span> - <span><math><mtext mathvariant="italic">M</mtext></math>=<span>1D440</span></span> - <span><math><mtext mathvariant="italic">N</mtext></math>=<span>1D441</span></span> - <span><math><mtext mathvariant="italic">O</mtext></math>=<span>1D442</span></span> - <span><math><mtext mathvariant="italic">P</mtext></math>=<span>1D443</span></span> - <span><math><mtext mathvariant="italic">Q</mtext></math>=<span>1D444</span></span><br/> - <span><math><mtext mathvariant="italic">R</mtext></math>=<span>1D445</span></span> - <span><math><mtext mathvariant="italic">S</mtext></math>=<span>1D446</span></span> - <span><math><mtext mathvariant="italic">T</mtext></math>=<span>1D447</span></span> - <span><math><mtext mathvariant="italic">U</mtext></math>=<span>1D448</span></span> - <span><math><mtext mathvariant="italic">V</mtext></math>=<span>1D449</span></span> - <span><math><mtext mathvariant="italic">W</mtext></math>=<span>1D44A</span></span> - <span><math><mtext mathvariant="italic">X</mtext></math>=<span>1D44B</span></span> - <span><math><mtext mathvariant="italic">Y</mtext></math>=<span>1D44C</span></span> - <span><math><mtext mathvariant="italic">Z</mtext></math>=<span>1D44D</span></span> - <span><math><mtext mathvariant="italic">a</mtext></math>=<span>1D44E</span></span><br/> - <span><math><mtext mathvariant="italic">b</mtext></math>=<span>1D44F</span></span> - <span><math><mtext mathvariant="italic">c</mtext></math>=<span>1D450</span></span> - <span><math><mtext mathvariant="italic">d</mtext></math>=<span>1D451</span></span> - <span><math><mtext mathvariant="italic">e</mtext></math>=<span>1D452</span></span> - <span><math><mtext mathvariant="italic">f</mtext></math>=<span>1D453</span></span> - <span><math><mtext mathvariant="italic">g</mtext></math>=<span>1D454</span></span> - <span><math><mtext mathvariant="italic">h</mtext></math>=<span>0210E</span></span> - <span><math><mtext mathvariant="italic">i</mtext></math>=<span>1D456</span></span> - <span><math><mtext mathvariant="italic">j</mtext></math>=<span>1D457</span></span> - <span><math><mtext mathvariant="italic">k</mtext></math>=<span>1D458</span></span><br/> - <span><math><mtext mathvariant="italic">l</mtext></math>=<span>1D459</span></span> - <span><math><mtext mathvariant="italic">m</mtext></math>=<span>1D45A</span></span> - <span><math><mtext mathvariant="italic">n</mtext></math>=<span>1D45B</span></span> - <span><math><mtext mathvariant="italic">o</mtext></math>=<span>1D45C</span></span> - <span><math><mtext mathvariant="italic">p</mtext></math>=<span>1D45D</span></span> - <span><math><mtext mathvariant="italic">q</mtext></math>=<span>1D45E</span></span> - <span><math><mtext mathvariant="italic">r</mtext></math>=<span>1D45F</span></span> - <span><math><mtext mathvariant="italic">s</mtext></math>=<span>1D460</span></span> - <span><math><mtext mathvariant="italic">t</mtext></math>=<span>1D461</span></span> - <span><math><mtext mathvariant="italic">u</mtext></math>=<span>1D462</span></span><br/> - <span><math><mtext mathvariant="italic">v</mtext></math>=<span>1D463</span></span> - <span><math><mtext mathvariant="italic">w</mtext></math>=<span>1D464</span></span> - <span><math><mtext mathvariant="italic">x</mtext></math>=<span>1D465</span></span> - <span><math><mtext mathvariant="italic">y</mtext></math>=<span>1D466</span></span> - <span><math><mtext mathvariant="italic">z</mtext></math>=<span>1D467</span></span> - <span><math><mtext mathvariant="italic">ı</mtext></math>=<span>1D6A4</span></span> - <span><math><mtext mathvariant="italic">Α</mtext></math>=<span>1D6E2</span></span> - <span><math><mtext mathvariant="italic">Β</mtext></math>=<span>1D6E3</span></span> - <span><math><mtext mathvariant="italic">Γ</mtext></math>=<span>1D6E4</span></span> - <span><math><mtext mathvariant="italic">Δ</mtext></math>=<span>1D6E5</span></span><br/> - <span><math><mtext mathvariant="italic">Ε</mtext></math>=<span>1D6E6</span></span> - <span><math><mtext mathvariant="italic">Ζ</mtext></math>=<span>1D6E7</span></span> - <span><math><mtext mathvariant="italic">Η</mtext></math>=<span>1D6E8</span></span> - <span><math><mtext mathvariant="italic">Θ</mtext></math>=<span>1D6E9</span></span> - <span><math><mtext mathvariant="italic">Ι</mtext></math>=<span>1D6EA</span></span> - <span><math><mtext mathvariant="italic">Κ</mtext></math>=<span>1D6EB</span></span> - <span><math><mtext mathvariant="italic">Λ</mtext></math>=<span>1D6EC</span></span> - <span><math><mtext mathvariant="italic">Μ</mtext></math>=<span>1D6ED</span></span> - <span><math><mtext mathvariant="italic">Ν</mtext></math>=<span>1D6EE</span></span> - <span><math><mtext mathvariant="italic">Ξ</mtext></math>=<span>1D6EF</span></span><br/> - <span><math><mtext mathvariant="italic">Ο</mtext></math>=<span>1D6F0</span></span> - <span><math><mtext mathvariant="italic">Π</mtext></math>=<span>1D6F1</span></span> - <span><math><mtext mathvariant="italic">Ρ</mtext></math>=<span>1D6F2</span></span> - <span><math><mtext mathvariant="italic">Σ</mtext></math>=<span>1D6F4</span></span> - <span><math><mtext mathvariant="italic">Τ</mtext></math>=<span>1D6F5</span></span> - <span><math><mtext mathvariant="italic">Υ</mtext></math>=<span>1D6F6</span></span> - <span><math><mtext mathvariant="italic">Φ</mtext></math>=<span>1D6F7</span></span> - <span><math><mtext mathvariant="italic">Χ</mtext></math>=<span>1D6F8</span></span> - <span><math><mtext mathvariant="italic">Ψ</mtext></math>=<span>1D6F9</span></span> - <span><math><mtext mathvariant="italic">Ω</mtext></math>=<span>1D6FA</span></span><br/> - <span><math><mtext mathvariant="italic">α</mtext></math>=<span>1D6FC</span></span> - <span><math><mtext mathvariant="italic">β</mtext></math>=<span>1D6FD</span></span> - <span><math><mtext mathvariant="italic">γ</mtext></math>=<span>1D6FE</span></span> - <span><math><mtext mathvariant="italic">δ</mtext></math>=<span>1D6FF</span></span> - <span><math><mtext mathvariant="italic">ε</mtext></math>=<span>1D700</span></span> - <span><math><mtext mathvariant="italic">ζ</mtext></math>=<span>1D701</span></span> - <span><math><mtext mathvariant="italic">η</mtext></math>=<span>1D702</span></span> - <span><math><mtext mathvariant="italic">θ</mtext></math>=<span>1D703</span></span> - <span><math><mtext mathvariant="italic">ι</mtext></math>=<span>1D704</span></span> - <span><math><mtext mathvariant="italic">κ</mtext></math>=<span>1D705</span></span><br/> - <span><math><mtext mathvariant="italic">λ</mtext></math>=<span>1D706</span></span> - <span><math><mtext mathvariant="italic">μ</mtext></math>=<span>1D707</span></span> - <span><math><mtext mathvariant="italic">ν</mtext></math>=<span>1D708</span></span> - <span><math><mtext mathvariant="italic">ξ</mtext></math>=<span>1D709</span></span> - <span><math><mtext mathvariant="italic">ο</mtext></math>=<span>1D70A</span></span> - <span><math><mtext mathvariant="italic">π</mtext></math>=<span>1D70B</span></span> - <span><math><mtext mathvariant="italic">ρ</mtext></math>=<span>1D70C</span></span> - <span><math><mtext mathvariant="italic">ς</mtext></math>=<span>1D70D</span></span> - <span><math><mtext mathvariant="italic">σ</mtext></math>=<span>1D70E</span></span> - <span><math><mtext mathvariant="italic">τ</mtext></math>=<span>1D70F</span></span><br/> - <span><math><mtext mathvariant="italic">υ</mtext></math>=<span>1D710</span></span> - <span><math><mtext mathvariant="italic">φ</mtext></math>=<span>1D711</span></span> - <span><math><mtext mathvariant="italic">χ</mtext></math>=<span>1D712</span></span> - <span><math><mtext mathvariant="italic">ψ</mtext></math>=<span>1D713</span></span> - <span><math><mtext mathvariant="italic">ω</mtext></math>=<span>1D714</span></span> - <span><math><mtext mathvariant="italic">ϑ</mtext></math>=<span>1D717</span></span> - <span><math><mtext mathvariant="italic">ϕ</mtext></math>=<span>1D719</span></span> - <span><math><mtext mathvariant="italic">ϖ</mtext></math>=<span>1D71B</span></span> - <span><math><mtext mathvariant="italic">ϰ</mtext></math>=<span>1D718</span></span> - <span><math><mtext mathvariant="italic">ϱ</mtext></math>=<span>1D71A</span></span><br/> - <span><math><mtext mathvariant="italic">ϴ</mtext></math>=<span>1D6F3</span></span> - <span><math><mtext mathvariant="italic">ϵ</mtext></math>=<span>1D716</span></span> + <span><math class="testfont"><mtext mathvariant="italic">∂</mtext></math>=<span>1D715</span></span> + <span><math class="testfont"><mtext mathvariant="italic">∇</mtext></math>=<span>1D6FB</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ȷ</mtext></math>=<span>1D6A5</span></span> + <span><math class="testfont"><mtext mathvariant="italic">A</mtext></math>=<span>1D434</span></span> + <span><math class="testfont"><mtext mathvariant="italic">B</mtext></math>=<span>1D435</span></span> + <span><math class="testfont"><mtext mathvariant="italic">C</mtext></math>=<span>1D436</span></span> + <span><math class="testfont"><mtext mathvariant="italic">D</mtext></math>=<span>1D437</span></span> + <span><math class="testfont"><mtext mathvariant="italic">E</mtext></math>=<span>1D438</span></span> + <span><math class="testfont"><mtext mathvariant="italic">F</mtext></math>=<span>1D439</span></span> + <span><math class="testfont"><mtext mathvariant="italic">G</mtext></math>=<span>1D43A</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">H</mtext></math>=<span>1D43B</span></span> + <span><math class="testfont"><mtext mathvariant="italic">I</mtext></math>=<span>1D43C</span></span> + <span><math class="testfont"><mtext mathvariant="italic">J</mtext></math>=<span>1D43D</span></span> + <span><math class="testfont"><mtext mathvariant="italic">K</mtext></math>=<span>1D43E</span></span> + <span><math class="testfont"><mtext mathvariant="italic">L</mtext></math>=<span>1D43F</span></span> + <span><math class="testfont"><mtext mathvariant="italic">M</mtext></math>=<span>1D440</span></span> + <span><math class="testfont"><mtext mathvariant="italic">N</mtext></math>=<span>1D441</span></span> + <span><math class="testfont"><mtext mathvariant="italic">O</mtext></math>=<span>1D442</span></span> + <span><math class="testfont"><mtext mathvariant="italic">P</mtext></math>=<span>1D443</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Q</mtext></math>=<span>1D444</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">R</mtext></math>=<span>1D445</span></span> + <span><math class="testfont"><mtext mathvariant="italic">S</mtext></math>=<span>1D446</span></span> + <span><math class="testfont"><mtext mathvariant="italic">T</mtext></math>=<span>1D447</span></span> + <span><math class="testfont"><mtext mathvariant="italic">U</mtext></math>=<span>1D448</span></span> + <span><math class="testfont"><mtext mathvariant="italic">V</mtext></math>=<span>1D449</span></span> + <span><math class="testfont"><mtext mathvariant="italic">W</mtext></math>=<span>1D44A</span></span> + <span><math class="testfont"><mtext mathvariant="italic">X</mtext></math>=<span>1D44B</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Y</mtext></math>=<span>1D44C</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Z</mtext></math>=<span>1D44D</span></span> + <span><math class="testfont"><mtext mathvariant="italic">a</mtext></math>=<span>1D44E</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">b</mtext></math>=<span>1D44F</span></span> + <span><math class="testfont"><mtext mathvariant="italic">c</mtext></math>=<span>1D450</span></span> + <span><math class="testfont"><mtext mathvariant="italic">d</mtext></math>=<span>1D451</span></span> + <span><math class="testfont"><mtext mathvariant="italic">e</mtext></math>=<span>1D452</span></span> + <span><math class="testfont"><mtext mathvariant="italic">f</mtext></math>=<span>1D453</span></span> + <span><math class="testfont"><mtext mathvariant="italic">g</mtext></math>=<span>1D454</span></span> + <span><math class="testfont"><mtext mathvariant="italic">h</mtext></math>=<span>0210E</span></span> + <span><math class="testfont"><mtext mathvariant="italic">i</mtext></math>=<span>1D456</span></span> + <span><math class="testfont"><mtext mathvariant="italic">j</mtext></math>=<span>1D457</span></span> + <span><math class="testfont"><mtext mathvariant="italic">k</mtext></math>=<span>1D458</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">l</mtext></math>=<span>1D459</span></span> + <span><math class="testfont"><mtext mathvariant="italic">m</mtext></math>=<span>1D45A</span></span> + <span><math class="testfont"><mtext mathvariant="italic">n</mtext></math>=<span>1D45B</span></span> + <span><math class="testfont"><mtext mathvariant="italic">o</mtext></math>=<span>1D45C</span></span> + <span><math class="testfont"><mtext mathvariant="italic">p</mtext></math>=<span>1D45D</span></span> + <span><math class="testfont"><mtext mathvariant="italic">q</mtext></math>=<span>1D45E</span></span> + <span><math class="testfont"><mtext mathvariant="italic">r</mtext></math>=<span>1D45F</span></span> + <span><math class="testfont"><mtext mathvariant="italic">s</mtext></math>=<span>1D460</span></span> + <span><math class="testfont"><mtext mathvariant="italic">t</mtext></math>=<span>1D461</span></span> + <span><math class="testfont"><mtext mathvariant="italic">u</mtext></math>=<span>1D462</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">v</mtext></math>=<span>1D463</span></span> + <span><math class="testfont"><mtext mathvariant="italic">w</mtext></math>=<span>1D464</span></span> + <span><math class="testfont"><mtext mathvariant="italic">x</mtext></math>=<span>1D465</span></span> + <span><math class="testfont"><mtext mathvariant="italic">y</mtext></math>=<span>1D466</span></span> + <span><math class="testfont"><mtext mathvariant="italic">z</mtext></math>=<span>1D467</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ı</mtext></math>=<span>1D6A4</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Α</mtext></math>=<span>1D6E2</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Β</mtext></math>=<span>1D6E3</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Γ</mtext></math>=<span>1D6E4</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Δ</mtext></math>=<span>1D6E5</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">Ε</mtext></math>=<span>1D6E6</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ζ</mtext></math>=<span>1D6E7</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Η</mtext></math>=<span>1D6E8</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Θ</mtext></math>=<span>1D6E9</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ι</mtext></math>=<span>1D6EA</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Κ</mtext></math>=<span>1D6EB</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Λ</mtext></math>=<span>1D6EC</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Μ</mtext></math>=<span>1D6ED</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ν</mtext></math>=<span>1D6EE</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ξ</mtext></math>=<span>1D6EF</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">Ο</mtext></math>=<span>1D6F0</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Π</mtext></math>=<span>1D6F1</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ρ</mtext></math>=<span>1D6F2</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Σ</mtext></math>=<span>1D6F4</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Τ</mtext></math>=<span>1D6F5</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Υ</mtext></math>=<span>1D6F6</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Φ</mtext></math>=<span>1D6F7</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Χ</mtext></math>=<span>1D6F8</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ψ</mtext></math>=<span>1D6F9</span></span> + <span><math class="testfont"><mtext mathvariant="italic">Ω</mtext></math>=<span>1D6FA</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">α</mtext></math>=<span>1D6FC</span></span> + <span><math class="testfont"><mtext mathvariant="italic">β</mtext></math>=<span>1D6FD</span></span> + <span><math class="testfont"><mtext mathvariant="italic">γ</mtext></math>=<span>1D6FE</span></span> + <span><math class="testfont"><mtext mathvariant="italic">δ</mtext></math>=<span>1D6FF</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ε</mtext></math>=<span>1D700</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ζ</mtext></math>=<span>1D701</span></span> + <span><math class="testfont"><mtext mathvariant="italic">η</mtext></math>=<span>1D702</span></span> + <span><math class="testfont"><mtext mathvariant="italic">θ</mtext></math>=<span>1D703</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ι</mtext></math>=<span>1D704</span></span> + <span><math class="testfont"><mtext mathvariant="italic">κ</mtext></math>=<span>1D705</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">λ</mtext></math>=<span>1D706</span></span> + <span><math class="testfont"><mtext mathvariant="italic">μ</mtext></math>=<span>1D707</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ν</mtext></math>=<span>1D708</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ξ</mtext></math>=<span>1D709</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ο</mtext></math>=<span>1D70A</span></span> + <span><math class="testfont"><mtext mathvariant="italic">π</mtext></math>=<span>1D70B</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ρ</mtext></math>=<span>1D70C</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ς</mtext></math>=<span>1D70D</span></span> + <span><math class="testfont"><mtext mathvariant="italic">σ</mtext></math>=<span>1D70E</span></span> + <span><math class="testfont"><mtext mathvariant="italic">τ</mtext></math>=<span>1D70F</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">υ</mtext></math>=<span>1D710</span></span> + <span><math class="testfont"><mtext mathvariant="italic">φ</mtext></math>=<span>1D711</span></span> + <span><math class="testfont"><mtext mathvariant="italic">χ</mtext></math>=<span>1D712</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ψ</mtext></math>=<span>1D713</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ω</mtext></math>=<span>1D714</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ϑ</mtext></math>=<span>1D717</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ϕ</mtext></math>=<span>1D719</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ϖ</mtext></math>=<span>1D71B</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ϰ</mtext></math>=<span>1D718</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ϱ</mtext></math>=<span>1D71A</span></span><br/> + <span><math class="testfont"><mtext mathvariant="italic">ϴ</mtext></math>=<span>1D6F3</span></span> + <span><math class="testfont"><mtext mathvariant="italic">ϵ</mtext></math>=<span>1D716</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped-ref.html index 49bafef..12ccb49 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,32 +23,32 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𞺀</mtext></math>=<span>1EE80</span></span> - <span><math><mtext>𞺁</mtext></math>=<span>1EE81</span></span> - <span><math><mtext>𞺕</mtext></math>=<span>1EE95</span></span> - <span><math><mtext>𞺖</mtext></math>=<span>1EE96</span></span> - <span><math><mtext>𞺂</mtext></math>=<span>1EE82</span></span> - <span><math><mtext>𞺇</mtext></math>=<span>1EE87</span></span> - <span><math><mtext>𞺗</mtext></math>=<span>1EE97</span></span> - <span><math><mtext>𞺃</mtext></math>=<span>1EE83</span></span> - <span><math><mtext>𞺘</mtext></math>=<span>1EE98</span></span> - <span><math><mtext>𞺓</mtext></math>=<span>1EE93</span></span><br/> - <span><math><mtext>𞺆</mtext></math>=<span>1EE86</span></span> - <span><math><mtext>𞺎</mtext></math>=<span>1EE8E</span></span> - <span><math><mtext>𞺔</mtext></math>=<span>1EE94</span></span> - <span><math><mtext>𞺑</mtext></math>=<span>1EE91</span></span> - <span><math><mtext>𞺙</mtext></math>=<span>1EE99</span></span> - <span><math><mtext>𞺈</mtext></math>=<span>1EE88</span></span> - <span><math><mtext>𞺚</mtext></math>=<span>1EE9A</span></span> - <span><math><mtext>𞺏</mtext></math>=<span>1EE8F</span></span> - <span><math><mtext>𞺛</mtext></math>=<span>1EE9B</span></span> - <span><math><mtext>𞺐</mtext></math>=<span>1EE90</span></span><br/> - <span><math><mtext>𞺒</mtext></math>=<span>1EE92</span></span> - <span><math><mtext>𞺋</mtext></math>=<span>1EE8B</span></span> - <span><math><mtext>𞺌</mtext></math>=<span>1EE8C</span></span> - <span><math><mtext>𞺍</mtext></math>=<span>1EE8D</span></span> - <span><math><mtext>𞺄</mtext></math>=<span>1EE84</span></span> - <span><math><mtext>𞺅</mtext></math>=<span>1EE85</span></span> - <span><math><mtext>𞺉</mtext></math>=<span>1EE89</span></span> + <span><math class="testfont"><mtext>𞺀</mtext></math>=<span>1EE80</span></span> + <span><math class="testfont"><mtext>𞺁</mtext></math>=<span>1EE81</span></span> + <span><math class="testfont"><mtext>𞺕</mtext></math>=<span>1EE95</span></span> + <span><math class="testfont"><mtext>𞺖</mtext></math>=<span>1EE96</span></span> + <span><math class="testfont"><mtext>𞺂</mtext></math>=<span>1EE82</span></span> + <span><math class="testfont"><mtext>𞺇</mtext></math>=<span>1EE87</span></span> + <span><math class="testfont"><mtext>𞺗</mtext></math>=<span>1EE97</span></span> + <span><math class="testfont"><mtext>𞺃</mtext></math>=<span>1EE83</span></span> + <span><math class="testfont"><mtext>𞺘</mtext></math>=<span>1EE98</span></span> + <span><math class="testfont"><mtext>𞺓</mtext></math>=<span>1EE93</span></span><br/> + <span><math class="testfont"><mtext>𞺆</mtext></math>=<span>1EE86</span></span> + <span><math class="testfont"><mtext>𞺎</mtext></math>=<span>1EE8E</span></span> + <span><math class="testfont"><mtext>𞺔</mtext></math>=<span>1EE94</span></span> + <span><math class="testfont"><mtext>𞺑</mtext></math>=<span>1EE91</span></span> + <span><math class="testfont"><mtext>𞺙</mtext></math>=<span>1EE99</span></span> + <span><math class="testfont"><mtext>𞺈</mtext></math>=<span>1EE88</span></span> + <span><math class="testfont"><mtext>𞺚</mtext></math>=<span>1EE9A</span></span> + <span><math class="testfont"><mtext>𞺏</mtext></math>=<span>1EE8F</span></span> + <span><math class="testfont"><mtext>𞺛</mtext></math>=<span>1EE9B</span></span> + <span><math class="testfont"><mtext>𞺐</mtext></math>=<span>1EE90</span></span><br/> + <span><math class="testfont"><mtext>𞺒</mtext></math>=<span>1EE92</span></span> + <span><math class="testfont"><mtext>𞺋</mtext></math>=<span>1EE8B</span></span> + <span><math class="testfont"><mtext>𞺌</mtext></math>=<span>1EE8C</span></span> + <span><math class="testfont"><mtext>𞺍</mtext></math>=<span>1EE8D</span></span> + <span><math class="testfont"><mtext>𞺄</mtext></math>=<span>1EE84</span></span> + <span><math class="testfont"><mtext>𞺅</mtext></math>=<span>1EE85</span></span> + <span><math class="testfont"><mtext>𞺉</mtext></math>=<span>1EE89</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html index 2a774c7..a673224 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-looped.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,32 +28,32 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="looped">ا</mtext></math>=<span>1EE80</span></span> - <span><math><mtext mathvariant="looped">ب</mtext></math>=<span>1EE81</span></span> - <span><math><mtext mathvariant="looped">ت</mtext></math>=<span>1EE95</span></span> - <span><math><mtext mathvariant="looped">ث</mtext></math>=<span>1EE96</span></span> - <span><math><mtext mathvariant="looped">ج</mtext></math>=<span>1EE82</span></span> - <span><math><mtext mathvariant="looped">ح</mtext></math>=<span>1EE87</span></span> - <span><math><mtext mathvariant="looped">خ</mtext></math>=<span>1EE97</span></span> - <span><math><mtext mathvariant="looped">د</mtext></math>=<span>1EE83</span></span> - <span><math><mtext mathvariant="looped">ذ</mtext></math>=<span>1EE98</span></span> - <span><math><mtext mathvariant="looped">ر</mtext></math>=<span>1EE93</span></span><br/> - <span><math><mtext mathvariant="looped">ز</mtext></math>=<span>1EE86</span></span> - <span><math><mtext mathvariant="looped">س</mtext></math>=<span>1EE8E</span></span> - <span><math><mtext mathvariant="looped">ش</mtext></math>=<span>1EE94</span></span> - <span><math><mtext mathvariant="looped">ص</mtext></math>=<span>1EE91</span></span> - <span><math><mtext mathvariant="looped">ض</mtext></math>=<span>1EE99</span></span> - <span><math><mtext mathvariant="looped">ط</mtext></math>=<span>1EE88</span></span> - <span><math><mtext mathvariant="looped">ظ</mtext></math>=<span>1EE9A</span></span> - <span><math><mtext mathvariant="looped">ع</mtext></math>=<span>1EE8F</span></span> - <span><math><mtext mathvariant="looped">غ</mtext></math>=<span>1EE9B</span></span> - <span><math><mtext mathvariant="looped">ف</mtext></math>=<span>1EE90</span></span><br/> - <span><math><mtext mathvariant="looped">ق</mtext></math>=<span>1EE92</span></span> - <span><math><mtext mathvariant="looped">ل</mtext></math>=<span>1EE8B</span></span> - <span><math><mtext mathvariant="looped">م</mtext></math>=<span>1EE8C</span></span> - <span><math><mtext mathvariant="looped">ن</mtext></math>=<span>1EE8D</span></span> - <span><math><mtext mathvariant="looped">ه</mtext></math>=<span>1EE84</span></span> - <span><math><mtext mathvariant="looped">و</mtext></math>=<span>1EE85</span></span> - <span><math><mtext mathvariant="looped">ي</mtext></math>=<span>1EE89</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ا</mtext></math>=<span>1EE80</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ب</mtext></math>=<span>1EE81</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ت</mtext></math>=<span>1EE95</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ث</mtext></math>=<span>1EE96</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ج</mtext></math>=<span>1EE82</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ح</mtext></math>=<span>1EE87</span></span> + <span><math class="testfont"><mtext mathvariant="looped">خ</mtext></math>=<span>1EE97</span></span> + <span><math class="testfont"><mtext mathvariant="looped">د</mtext></math>=<span>1EE83</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ذ</mtext></math>=<span>1EE98</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ر</mtext></math>=<span>1EE93</span></span><br/> + <span><math class="testfont"><mtext mathvariant="looped">ز</mtext></math>=<span>1EE86</span></span> + <span><math class="testfont"><mtext mathvariant="looped">س</mtext></math>=<span>1EE8E</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ش</mtext></math>=<span>1EE94</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ص</mtext></math>=<span>1EE91</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ض</mtext></math>=<span>1EE99</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ط</mtext></math>=<span>1EE88</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ظ</mtext></math>=<span>1EE9A</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ع</mtext></math>=<span>1EE8F</span></span> + <span><math class="testfont"><mtext mathvariant="looped">غ</mtext></math>=<span>1EE9B</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ف</mtext></math>=<span>1EE90</span></span><br/> + <span><math class="testfont"><mtext mathvariant="looped">ق</mtext></math>=<span>1EE92</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ل</mtext></math>=<span>1EE8B</span></span> + <span><math class="testfont"><mtext mathvariant="looped">م</mtext></math>=<span>1EE8C</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ن</mtext></math>=<span>1EE8D</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ه</mtext></math>=<span>1EE84</span></span> + <span><math class="testfont"><mtext mathvariant="looped">و</mtext></math>=<span>1EE85</span></span> + <span><math class="testfont"><mtext mathvariant="looped">ي</mtext></math>=<span>1EE89</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace-ref.html index 9b695a1..bfa672a 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,67 +23,67 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝟶</mtext></math>=<span>1D7F6</span></span> - <span><math><mtext>𝟷</mtext></math>=<span>1D7F7</span></span> - <span><math><mtext>𝟸</mtext></math>=<span>1D7F8</span></span> - <span><math><mtext>𝟹</mtext></math>=<span>1D7F9</span></span> - <span><math><mtext>𝟺</mtext></math>=<span>1D7FA</span></span> - <span><math><mtext>𝟻</mtext></math>=<span>1D7FB</span></span> - <span><math><mtext>𝟼</mtext></math>=<span>1D7FC</span></span> - <span><math><mtext>𝟽</mtext></math>=<span>1D7FD</span></span> - <span><math><mtext>𝟾</mtext></math>=<span>1D7FE</span></span> - <span><math><mtext>𝟿</mtext></math>=<span>1D7FF</span></span><br/> - <span><math><mtext>𝙰</mtext></math>=<span>1D670</span></span> - <span><math><mtext>𝙱</mtext></math>=<span>1D671</span></span> - <span><math><mtext>𝙲</mtext></math>=<span>1D672</span></span> - <span><math><mtext>𝙳</mtext></math>=<span>1D673</span></span> - <span><math><mtext>𝙴</mtext></math>=<span>1D674</span></span> - <span><math><mtext>𝙵</mtext></math>=<span>1D675</span></span> - <span><math><mtext>𝙶</mtext></math>=<span>1D676</span></span> - <span><math><mtext>𝙷</mtext></math>=<span>1D677</span></span> - <span><math><mtext>𝙸</mtext></math>=<span>1D678</span></span> - <span><math><mtext>𝙹</mtext></math>=<span>1D679</span></span><br/> - <span><math><mtext>𝙺</mtext></math>=<span>1D67A</span></span> - <span><math><mtext>𝙻</mtext></math>=<span>1D67B</span></span> - <span><math><mtext>𝙼</mtext></math>=<span>1D67C</span></span> - <span><math><mtext>𝙽</mtext></math>=<span>1D67D</span></span> - <span><math><mtext>𝙾</mtext></math>=<span>1D67E</span></span> - <span><math><mtext>𝙿</mtext></math>=<span>1D67F</span></span> - <span><math><mtext>𝚀</mtext></math>=<span>1D680</span></span> - <span><math><mtext>𝚁</mtext></math>=<span>1D681</span></span> - <span><math><mtext>𝚂</mtext></math>=<span>1D682</span></span> - <span><math><mtext>𝚃</mtext></math>=<span>1D683</span></span><br/> - <span><math><mtext>𝚄</mtext></math>=<span>1D684</span></span> - <span><math><mtext>𝚅</mtext></math>=<span>1D685</span></span> - <span><math><mtext>𝚆</mtext></math>=<span>1D686</span></span> - <span><math><mtext>𝚇</mtext></math>=<span>1D687</span></span> - <span><math><mtext>𝚈</mtext></math>=<span>1D688</span></span> - <span><math><mtext>𝚉</mtext></math>=<span>1D689</span></span> - <span><math><mtext>𝚊</mtext></math>=<span>1D68A</span></span> - <span><math><mtext>𝚋</mtext></math>=<span>1D68B</span></span> - <span><math><mtext>𝚌</mtext></math>=<span>1D68C</span></span> - <span><math><mtext>𝚍</mtext></math>=<span>1D68D</span></span><br/> - <span><math><mtext>𝚎</mtext></math>=<span>1D68E</span></span> - <span><math><mtext>𝚏</mtext></math>=<span>1D68F</span></span> - <span><math><mtext>𝚐</mtext></math>=<span>1D690</span></span> - <span><math><mtext>𝚑</mtext></math>=<span>1D691</span></span> - <span><math><mtext>𝚒</mtext></math>=<span>1D692</span></span> - <span><math><mtext>𝚓</mtext></math>=<span>1D693</span></span> - <span><math><mtext>𝚔</mtext></math>=<span>1D694</span></span> - <span><math><mtext>𝚕</mtext></math>=<span>1D695</span></span> - <span><math><mtext>𝚖</mtext></math>=<span>1D696</span></span> - <span><math><mtext>𝚗</mtext></math>=<span>1D697</span></span><br/> - <span><math><mtext>𝚘</mtext></math>=<span>1D698</span></span> - <span><math><mtext>𝚙</mtext></math>=<span>1D699</span></span> - <span><math><mtext>𝚚</mtext></math>=<span>1D69A</span></span> - <span><math><mtext>𝚛</mtext></math>=<span>1D69B</span></span> - <span><math><mtext>𝚜</mtext></math>=<span>1D69C</span></span> - <span><math><mtext>𝚝</mtext></math>=<span>1D69D</span></span> - <span><math><mtext>𝚞</mtext></math>=<span>1D69E</span></span> - <span><math><mtext>𝚟</mtext></math>=<span>1D69F</span></span> - <span><math><mtext>𝚠</mtext></math>=<span>1D6A0</span></span> - <span><math><mtext>𝚡</mtext></math>=<span>1D6A1</span></span><br/> - <span><math><mtext>𝚢</mtext></math>=<span>1D6A2</span></span> - <span><math><mtext>𝚣</mtext></math>=<span>1D6A3</span></span> + <span><math class="testfont"><mtext>𝟶</mtext></math>=<span>1D7F6</span></span> + <span><math class="testfont"><mtext>𝟷</mtext></math>=<span>1D7F7</span></span> + <span><math class="testfont"><mtext>𝟸</mtext></math>=<span>1D7F8</span></span> + <span><math class="testfont"><mtext>𝟹</mtext></math>=<span>1D7F9</span></span> + <span><math class="testfont"><mtext>𝟺</mtext></math>=<span>1D7FA</span></span> + <span><math class="testfont"><mtext>𝟻</mtext></math>=<span>1D7FB</span></span> + <span><math class="testfont"><mtext>𝟼</mtext></math>=<span>1D7FC</span></span> + <span><math class="testfont"><mtext>𝟽</mtext></math>=<span>1D7FD</span></span> + <span><math class="testfont"><mtext>𝟾</mtext></math>=<span>1D7FE</span></span> + <span><math class="testfont"><mtext>𝟿</mtext></math>=<span>1D7FF</span></span><br/> + <span><math class="testfont"><mtext>𝙰</mtext></math>=<span>1D670</span></span> + <span><math class="testfont"><mtext>𝙱</mtext></math>=<span>1D671</span></span> + <span><math class="testfont"><mtext>𝙲</mtext></math>=<span>1D672</span></span> + <span><math class="testfont"><mtext>𝙳</mtext></math>=<span>1D673</span></span> + <span><math class="testfont"><mtext>𝙴</mtext></math>=<span>1D674</span></span> + <span><math class="testfont"><mtext>𝙵</mtext></math>=<span>1D675</span></span> + <span><math class="testfont"><mtext>𝙶</mtext></math>=<span>1D676</span></span> + <span><math class="testfont"><mtext>𝙷</mtext></math>=<span>1D677</span></span> + <span><math class="testfont"><mtext>𝙸</mtext></math>=<span>1D678</span></span> + <span><math class="testfont"><mtext>𝙹</mtext></math>=<span>1D679</span></span><br/> + <span><math class="testfont"><mtext>𝙺</mtext></math>=<span>1D67A</span></span> + <span><math class="testfont"><mtext>𝙻</mtext></math>=<span>1D67B</span></span> + <span><math class="testfont"><mtext>𝙼</mtext></math>=<span>1D67C</span></span> + <span><math class="testfont"><mtext>𝙽</mtext></math>=<span>1D67D</span></span> + <span><math class="testfont"><mtext>𝙾</mtext></math>=<span>1D67E</span></span> + <span><math class="testfont"><mtext>𝙿</mtext></math>=<span>1D67F</span></span> + <span><math class="testfont"><mtext>𝚀</mtext></math>=<span>1D680</span></span> + <span><math class="testfont"><mtext>𝚁</mtext></math>=<span>1D681</span></span> + <span><math class="testfont"><mtext>𝚂</mtext></math>=<span>1D682</span></span> + <span><math class="testfont"><mtext>𝚃</mtext></math>=<span>1D683</span></span><br/> + <span><math class="testfont"><mtext>𝚄</mtext></math>=<span>1D684</span></span> + <span><math class="testfont"><mtext>𝚅</mtext></math>=<span>1D685</span></span> + <span><math class="testfont"><mtext>𝚆</mtext></math>=<span>1D686</span></span> + <span><math class="testfont"><mtext>𝚇</mtext></math>=<span>1D687</span></span> + <span><math class="testfont"><mtext>𝚈</mtext></math>=<span>1D688</span></span> + <span><math class="testfont"><mtext>𝚉</mtext></math>=<span>1D689</span></span> + <span><math class="testfont"><mtext>𝚊</mtext></math>=<span>1D68A</span></span> + <span><math class="testfont"><mtext>𝚋</mtext></math>=<span>1D68B</span></span> + <span><math class="testfont"><mtext>𝚌</mtext></math>=<span>1D68C</span></span> + <span><math class="testfont"><mtext>𝚍</mtext></math>=<span>1D68D</span></span><br/> + <span><math class="testfont"><mtext>𝚎</mtext></math>=<span>1D68E</span></span> + <span><math class="testfont"><mtext>𝚏</mtext></math>=<span>1D68F</span></span> + <span><math class="testfont"><mtext>𝚐</mtext></math>=<span>1D690</span></span> + <span><math class="testfont"><mtext>𝚑</mtext></math>=<span>1D691</span></span> + <span><math class="testfont"><mtext>𝚒</mtext></math>=<span>1D692</span></span> + <span><math class="testfont"><mtext>𝚓</mtext></math>=<span>1D693</span></span> + <span><math class="testfont"><mtext>𝚔</mtext></math>=<span>1D694</span></span> + <span><math class="testfont"><mtext>𝚕</mtext></math>=<span>1D695</span></span> + <span><math class="testfont"><mtext>𝚖</mtext></math>=<span>1D696</span></span> + <span><math class="testfont"><mtext>𝚗</mtext></math>=<span>1D697</span></span><br/> + <span><math class="testfont"><mtext>𝚘</mtext></math>=<span>1D698</span></span> + <span><math class="testfont"><mtext>𝚙</mtext></math>=<span>1D699</span></span> + <span><math class="testfont"><mtext>𝚚</mtext></math>=<span>1D69A</span></span> + <span><math class="testfont"><mtext>𝚛</mtext></math>=<span>1D69B</span></span> + <span><math class="testfont"><mtext>𝚜</mtext></math>=<span>1D69C</span></span> + <span><math class="testfont"><mtext>𝚝</mtext></math>=<span>1D69D</span></span> + <span><math class="testfont"><mtext>𝚞</mtext></math>=<span>1D69E</span></span> + <span><math class="testfont"><mtext>𝚟</mtext></math>=<span>1D69F</span></span> + <span><math class="testfont"><mtext>𝚠</mtext></math>=<span>1D6A0</span></span> + <span><math class="testfont"><mtext>𝚡</mtext></math>=<span>1D6A1</span></span><br/> + <span><math class="testfont"><mtext>𝚢</mtext></math>=<span>1D6A2</span></span> + <span><math class="testfont"><mtext>𝚣</mtext></math>=<span>1D6A3</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html index 1c23630..9e76b10 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-monospace.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,67 +28,67 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="monospace">0</mtext></math>=<span>1D7F6</span></span> - <span><math><mtext mathvariant="monospace">1</mtext></math>=<span>1D7F7</span></span> - <span><math><mtext mathvariant="monospace">2</mtext></math>=<span>1D7F8</span></span> - <span><math><mtext mathvariant="monospace">3</mtext></math>=<span>1D7F9</span></span> - <span><math><mtext mathvariant="monospace">4</mtext></math>=<span>1D7FA</span></span> - <span><math><mtext mathvariant="monospace">5</mtext></math>=<span>1D7FB</span></span> - <span><math><mtext mathvariant="monospace">6</mtext></math>=<span>1D7FC</span></span> - <span><math><mtext mathvariant="monospace">7</mtext></math>=<span>1D7FD</span></span> - <span><math><mtext mathvariant="monospace">8</mtext></math>=<span>1D7FE</span></span> - <span><math><mtext mathvariant="monospace">9</mtext></math>=<span>1D7FF</span></span><br/> - <span><math><mtext mathvariant="monospace">A</mtext></math>=<span>1D670</span></span> - <span><math><mtext mathvariant="monospace">B</mtext></math>=<span>1D671</span></span> - <span><math><mtext mathvariant="monospace">C</mtext></math>=<span>1D672</span></span> - <span><math><mtext mathvariant="monospace">D</mtext></math>=<span>1D673</span></span> - <span><math><mtext mathvariant="monospace">E</mtext></math>=<span>1D674</span></span> - <span><math><mtext mathvariant="monospace">F</mtext></math>=<span>1D675</span></span> - <span><math><mtext mathvariant="monospace">G</mtext></math>=<span>1D676</span></span> - <span><math><mtext mathvariant="monospace">H</mtext></math>=<span>1D677</span></span> - <span><math><mtext mathvariant="monospace">I</mtext></math>=<span>1D678</span></span> - <span><math><mtext mathvariant="monospace">J</mtext></math>=<span>1D679</span></span><br/> - <span><math><mtext mathvariant="monospace">K</mtext></math>=<span>1D67A</span></span> - <span><math><mtext mathvariant="monospace">L</mtext></math>=<span>1D67B</span></span> - <span><math><mtext mathvariant="monospace">M</mtext></math>=<span>1D67C</span></span> - <span><math><mtext mathvariant="monospace">N</mtext></math>=<span>1D67D</span></span> - <span><math><mtext mathvariant="monospace">O</mtext></math>=<span>1D67E</span></span> - <span><math><mtext mathvariant="monospace">P</mtext></math>=<span>1D67F</span></span> - <span><math><mtext mathvariant="monospace">Q</mtext></math>=<span>1D680</span></span> - <span><math><mtext mathvariant="monospace">R</mtext></math>=<span>1D681</span></span> - <span><math><mtext mathvariant="monospace">S</mtext></math>=<span>1D682</span></span> - <span><math><mtext mathvariant="monospace">T</mtext></math>=<span>1D683</span></span><br/> - <span><math><mtext mathvariant="monospace">U</mtext></math>=<span>1D684</span></span> - <span><math><mtext mathvariant="monospace">V</mtext></math>=<span>1D685</span></span> - <span><math><mtext mathvariant="monospace">W</mtext></math>=<span>1D686</span></span> - <span><math><mtext mathvariant="monospace">X</mtext></math>=<span>1D687</span></span> - <span><math><mtext mathvariant="monospace">Y</mtext></math>=<span>1D688</span></span> - <span><math><mtext mathvariant="monospace">Z</mtext></math>=<span>1D689</span></span> - <span><math><mtext mathvariant="monospace">a</mtext></math>=<span>1D68A</span></span> - <span><math><mtext mathvariant="monospace">b</mtext></math>=<span>1D68B</span></span> - <span><math><mtext mathvariant="monospace">c</mtext></math>=<span>1D68C</span></span> - <span><math><mtext mathvariant="monospace">d</mtext></math>=<span>1D68D</span></span><br/> - <span><math><mtext mathvariant="monospace">e</mtext></math>=<span>1D68E</span></span> - <span><math><mtext mathvariant="monospace">f</mtext></math>=<span>1D68F</span></span> - <span><math><mtext mathvariant="monospace">g</mtext></math>=<span>1D690</span></span> - <span><math><mtext mathvariant="monospace">h</mtext></math>=<span>1D691</span></span> - <span><math><mtext mathvariant="monospace">i</mtext></math>=<span>1D692</span></span> - <span><math><mtext mathvariant="monospace">j</mtext></math>=<span>1D693</span></span> - <span><math><mtext mathvariant="monospace">k</mtext></math>=<span>1D694</span></span> - <span><math><mtext mathvariant="monospace">l</mtext></math>=<span>1D695</span></span> - <span><math><mtext mathvariant="monospace">m</mtext></math>=<span>1D696</span></span> - <span><math><mtext mathvariant="monospace">n</mtext></math>=<span>1D697</span></span><br/> - <span><math><mtext mathvariant="monospace">o</mtext></math>=<span>1D698</span></span> - <span><math><mtext mathvariant="monospace">p</mtext></math>=<span>1D699</span></span> - <span><math><mtext mathvariant="monospace">q</mtext></math>=<span>1D69A</span></span> - <span><math><mtext mathvariant="monospace">r</mtext></math>=<span>1D69B</span></span> - <span><math><mtext mathvariant="monospace">s</mtext></math>=<span>1D69C</span></span> - <span><math><mtext mathvariant="monospace">t</mtext></math>=<span>1D69D</span></span> - <span><math><mtext mathvariant="monospace">u</mtext></math>=<span>1D69E</span></span> - <span><math><mtext mathvariant="monospace">v</mtext></math>=<span>1D69F</span></span> - <span><math><mtext mathvariant="monospace">w</mtext></math>=<span>1D6A0</span></span> - <span><math><mtext mathvariant="monospace">x</mtext></math>=<span>1D6A1</span></span><br/> - <span><math><mtext mathvariant="monospace">y</mtext></math>=<span>1D6A2</span></span> - <span><math><mtext mathvariant="monospace">z</mtext></math>=<span>1D6A3</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">0</mtext></math>=<span>1D7F6</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">1</mtext></math>=<span>1D7F7</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">2</mtext></math>=<span>1D7F8</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">3</mtext></math>=<span>1D7F9</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">4</mtext></math>=<span>1D7FA</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">5</mtext></math>=<span>1D7FB</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">6</mtext></math>=<span>1D7FC</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">7</mtext></math>=<span>1D7FD</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">8</mtext></math>=<span>1D7FE</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">9</mtext></math>=<span>1D7FF</span></span><br/> + <span><math class="testfont"><mtext mathvariant="monospace">A</mtext></math>=<span>1D670</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">B</mtext></math>=<span>1D671</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">C</mtext></math>=<span>1D672</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">D</mtext></math>=<span>1D673</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">E</mtext></math>=<span>1D674</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">F</mtext></math>=<span>1D675</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">G</mtext></math>=<span>1D676</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">H</mtext></math>=<span>1D677</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">I</mtext></math>=<span>1D678</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">J</mtext></math>=<span>1D679</span></span><br/> + <span><math class="testfont"><mtext mathvariant="monospace">K</mtext></math>=<span>1D67A</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">L</mtext></math>=<span>1D67B</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">M</mtext></math>=<span>1D67C</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">N</mtext></math>=<span>1D67D</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">O</mtext></math>=<span>1D67E</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">P</mtext></math>=<span>1D67F</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">Q</mtext></math>=<span>1D680</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">R</mtext></math>=<span>1D681</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">S</mtext></math>=<span>1D682</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">T</mtext></math>=<span>1D683</span></span><br/> + <span><math class="testfont"><mtext mathvariant="monospace">U</mtext></math>=<span>1D684</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">V</mtext></math>=<span>1D685</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">W</mtext></math>=<span>1D686</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">X</mtext></math>=<span>1D687</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">Y</mtext></math>=<span>1D688</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">Z</mtext></math>=<span>1D689</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">a</mtext></math>=<span>1D68A</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">b</mtext></math>=<span>1D68B</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">c</mtext></math>=<span>1D68C</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">d</mtext></math>=<span>1D68D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="monospace">e</mtext></math>=<span>1D68E</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">f</mtext></math>=<span>1D68F</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">g</mtext></math>=<span>1D690</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">h</mtext></math>=<span>1D691</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">i</mtext></math>=<span>1D692</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">j</mtext></math>=<span>1D693</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">k</mtext></math>=<span>1D694</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">l</mtext></math>=<span>1D695</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">m</mtext></math>=<span>1D696</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">n</mtext></math>=<span>1D697</span></span><br/> + <span><math class="testfont"><mtext mathvariant="monospace">o</mtext></math>=<span>1D698</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">p</mtext></math>=<span>1D699</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">q</mtext></math>=<span>1D69A</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">r</mtext></math>=<span>1D69B</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">s</mtext></math>=<span>1D69C</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">t</mtext></math>=<span>1D69D</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">u</mtext></math>=<span>1D69E</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">v</mtext></math>=<span>1D69F</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">w</mtext></math>=<span>1D6A0</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">x</mtext></math>=<span>1D6A1</span></span><br/> + <span><math class="testfont"><mtext mathvariant="monospace">y</mtext></math>=<span>1D6A2</span></span> + <span><math class="testfont"><mtext mathvariant="monospace">z</mtext></math>=<span>1D6A3</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html index f8ef62b..2b992af 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,115 +23,115 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝟃</mtext></math>=<span>1D7C3</span></span> - <span><math><mtext>𝞩</mtext></math>=<span>1D7A9</span></span> - <span><math><mtext>𝘼</mtext></math>=<span>1D63C</span></span> - <span><math><mtext>𝘽</mtext></math>=<span>1D63D</span></span> - <span><math><mtext>𝘾</mtext></math>=<span>1D63E</span></span> - <span><math><mtext>𝘿</mtext></math>=<span>1D63F</span></span> - <span><math><mtext>𝙀</mtext></math>=<span>1D640</span></span> - <span><math><mtext>𝙁</mtext></math>=<span>1D641</span></span> - <span><math><mtext>𝙂</mtext></math>=<span>1D642</span></span> - <span><math><mtext>𝙃</mtext></math>=<span>1D643</span></span><br/> - <span><math><mtext>𝙄</mtext></math>=<span>1D644</span></span> - <span><math><mtext>𝙅</mtext></math>=<span>1D645</span></span> - <span><math><mtext>𝙆</mtext></math>=<span>1D646</span></span> - <span><math><mtext>𝙇</mtext></math>=<span>1D647</span></span> - <span><math><mtext>𝙈</mtext></math>=<span>1D648</span></span> - <span><math><mtext>𝙉</mtext></math>=<span>1D649</span></span> - <span><math><mtext>𝙊</mtext></math>=<span>1D64A</span></span> - <span><math><mtext>𝙋</mtext></math>=<span>1D64B</span></span> - <span><math><mtext>𝙌</mtext></math>=<span>1D64C</span></span> - <span><math><mtext>𝙍</mtext></math>=<span>1D64D</span></span><br/> - <span><math><mtext>𝙎</mtext></math>=<span>1D64E</span></span> - <span><math><mtext>𝙏</mtext></math>=<span>1D64F</span></span> - <span><math><mtext>𝙐</mtext></math>=<span>1D650</span></span> - <span><math><mtext>𝙑</mtext></math>=<span>1D651</span></span> - <span><math><mtext>𝙒</mtext></math>=<span>1D652</span></span> - <span><math><mtext>𝙓</mtext></math>=<span>1D653</span></span> - <span><math><mtext>𝙔</mtext></math>=<span>1D654</span></span> - <span><math><mtext>𝙕</mtext></math>=<span>1D655</span></span> - <span><math><mtext>𝙖</mtext></math>=<span>1D656</span></span> - <span><math><mtext>𝙗</mtext></math>=<span>1D657</span></span><br/> - <span><math><mtext>𝙘</mtext></math>=<span>1D658</span></span> - <span><math><mtext>𝙙</mtext></math>=<span>1D659</span></span> - <span><math><mtext>𝙚</mtext></math>=<span>1D65A</span></span> - <span><math><mtext>𝙛</mtext></math>=<span>1D65B</span></span> - <span><math><mtext>𝙜</mtext></math>=<span>1D65C</span></span> - <span><math><mtext>𝙝</mtext></math>=<span>1D65D</span></span> - <span><math><mtext>𝙞</mtext></math>=<span>1D65E</span></span> - <span><math><mtext>𝙟</mtext></math>=<span>1D65F</span></span> - <span><math><mtext>𝙠</mtext></math>=<span>1D660</span></span> - <span><math><mtext>𝙡</mtext></math>=<span>1D661</span></span><br/> - <span><math><mtext>𝙢</mtext></math>=<span>1D662</span></span> - <span><math><mtext>𝙣</mtext></math>=<span>1D663</span></span> - <span><math><mtext>𝙤</mtext></math>=<span>1D664</span></span> - <span><math><mtext>𝙥</mtext></math>=<span>1D665</span></span> - <span><math><mtext>𝙦</mtext></math>=<span>1D666</span></span> - <span><math><mtext>𝙧</mtext></math>=<span>1D667</span></span> - <span><math><mtext>𝙨</mtext></math>=<span>1D668</span></span> - <span><math><mtext>𝙩</mtext></math>=<span>1D669</span></span> - <span><math><mtext>𝙪</mtext></math>=<span>1D66A</span></span> - <span><math><mtext>𝙫</mtext></math>=<span>1D66B</span></span><br/> - <span><math><mtext>𝙬</mtext></math>=<span>1D66C</span></span> - <span><math><mtext>𝙭</mtext></math>=<span>1D66D</span></span> - <span><math><mtext>𝙮</mtext></math>=<span>1D66E</span></span> - <span><math><mtext>𝙯</mtext></math>=<span>1D66F</span></span> - <span><math><mtext>𝞐</mtext></math>=<span>1D790</span></span> - <span><math><mtext>𝞑</mtext></math>=<span>1D791</span></span> - <span><math><mtext>𝞒</mtext></math>=<span>1D792</span></span> - <span><math><mtext>𝞓</mtext></math>=<span>1D793</span></span> - <span><math><mtext>𝞔</mtext></math>=<span>1D794</span></span> - <span><math><mtext>𝞕</mtext></math>=<span>1D795</span></span><br/> - <span><math><mtext>𝞖</mtext></math>=<span>1D796</span></span> - <span><math><mtext>𝞗</mtext></math>=<span>1D797</span></span> - <span><math><mtext>𝞘</mtext></math>=<span>1D798</span></span> - <span><math><mtext>𝞙</mtext></math>=<span>1D799</span></span> - <span><math><mtext>𝞚</mtext></math>=<span>1D79A</span></span> - <span><math><mtext>𝞛</mtext></math>=<span>1D79B</span></span> - <span><math><mtext>𝞜</mtext></math>=<span>1D79C</span></span> - <span><math><mtext>𝞝</mtext></math>=<span>1D79D</span></span> - <span><math><mtext>𝞞</mtext></math>=<span>1D79E</span></span> - <span><math><mtext>𝞟</mtext></math>=<span>1D79F</span></span><br/> - <span><math><mtext>𝞠</mtext></math>=<span>1D7A0</span></span> - <span><math><mtext>𝞢</mtext></math>=<span>1D7A2</span></span> - <span><math><mtext>𝞣</mtext></math>=<span>1D7A3</span></span> - <span><math><mtext>𝞤</mtext></math>=<span>1D7A4</span></span> - <span><math><mtext>𝞥</mtext></math>=<span>1D7A5</span></span> - <span><math><mtext>𝞦</mtext></math>=<span>1D7A6</span></span> - <span><math><mtext>𝞧</mtext></math>=<span>1D7A7</span></span> - <span><math><mtext>𝞨</mtext></math>=<span>1D7A8</span></span> - <span><math><mtext>𝞪</mtext></math>=<span>1D7AA</span></span> - <span><math><mtext>𝞫</mtext></math>=<span>1D7AB</span></span><br/> - <span><math><mtext>𝞬</mtext></math>=<span>1D7AC</span></span> - <span><math><mtext>𝞭</mtext></math>=<span>1D7AD</span></span> - <span><math><mtext>𝞮</mtext></math>=<span>1D7AE</span></span> - <span><math><mtext>𝞯</mtext></math>=<span>1D7AF</span></span> - <span><math><mtext>𝞰</mtext></math>=<span>1D7B0</span></span> - <span><math><mtext>𝞱</mtext></math>=<span>1D7B1</span></span> - <span><math><mtext>𝞲</mtext></math>=<span>1D7B2</span></span> - <span><math><mtext>𝞳</mtext></math>=<span>1D7B3</span></span> - <span><math><mtext>𝞴</mtext></math>=<span>1D7B4</span></span> - <span><math><mtext>𝞵</mtext></math>=<span>1D7B5</span></span><br/> - <span><math><mtext>𝞶</mtext></math>=<span>1D7B6</span></span> - <span><math><mtext>𝞷</mtext></math>=<span>1D7B7</span></span> - <span><math><mtext>𝞸</mtext></math>=<span>1D7B8</span></span> - <span><math><mtext>𝞹</mtext></math>=<span>1D7B9</span></span> - <span><math><mtext>𝞺</mtext></math>=<span>1D7BA</span></span> - <span><math><mtext>𝞻</mtext></math>=<span>1D7BB</span></span> - <span><math><mtext>𝞼</mtext></math>=<span>1D7BC</span></span> - <span><math><mtext>𝞽</mtext></math>=<span>1D7BD</span></span> - <span><math><mtext>𝞾</mtext></math>=<span>1D7BE</span></span> - <span><math><mtext>𝞿</mtext></math>=<span>1D7BF</span></span><br/> - <span><math><mtext>𝟀</mtext></math>=<span>1D7C0</span></span> - <span><math><mtext>𝟁</mtext></math>=<span>1D7C1</span></span> - <span><math><mtext>𝟂</mtext></math>=<span>1D7C2</span></span> - <span><math><mtext>𝟅</mtext></math>=<span>1D7C5</span></span> - <span><math><mtext>𝟇</mtext></math>=<span>1D7C7</span></span> - <span><math><mtext>𝟉</mtext></math>=<span>1D7C9</span></span> - <span><math><mtext>𝟆</mtext></math>=<span>1D7C6</span></span> - <span><math><mtext>𝟈</mtext></math>=<span>1D7C8</span></span> - <span><math><mtext>𝞡</mtext></math>=<span>1D7A1</span></span> - <span><math><mtext>𝟄</mtext></math>=<span>1D7C4</span></span><br/> + <span><math class="testfont"><mtext>𝟃</mtext></math>=<span>1D7C3</span></span> + <span><math class="testfont"><mtext>𝞩</mtext></math>=<span>1D7A9</span></span> + <span><math class="testfont"><mtext>𝘼</mtext></math>=<span>1D63C</span></span> + <span><math class="testfont"><mtext>𝘽</mtext></math>=<span>1D63D</span></span> + <span><math class="testfont"><mtext>𝘾</mtext></math>=<span>1D63E</span></span> + <span><math class="testfont"><mtext>𝘿</mtext></math>=<span>1D63F</span></span> + <span><math class="testfont"><mtext>𝙀</mtext></math>=<span>1D640</span></span> + <span><math class="testfont"><mtext>𝙁</mtext></math>=<span>1D641</span></span> + <span><math class="testfont"><mtext>𝙂</mtext></math>=<span>1D642</span></span> + <span><math class="testfont"><mtext>𝙃</mtext></math>=<span>1D643</span></span><br/> + <span><math class="testfont"><mtext>𝙄</mtext></math>=<span>1D644</span></span> + <span><math class="testfont"><mtext>𝙅</mtext></math>=<span>1D645</span></span> + <span><math class="testfont"><mtext>𝙆</mtext></math>=<span>1D646</span></span> + <span><math class="testfont"><mtext>𝙇</mtext></math>=<span>1D647</span></span> + <span><math class="testfont"><mtext>𝙈</mtext></math>=<span>1D648</span></span> + <span><math class="testfont"><mtext>𝙉</mtext></math>=<span>1D649</span></span> + <span><math class="testfont"><mtext>𝙊</mtext></math>=<span>1D64A</span></span> + <span><math class="testfont"><mtext>𝙋</mtext></math>=<span>1D64B</span></span> + <span><math class="testfont"><mtext>𝙌</mtext></math>=<span>1D64C</span></span> + <span><math class="testfont"><mtext>𝙍</mtext></math>=<span>1D64D</span></span><br/> + <span><math class="testfont"><mtext>𝙎</mtext></math>=<span>1D64E</span></span> + <span><math class="testfont"><mtext>𝙏</mtext></math>=<span>1D64F</span></span> + <span><math class="testfont"><mtext>𝙐</mtext></math>=<span>1D650</span></span> + <span><math class="testfont"><mtext>𝙑</mtext></math>=<span>1D651</span></span> + <span><math class="testfont"><mtext>𝙒</mtext></math>=<span>1D652</span></span> + <span><math class="testfont"><mtext>𝙓</mtext></math>=<span>1D653</span></span> + <span><math class="testfont"><mtext>𝙔</mtext></math>=<span>1D654</span></span> + <span><math class="testfont"><mtext>𝙕</mtext></math>=<span>1D655</span></span> + <span><math class="testfont"><mtext>𝙖</mtext></math>=<span>1D656</span></span> + <span><math class="testfont"><mtext>𝙗</mtext></math>=<span>1D657</span></span><br/> + <span><math class="testfont"><mtext>𝙘</mtext></math>=<span>1D658</span></span> + <span><math class="testfont"><mtext>𝙙</mtext></math>=<span>1D659</span></span> + <span><math class="testfont"><mtext>𝙚</mtext></math>=<span>1D65A</span></span> + <span><math class="testfont"><mtext>𝙛</mtext></math>=<span>1D65B</span></span> + <span><math class="testfont"><mtext>𝙜</mtext></math>=<span>1D65C</span></span> + <span><math class="testfont"><mtext>𝙝</mtext></math>=<span>1D65D</span></span> + <span><math class="testfont"><mtext>𝙞</mtext></math>=<span>1D65E</span></span> + <span><math class="testfont"><mtext>𝙟</mtext></math>=<span>1D65F</span></span> + <span><math class="testfont"><mtext>𝙠</mtext></math>=<span>1D660</span></span> + <span><math class="testfont"><mtext>𝙡</mtext></math>=<span>1D661</span></span><br/> + <span><math class="testfont"><mtext>𝙢</mtext></math>=<span>1D662</span></span> + <span><math class="testfont"><mtext>𝙣</mtext></math>=<span>1D663</span></span> + <span><math class="testfont"><mtext>𝙤</mtext></math>=<span>1D664</span></span> + <span><math class="testfont"><mtext>𝙥</mtext></math>=<span>1D665</span></span> + <span><math class="testfont"><mtext>𝙦</mtext></math>=<span>1D666</span></span> + <span><math class="testfont"><mtext>𝙧</mtext></math>=<span>1D667</span></span> + <span><math class="testfont"><mtext>𝙨</mtext></math>=<span>1D668</span></span> + <span><math class="testfont"><mtext>𝙩</mtext></math>=<span>1D669</span></span> + <span><math class="testfont"><mtext>𝙪</mtext></math>=<span>1D66A</span></span> + <span><math class="testfont"><mtext>𝙫</mtext></math>=<span>1D66B</span></span><br/> + <span><math class="testfont"><mtext>𝙬</mtext></math>=<span>1D66C</span></span> + <span><math class="testfont"><mtext>𝙭</mtext></math>=<span>1D66D</span></span> + <span><math class="testfont"><mtext>𝙮</mtext></math>=<span>1D66E</span></span> + <span><math class="testfont"><mtext>𝙯</mtext></math>=<span>1D66F</span></span> + <span><math class="testfont"><mtext>𝞐</mtext></math>=<span>1D790</span></span> + <span><math class="testfont"><mtext>𝞑</mtext></math>=<span>1D791</span></span> + <span><math class="testfont"><mtext>𝞒</mtext></math>=<span>1D792</span></span> + <span><math class="testfont"><mtext>𝞓</mtext></math>=<span>1D793</span></span> + <span><math class="testfont"><mtext>𝞔</mtext></math>=<span>1D794</span></span> + <span><math class="testfont"><mtext>𝞕</mtext></math>=<span>1D795</span></span><br/> + <span><math class="testfont"><mtext>𝞖</mtext></math>=<span>1D796</span></span> + <span><math class="testfont"><mtext>𝞗</mtext></math>=<span>1D797</span></span> + <span><math class="testfont"><mtext>𝞘</mtext></math>=<span>1D798</span></span> + <span><math class="testfont"><mtext>𝞙</mtext></math>=<span>1D799</span></span> + <span><math class="testfont"><mtext>𝞚</mtext></math>=<span>1D79A</span></span> + <span><math class="testfont"><mtext>𝞛</mtext></math>=<span>1D79B</span></span> + <span><math class="testfont"><mtext>𝞜</mtext></math>=<span>1D79C</span></span> + <span><math class="testfont"><mtext>𝞝</mtext></math>=<span>1D79D</span></span> + <span><math class="testfont"><mtext>𝞞</mtext></math>=<span>1D79E</span></span> + <span><math class="testfont"><mtext>𝞟</mtext></math>=<span>1D79F</span></span><br/> + <span><math class="testfont"><mtext>𝞠</mtext></math>=<span>1D7A0</span></span> + <span><math class="testfont"><mtext>𝞢</mtext></math>=<span>1D7A2</span></span> + <span><math class="testfont"><mtext>𝞣</mtext></math>=<span>1D7A3</span></span> + <span><math class="testfont"><mtext>𝞤</mtext></math>=<span>1D7A4</span></span> + <span><math class="testfont"><mtext>𝞥</mtext></math>=<span>1D7A5</span></span> + <span><math class="testfont"><mtext>𝞦</mtext></math>=<span>1D7A6</span></span> + <span><math class="testfont"><mtext>𝞧</mtext></math>=<span>1D7A7</span></span> + <span><math class="testfont"><mtext>𝞨</mtext></math>=<span>1D7A8</span></span> + <span><math class="testfont"><mtext>𝞪</mtext></math>=<span>1D7AA</span></span> + <span><math class="testfont"><mtext>𝞫</mtext></math>=<span>1D7AB</span></span><br/> + <span><math class="testfont"><mtext>𝞬</mtext></math>=<span>1D7AC</span></span> + <span><math class="testfont"><mtext>𝞭</mtext></math>=<span>1D7AD</span></span> + <span><math class="testfont"><mtext>𝞮</mtext></math>=<span>1D7AE</span></span> + <span><math class="testfont"><mtext>𝞯</mtext></math>=<span>1D7AF</span></span> + <span><math class="testfont"><mtext>𝞰</mtext></math>=<span>1D7B0</span></span> + <span><math class="testfont"><mtext>𝞱</mtext></math>=<span>1D7B1</span></span> + <span><math class="testfont"><mtext>𝞲</mtext></math>=<span>1D7B2</span></span> + <span><math class="testfont"><mtext>𝞳</mtext></math>=<span>1D7B3</span></span> + <span><math class="testfont"><mtext>𝞴</mtext></math>=<span>1D7B4</span></span> + <span><math class="testfont"><mtext>𝞵</mtext></math>=<span>1D7B5</span></span><br/> + <span><math class="testfont"><mtext>𝞶</mtext></math>=<span>1D7B6</span></span> + <span><math class="testfont"><mtext>𝞷</mtext></math>=<span>1D7B7</span></span> + <span><math class="testfont"><mtext>𝞸</mtext></math>=<span>1D7B8</span></span> + <span><math class="testfont"><mtext>𝞹</mtext></math>=<span>1D7B9</span></span> + <span><math class="testfont"><mtext>𝞺</mtext></math>=<span>1D7BA</span></span> + <span><math class="testfont"><mtext>𝞻</mtext></math>=<span>1D7BB</span></span> + <span><math class="testfont"><mtext>𝞼</mtext></math>=<span>1D7BC</span></span> + <span><math class="testfont"><mtext>𝞽</mtext></math>=<span>1D7BD</span></span> + <span><math class="testfont"><mtext>𝞾</mtext></math>=<span>1D7BE</span></span> + <span><math class="testfont"><mtext>𝞿</mtext></math>=<span>1D7BF</span></span><br/> + <span><math class="testfont"><mtext>𝟀</mtext></math>=<span>1D7C0</span></span> + <span><math class="testfont"><mtext>𝟁</mtext></math>=<span>1D7C1</span></span> + <span><math class="testfont"><mtext>𝟂</mtext></math>=<span>1D7C2</span></span> + <span><math class="testfont"><mtext>𝟅</mtext></math>=<span>1D7C5</span></span> + <span><math class="testfont"><mtext>𝟇</mtext></math>=<span>1D7C7</span></span> + <span><math class="testfont"><mtext>𝟉</mtext></math>=<span>1D7C9</span></span> + <span><math class="testfont"><mtext>𝟆</mtext></math>=<span>1D7C6</span></span> + <span><math class="testfont"><mtext>𝟈</mtext></math>=<span>1D7C8</span></span> + <span><math class="testfont"><mtext>𝞡</mtext></math>=<span>1D7A1</span></span> + <span><math class="testfont"><mtext>𝟄</mtext></math>=<span>1D7C4</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html index f67a6ab..832fd15 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-bold-italic.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,115 +28,115 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="sans-serif-bold-italic">∂</mtext></math>=<span>1D7C3</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">∇</mtext></math>=<span>1D7A9</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">A</mtext></math>=<span>1D63C</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">B</mtext></math>=<span>1D63D</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">C</mtext></math>=<span>1D63E</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">D</mtext></math>=<span>1D63F</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">E</mtext></math>=<span>1D640</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">F</mtext></math>=<span>1D641</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">G</mtext></math>=<span>1D642</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">H</mtext></math>=<span>1D643</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">I</mtext></math>=<span>1D644</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">J</mtext></math>=<span>1D645</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">K</mtext></math>=<span>1D646</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">L</mtext></math>=<span>1D647</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">M</mtext></math>=<span>1D648</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">N</mtext></math>=<span>1D649</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">O</mtext></math>=<span>1D64A</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">P</mtext></math>=<span>1D64B</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Q</mtext></math>=<span>1D64C</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">R</mtext></math>=<span>1D64D</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">S</mtext></math>=<span>1D64E</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">T</mtext></math>=<span>1D64F</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">U</mtext></math>=<span>1D650</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">V</mtext></math>=<span>1D651</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">W</mtext></math>=<span>1D652</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">X</mtext></math>=<span>1D653</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Y</mtext></math>=<span>1D654</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Z</mtext></math>=<span>1D655</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">a</mtext></math>=<span>1D656</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">b</mtext></math>=<span>1D657</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">c</mtext></math>=<span>1D658</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">d</mtext></math>=<span>1D659</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">e</mtext></math>=<span>1D65A</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">f</mtext></math>=<span>1D65B</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">g</mtext></math>=<span>1D65C</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">h</mtext></math>=<span>1D65D</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">i</mtext></math>=<span>1D65E</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">j</mtext></math>=<span>1D65F</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">k</mtext></math>=<span>1D660</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">l</mtext></math>=<span>1D661</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">m</mtext></math>=<span>1D662</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">n</mtext></math>=<span>1D663</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">o</mtext></math>=<span>1D664</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">p</mtext></math>=<span>1D665</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">q</mtext></math>=<span>1D666</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">r</mtext></math>=<span>1D667</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">s</mtext></math>=<span>1D668</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">t</mtext></math>=<span>1D669</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">u</mtext></math>=<span>1D66A</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">v</mtext></math>=<span>1D66B</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">w</mtext></math>=<span>1D66C</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">x</mtext></math>=<span>1D66D</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">y</mtext></math>=<span>1D66E</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">z</mtext></math>=<span>1D66F</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Α</mtext></math>=<span>1D790</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Β</mtext></math>=<span>1D791</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Γ</mtext></math>=<span>1D792</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Δ</mtext></math>=<span>1D793</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ε</mtext></math>=<span>1D794</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ζ</mtext></math>=<span>1D795</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">Η</mtext></math>=<span>1D796</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Θ</mtext></math>=<span>1D797</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ι</mtext></math>=<span>1D798</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Κ</mtext></math>=<span>1D799</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Λ</mtext></math>=<span>1D79A</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Μ</mtext></math>=<span>1D79B</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ν</mtext></math>=<span>1D79C</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ξ</mtext></math>=<span>1D79D</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ο</mtext></math>=<span>1D79E</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Π</mtext></math>=<span>1D79F</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ρ</mtext></math>=<span>1D7A0</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Σ</mtext></math>=<span>1D7A2</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Τ</mtext></math>=<span>1D7A3</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Υ</mtext></math>=<span>1D7A4</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Φ</mtext></math>=<span>1D7A5</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Χ</mtext></math>=<span>1D7A6</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ψ</mtext></math>=<span>1D7A7</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">Ω</mtext></math>=<span>1D7A8</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">α</mtext></math>=<span>1D7AA</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">β</mtext></math>=<span>1D7AB</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">γ</mtext></math>=<span>1D7AC</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">δ</mtext></math>=<span>1D7AD</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ε</mtext></math>=<span>1D7AE</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ζ</mtext></math>=<span>1D7AF</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">η</mtext></math>=<span>1D7B0</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">θ</mtext></math>=<span>1D7B1</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ι</mtext></math>=<span>1D7B2</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">κ</mtext></math>=<span>1D7B3</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">λ</mtext></math>=<span>1D7B4</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">μ</mtext></math>=<span>1D7B5</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">ν</mtext></math>=<span>1D7B6</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ξ</mtext></math>=<span>1D7B7</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ο</mtext></math>=<span>1D7B8</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">π</mtext></math>=<span>1D7B9</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ρ</mtext></math>=<span>1D7BA</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ς</mtext></math>=<span>1D7BB</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">σ</mtext></math>=<span>1D7BC</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">τ</mtext></math>=<span>1D7BD</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">υ</mtext></math>=<span>1D7BE</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">φ</mtext></math>=<span>1D7BF</span></span><br/> - <span><math><mtext mathvariant="sans-serif-bold-italic">χ</mtext></math>=<span>1D7C0</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ψ</mtext></math>=<span>1D7C1</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ω</mtext></math>=<span>1D7C2</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϑ</mtext></math>=<span>1D7C5</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϕ</mtext></math>=<span>1D7C7</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϖ</mtext></math>=<span>1D7C9</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϰ</mtext></math>=<span>1D7C6</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϱ</mtext></math>=<span>1D7C8</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϴ</mtext></math>=<span>1D7A1</span></span> - <span><math><mtext mathvariant="sans-serif-bold-italic">ϵ</mtext></math>=<span>1D7C4</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">∂</mtext></math>=<span>1D7C3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">∇</mtext></math>=<span>1D7A9</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">A</mtext></math>=<span>1D63C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">B</mtext></math>=<span>1D63D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">C</mtext></math>=<span>1D63E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">D</mtext></math>=<span>1D63F</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">E</mtext></math>=<span>1D640</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">F</mtext></math>=<span>1D641</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">G</mtext></math>=<span>1D642</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">H</mtext></math>=<span>1D643</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">I</mtext></math>=<span>1D644</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">J</mtext></math>=<span>1D645</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">K</mtext></math>=<span>1D646</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">L</mtext></math>=<span>1D647</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">M</mtext></math>=<span>1D648</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">N</mtext></math>=<span>1D649</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">O</mtext></math>=<span>1D64A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">P</mtext></math>=<span>1D64B</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Q</mtext></math>=<span>1D64C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">R</mtext></math>=<span>1D64D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">S</mtext></math>=<span>1D64E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">T</mtext></math>=<span>1D64F</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">U</mtext></math>=<span>1D650</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">V</mtext></math>=<span>1D651</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">W</mtext></math>=<span>1D652</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">X</mtext></math>=<span>1D653</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Y</mtext></math>=<span>1D654</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Z</mtext></math>=<span>1D655</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">a</mtext></math>=<span>1D656</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">b</mtext></math>=<span>1D657</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">c</mtext></math>=<span>1D658</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">d</mtext></math>=<span>1D659</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">e</mtext></math>=<span>1D65A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">f</mtext></math>=<span>1D65B</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">g</mtext></math>=<span>1D65C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">h</mtext></math>=<span>1D65D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">i</mtext></math>=<span>1D65E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">j</mtext></math>=<span>1D65F</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">k</mtext></math>=<span>1D660</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">l</mtext></math>=<span>1D661</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">m</mtext></math>=<span>1D662</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">n</mtext></math>=<span>1D663</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">o</mtext></math>=<span>1D664</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">p</mtext></math>=<span>1D665</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">q</mtext></math>=<span>1D666</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">r</mtext></math>=<span>1D667</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">s</mtext></math>=<span>1D668</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">t</mtext></math>=<span>1D669</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">u</mtext></math>=<span>1D66A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">v</mtext></math>=<span>1D66B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">w</mtext></math>=<span>1D66C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">x</mtext></math>=<span>1D66D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">y</mtext></math>=<span>1D66E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">z</mtext></math>=<span>1D66F</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Α</mtext></math>=<span>1D790</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Β</mtext></math>=<span>1D791</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Γ</mtext></math>=<span>1D792</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Δ</mtext></math>=<span>1D793</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ε</mtext></math>=<span>1D794</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ζ</mtext></math>=<span>1D795</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Η</mtext></math>=<span>1D796</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Θ</mtext></math>=<span>1D797</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ι</mtext></math>=<span>1D798</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Κ</mtext></math>=<span>1D799</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Λ</mtext></math>=<span>1D79A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Μ</mtext></math>=<span>1D79B</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ν</mtext></math>=<span>1D79C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ξ</mtext></math>=<span>1D79D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ο</mtext></math>=<span>1D79E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Π</mtext></math>=<span>1D79F</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ρ</mtext></math>=<span>1D7A0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Σ</mtext></math>=<span>1D7A2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Τ</mtext></math>=<span>1D7A3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Υ</mtext></math>=<span>1D7A4</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Φ</mtext></math>=<span>1D7A5</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Χ</mtext></math>=<span>1D7A6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ψ</mtext></math>=<span>1D7A7</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">Ω</mtext></math>=<span>1D7A8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">α</mtext></math>=<span>1D7AA</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">β</mtext></math>=<span>1D7AB</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">γ</mtext></math>=<span>1D7AC</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">δ</mtext></math>=<span>1D7AD</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ε</mtext></math>=<span>1D7AE</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ζ</mtext></math>=<span>1D7AF</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">η</mtext></math>=<span>1D7B0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">θ</mtext></math>=<span>1D7B1</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ι</mtext></math>=<span>1D7B2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">κ</mtext></math>=<span>1D7B3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">λ</mtext></math>=<span>1D7B4</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">μ</mtext></math>=<span>1D7B5</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ν</mtext></math>=<span>1D7B6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ξ</mtext></math>=<span>1D7B7</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ο</mtext></math>=<span>1D7B8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">π</mtext></math>=<span>1D7B9</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ρ</mtext></math>=<span>1D7BA</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ς</mtext></math>=<span>1D7BB</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">σ</mtext></math>=<span>1D7BC</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">τ</mtext></math>=<span>1D7BD</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">υ</mtext></math>=<span>1D7BE</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">φ</mtext></math>=<span>1D7BF</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">χ</mtext></math>=<span>1D7C0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ψ</mtext></math>=<span>1D7C1</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ω</mtext></math>=<span>1D7C2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϑ</mtext></math>=<span>1D7C5</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϕ</mtext></math>=<span>1D7C7</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϖ</mtext></math>=<span>1D7C9</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϰ</mtext></math>=<span>1D7C6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϱ</mtext></math>=<span>1D7C8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϴ</mtext></math>=<span>1D7A1</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-bold-italic">ϵ</mtext></math>=<span>1D7C4</span></span><br/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html index b82cde8..d7e2324 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,57 +23,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝘈</mtext></math>=<span>1D608</span></span> - <span><math><mtext>𝘉</mtext></math>=<span>1D609</span></span> - <span><math><mtext>𝘊</mtext></math>=<span>1D60A</span></span> - <span><math><mtext>𝘋</mtext></math>=<span>1D60B</span></span> - <span><math><mtext>𝘌</mtext></math>=<span>1D60C</span></span> - <span><math><mtext>𝘍</mtext></math>=<span>1D60D</span></span> - <span><math><mtext>𝘎</mtext></math>=<span>1D60E</span></span> - <span><math><mtext>𝘏</mtext></math>=<span>1D60F</span></span> - <span><math><mtext>𝘐</mtext></math>=<span>1D610</span></span> - <span><math><mtext>𝘑</mtext></math>=<span>1D611</span></span><br/> - <span><math><mtext>𝘒</mtext></math>=<span>1D612</span></span> - <span><math><mtext>𝘓</mtext></math>=<span>1D613</span></span> - <span><math><mtext>𝘔</mtext></math>=<span>1D614</span></span> - <span><math><mtext>𝘕</mtext></math>=<span>1D615</span></span> - <span><math><mtext>𝘖</mtext></math>=<span>1D616</span></span> - <span><math><mtext>𝘗</mtext></math>=<span>1D617</span></span> - <span><math><mtext>𝘘</mtext></math>=<span>1D618</span></span> - <span><math><mtext>𝘙</mtext></math>=<span>1D619</span></span> - <span><math><mtext>𝘚</mtext></math>=<span>1D61A</span></span> - <span><math><mtext>𝘛</mtext></math>=<span>1D61B</span></span><br/> - <span><math><mtext>𝘜</mtext></math>=<span>1D61C</span></span> - <span><math><mtext>𝘝</mtext></math>=<span>1D61D</span></span> - <span><math><mtext>𝘞</mtext></math>=<span>1D61E</span></span> - <span><math><mtext>𝘟</mtext></math>=<span>1D61F</span></span> - <span><math><mtext>𝘠</mtext></math>=<span>1D620</span></span> - <span><math><mtext>𝘡</mtext></math>=<span>1D621</span></span> - <span><math><mtext>𝘢</mtext></math>=<span>1D622</span></span> - <span><math><mtext>𝘣</mtext></math>=<span>1D623</span></span> - <span><math><mtext>𝘤</mtext></math>=<span>1D624</span></span> - <span><math><mtext>𝘥</mtext></math>=<span>1D625</span></span><br/> - <span><math><mtext>𝘦</mtext></math>=<span>1D626</span></span> - <span><math><mtext>𝘧</mtext></math>=<span>1D627</span></span> - <span><math><mtext>𝘨</mtext></math>=<span>1D628</span></span> - <span><math><mtext>𝘩</mtext></math>=<span>1D629</span></span> - <span><math><mtext>𝘪</mtext></math>=<span>1D62A</span></span> - <span><math><mtext>𝘫</mtext></math>=<span>1D62B</span></span> - <span><math><mtext>𝘬</mtext></math>=<span>1D62C</span></span> - <span><math><mtext>𝘭</mtext></math>=<span>1D62D</span></span> - <span><math><mtext>𝘮</mtext></math>=<span>1D62E</span></span> - <span><math><mtext>𝘯</mtext></math>=<span>1D62F</span></span><br/> - <span><math><mtext>𝘰</mtext></math>=<span>1D630</span></span> - <span><math><mtext>𝘱</mtext></math>=<span>1D631</span></span> - <span><math><mtext>𝘲</mtext></math>=<span>1D632</span></span> - <span><math><mtext>𝘳</mtext></math>=<span>1D633</span></span> - <span><math><mtext>𝘴</mtext></math>=<span>1D634</span></span> - <span><math><mtext>𝘵</mtext></math>=<span>1D635</span></span> - <span><math><mtext>𝘶</mtext></math>=<span>1D636</span></span> - <span><math><mtext>𝘷</mtext></math>=<span>1D637</span></span> - <span><math><mtext>𝘸</mtext></math>=<span>1D638</span></span> - <span><math><mtext>𝘹</mtext></math>=<span>1D639</span></span><br/> - <span><math><mtext>𝘺</mtext></math>=<span>1D63A</span></span> - <span><math><mtext>𝘻</mtext></math>=<span>1D63B</span></span> + <span><math class="testfont"><mtext>𝘈</mtext></math>=<span>1D608</span></span> + <span><math class="testfont"><mtext>𝘉</mtext></math>=<span>1D609</span></span> + <span><math class="testfont"><mtext>𝘊</mtext></math>=<span>1D60A</span></span> + <span><math class="testfont"><mtext>𝘋</mtext></math>=<span>1D60B</span></span> + <span><math class="testfont"><mtext>𝘌</mtext></math>=<span>1D60C</span></span> + <span><math class="testfont"><mtext>𝘍</mtext></math>=<span>1D60D</span></span> + <span><math class="testfont"><mtext>𝘎</mtext></math>=<span>1D60E</span></span> + <span><math class="testfont"><mtext>𝘏</mtext></math>=<span>1D60F</span></span> + <span><math class="testfont"><mtext>𝘐</mtext></math>=<span>1D610</span></span> + <span><math class="testfont"><mtext>𝘑</mtext></math>=<span>1D611</span></span><br/> + <span><math class="testfont"><mtext>𝘒</mtext></math>=<span>1D612</span></span> + <span><math class="testfont"><mtext>𝘓</mtext></math>=<span>1D613</span></span> + <span><math class="testfont"><mtext>𝘔</mtext></math>=<span>1D614</span></span> + <span><math class="testfont"><mtext>𝘕</mtext></math>=<span>1D615</span></span> + <span><math class="testfont"><mtext>𝘖</mtext></math>=<span>1D616</span></span> + <span><math class="testfont"><mtext>𝘗</mtext></math>=<span>1D617</span></span> + <span><math class="testfont"><mtext>𝘘</mtext></math>=<span>1D618</span></span> + <span><math class="testfont"><mtext>𝘙</mtext></math>=<span>1D619</span></span> + <span><math class="testfont"><mtext>𝘚</mtext></math>=<span>1D61A</span></span> + <span><math class="testfont"><mtext>𝘛</mtext></math>=<span>1D61B</span></span><br/> + <span><math class="testfont"><mtext>𝘜</mtext></math>=<span>1D61C</span></span> + <span><math class="testfont"><mtext>𝘝</mtext></math>=<span>1D61D</span></span> + <span><math class="testfont"><mtext>𝘞</mtext></math>=<span>1D61E</span></span> + <span><math class="testfont"><mtext>𝘟</mtext></math>=<span>1D61F</span></span> + <span><math class="testfont"><mtext>𝘠</mtext></math>=<span>1D620</span></span> + <span><math class="testfont"><mtext>𝘡</mtext></math>=<span>1D621</span></span> + <span><math class="testfont"><mtext>𝘢</mtext></math>=<span>1D622</span></span> + <span><math class="testfont"><mtext>𝘣</mtext></math>=<span>1D623</span></span> + <span><math class="testfont"><mtext>𝘤</mtext></math>=<span>1D624</span></span> + <span><math class="testfont"><mtext>𝘥</mtext></math>=<span>1D625</span></span><br/> + <span><math class="testfont"><mtext>𝘦</mtext></math>=<span>1D626</span></span> + <span><math class="testfont"><mtext>𝘧</mtext></math>=<span>1D627</span></span> + <span><math class="testfont"><mtext>𝘨</mtext></math>=<span>1D628</span></span> + <span><math class="testfont"><mtext>𝘩</mtext></math>=<span>1D629</span></span> + <span><math class="testfont"><mtext>𝘪</mtext></math>=<span>1D62A</span></span> + <span><math class="testfont"><mtext>𝘫</mtext></math>=<span>1D62B</span></span> + <span><math class="testfont"><mtext>𝘬</mtext></math>=<span>1D62C</span></span> + <span><math class="testfont"><mtext>𝘭</mtext></math>=<span>1D62D</span></span> + <span><math class="testfont"><mtext>𝘮</mtext></math>=<span>1D62E</span></span> + <span><math class="testfont"><mtext>𝘯</mtext></math>=<span>1D62F</span></span><br/> + <span><math class="testfont"><mtext>𝘰</mtext></math>=<span>1D630</span></span> + <span><math class="testfont"><mtext>𝘱</mtext></math>=<span>1D631</span></span> + <span><math class="testfont"><mtext>𝘲</mtext></math>=<span>1D632</span></span> + <span><math class="testfont"><mtext>𝘳</mtext></math>=<span>1D633</span></span> + <span><math class="testfont"><mtext>𝘴</mtext></math>=<span>1D634</span></span> + <span><math class="testfont"><mtext>𝘵</mtext></math>=<span>1D635</span></span> + <span><math class="testfont"><mtext>𝘶</mtext></math>=<span>1D636</span></span> + <span><math class="testfont"><mtext>𝘷</mtext></math>=<span>1D637</span></span> + <span><math class="testfont"><mtext>𝘸</mtext></math>=<span>1D638</span></span> + <span><math class="testfont"><mtext>𝘹</mtext></math>=<span>1D639</span></span><br/> + <span><math class="testfont"><mtext>𝘺</mtext></math>=<span>1D63A</span></span> + <span><math class="testfont"><mtext>𝘻</mtext></math>=<span>1D63B</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html index ab43df5..7711798 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-italic.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,57 +28,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="sans-serif-italic">A</mtext></math>=<span>1D608</span></span> - <span><math><mtext mathvariant="sans-serif-italic">B</mtext></math>=<span>1D609</span></span> - <span><math><mtext mathvariant="sans-serif-italic">C</mtext></math>=<span>1D60A</span></span> - <span><math><mtext mathvariant="sans-serif-italic">D</mtext></math>=<span>1D60B</span></span> - <span><math><mtext mathvariant="sans-serif-italic">E</mtext></math>=<span>1D60C</span></span> - <span><math><mtext mathvariant="sans-serif-italic">F</mtext></math>=<span>1D60D</span></span> - <span><math><mtext mathvariant="sans-serif-italic">G</mtext></math>=<span>1D60E</span></span> - <span><math><mtext mathvariant="sans-serif-italic">H</mtext></math>=<span>1D60F</span></span> - <span><math><mtext mathvariant="sans-serif-italic">I</mtext></math>=<span>1D610</span></span> - <span><math><mtext mathvariant="sans-serif-italic">J</mtext></math>=<span>1D611</span></span><br/> - <span><math><mtext mathvariant="sans-serif-italic">K</mtext></math>=<span>1D612</span></span> - <span><math><mtext mathvariant="sans-serif-italic">L</mtext></math>=<span>1D613</span></span> - <span><math><mtext mathvariant="sans-serif-italic">M</mtext></math>=<span>1D614</span></span> - <span><math><mtext mathvariant="sans-serif-italic">N</mtext></math>=<span>1D615</span></span> - <span><math><mtext mathvariant="sans-serif-italic">O</mtext></math>=<span>1D616</span></span> - <span><math><mtext mathvariant="sans-serif-italic">P</mtext></math>=<span>1D617</span></span> - <span><math><mtext mathvariant="sans-serif-italic">Q</mtext></math>=<span>1D618</span></span> - <span><math><mtext mathvariant="sans-serif-italic">R</mtext></math>=<span>1D619</span></span> - <span><math><mtext mathvariant="sans-serif-italic">S</mtext></math>=<span>1D61A</span></span> - <span><math><mtext mathvariant="sans-serif-italic">T</mtext></math>=<span>1D61B</span></span><br/> - <span><math><mtext mathvariant="sans-serif-italic">U</mtext></math>=<span>1D61C</span></span> - <span><math><mtext mathvariant="sans-serif-italic">V</mtext></math>=<span>1D61D</span></span> - <span><math><mtext mathvariant="sans-serif-italic">W</mtext></math>=<span>1D61E</span></span> - <span><math><mtext mathvariant="sans-serif-italic">X</mtext></math>=<span>1D61F</span></span> - <span><math><mtext mathvariant="sans-serif-italic">Y</mtext></math>=<span>1D620</span></span> - <span><math><mtext mathvariant="sans-serif-italic">Z</mtext></math>=<span>1D621</span></span> - <span><math><mtext mathvariant="sans-serif-italic">a</mtext></math>=<span>1D622</span></span> - <span><math><mtext mathvariant="sans-serif-italic">b</mtext></math>=<span>1D623</span></span> - <span><math><mtext mathvariant="sans-serif-italic">c</mtext></math>=<span>1D624</span></span> - <span><math><mtext mathvariant="sans-serif-italic">d</mtext></math>=<span>1D625</span></span><br/> - <span><math><mtext mathvariant="sans-serif-italic">e</mtext></math>=<span>1D626</span></span> - <span><math><mtext mathvariant="sans-serif-italic">f</mtext></math>=<span>1D627</span></span> - <span><math><mtext mathvariant="sans-serif-italic">g</mtext></math>=<span>1D628</span></span> - <span><math><mtext mathvariant="sans-serif-italic">h</mtext></math>=<span>1D629</span></span> - <span><math><mtext mathvariant="sans-serif-italic">i</mtext></math>=<span>1D62A</span></span> - <span><math><mtext mathvariant="sans-serif-italic">j</mtext></math>=<span>1D62B</span></span> - <span><math><mtext mathvariant="sans-serif-italic">k</mtext></math>=<span>1D62C</span></span> - <span><math><mtext mathvariant="sans-serif-italic">l</mtext></math>=<span>1D62D</span></span> - <span><math><mtext mathvariant="sans-serif-italic">m</mtext></math>=<span>1D62E</span></span> - <span><math><mtext mathvariant="sans-serif-italic">n</mtext></math>=<span>1D62F</span></span><br/> - <span><math><mtext mathvariant="sans-serif-italic">o</mtext></math>=<span>1D630</span></span> - <span><math><mtext mathvariant="sans-serif-italic">p</mtext></math>=<span>1D631</span></span> - <span><math><mtext mathvariant="sans-serif-italic">q</mtext></math>=<span>1D632</span></span> - <span><math><mtext mathvariant="sans-serif-italic">r</mtext></math>=<span>1D633</span></span> - <span><math><mtext mathvariant="sans-serif-italic">s</mtext></math>=<span>1D634</span></span> - <span><math><mtext mathvariant="sans-serif-italic">t</mtext></math>=<span>1D635</span></span> - <span><math><mtext mathvariant="sans-serif-italic">u</mtext></math>=<span>1D636</span></span> - <span><math><mtext mathvariant="sans-serif-italic">v</mtext></math>=<span>1D637</span></span> - <span><math><mtext mathvariant="sans-serif-italic">w</mtext></math>=<span>1D638</span></span> - <span><math><mtext mathvariant="sans-serif-italic">x</mtext></math>=<span>1D639</span></span><br/> - <span><math><mtext mathvariant="sans-serif-italic">y</mtext></math>=<span>1D63A</span></span> - <span><math><mtext mathvariant="sans-serif-italic">z</mtext></math>=<span>1D63B</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">A</mtext></math>=<span>1D608</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">B</mtext></math>=<span>1D609</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">C</mtext></math>=<span>1D60A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">D</mtext></math>=<span>1D60B</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">E</mtext></math>=<span>1D60C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">F</mtext></math>=<span>1D60D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">G</mtext></math>=<span>1D60E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">H</mtext></math>=<span>1D60F</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">I</mtext></math>=<span>1D610</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">J</mtext></math>=<span>1D611</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">K</mtext></math>=<span>1D612</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">L</mtext></math>=<span>1D613</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">M</mtext></math>=<span>1D614</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">N</mtext></math>=<span>1D615</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">O</mtext></math>=<span>1D616</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">P</mtext></math>=<span>1D617</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">Q</mtext></math>=<span>1D618</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">R</mtext></math>=<span>1D619</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">S</mtext></math>=<span>1D61A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">T</mtext></math>=<span>1D61B</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">U</mtext></math>=<span>1D61C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">V</mtext></math>=<span>1D61D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">W</mtext></math>=<span>1D61E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">X</mtext></math>=<span>1D61F</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">Y</mtext></math>=<span>1D620</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">Z</mtext></math>=<span>1D621</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">a</mtext></math>=<span>1D622</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">b</mtext></math>=<span>1D623</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">c</mtext></math>=<span>1D624</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">d</mtext></math>=<span>1D625</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">e</mtext></math>=<span>1D626</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">f</mtext></math>=<span>1D627</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">g</mtext></math>=<span>1D628</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">h</mtext></math>=<span>1D629</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">i</mtext></math>=<span>1D62A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">j</mtext></math>=<span>1D62B</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">k</mtext></math>=<span>1D62C</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">l</mtext></math>=<span>1D62D</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">m</mtext></math>=<span>1D62E</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">n</mtext></math>=<span>1D62F</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">o</mtext></math>=<span>1D630</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">p</mtext></math>=<span>1D631</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">q</mtext></math>=<span>1D632</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">r</mtext></math>=<span>1D633</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">s</mtext></math>=<span>1D634</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">t</mtext></math>=<span>1D635</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">u</mtext></math>=<span>1D636</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">v</mtext></math>=<span>1D637</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">w</mtext></math>=<span>1D638</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">x</mtext></math>=<span>1D639</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">y</mtext></math>=<span>1D63A</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif-italic">z</mtext></math>=<span>1D63B</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-ref.html index 35e4b656..1087565 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,67 +23,67 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝟢</mtext></math>=<span>1D7E2</span></span> - <span><math><mtext>𝟣</mtext></math>=<span>1D7E3</span></span> - <span><math><mtext>𝟤</mtext></math>=<span>1D7E4</span></span> - <span><math><mtext>𝟥</mtext></math>=<span>1D7E5</span></span> - <span><math><mtext>𝟦</mtext></math>=<span>1D7E6</span></span> - <span><math><mtext>𝟧</mtext></math>=<span>1D7E7</span></span> - <span><math><mtext>𝟨</mtext></math>=<span>1D7E8</span></span> - <span><math><mtext>𝟩</mtext></math>=<span>1D7E9</span></span> - <span><math><mtext>𝟪</mtext></math>=<span>1D7EA</span></span> - <span><math><mtext>𝟫</mtext></math>=<span>1D7EB</span></span><br/> - <span><math><mtext>𝖠</mtext></math>=<span>1D5A0</span></span> - <span><math><mtext>𝖡</mtext></math>=<span>1D5A1</span></span> - <span><math><mtext>𝖢</mtext></math>=<span>1D5A2</span></span> - <span><math><mtext>𝖣</mtext></math>=<span>1D5A3</span></span> - <span><math><mtext>𝖤</mtext></math>=<span>1D5A4</span></span> - <span><math><mtext>𝖥</mtext></math>=<span>1D5A5</span></span> - <span><math><mtext>𝖦</mtext></math>=<span>1D5A6</span></span> - <span><math><mtext>𝖧</mtext></math>=<span>1D5A7</span></span> - <span><math><mtext>𝖨</mtext></math>=<span>1D5A8</span></span> - <span><math><mtext>𝖩</mtext></math>=<span>1D5A9</span></span><br/> - <span><math><mtext>𝖪</mtext></math>=<span>1D5AA</span></span> - <span><math><mtext>𝖫</mtext></math>=<span>1D5AB</span></span> - <span><math><mtext>𝖬</mtext></math>=<span>1D5AC</span></span> - <span><math><mtext>𝖭</mtext></math>=<span>1D5AD</span></span> - <span><math><mtext>𝖮</mtext></math>=<span>1D5AE</span></span> - <span><math><mtext>𝖯</mtext></math>=<span>1D5AF</span></span> - <span><math><mtext>𝖰</mtext></math>=<span>1D5B0</span></span> - <span><math><mtext>𝖱</mtext></math>=<span>1D5B1</span></span> - <span><math><mtext>𝖲</mtext></math>=<span>1D5B2</span></span> - <span><math><mtext>𝖳</mtext></math>=<span>1D5B3</span></span><br/> - <span><math><mtext>𝖴</mtext></math>=<span>1D5B4</span></span> - <span><math><mtext>𝖵</mtext></math>=<span>1D5B5</span></span> - <span><math><mtext>𝖶</mtext></math>=<span>1D5B6</span></span> - <span><math><mtext>𝖷</mtext></math>=<span>1D5B7</span></span> - <span><math><mtext>𝖸</mtext></math>=<span>1D5B8</span></span> - <span><math><mtext>𝖹</mtext></math>=<span>1D5B9</span></span> - <span><math><mtext>𝖺</mtext></math>=<span>1D5BA</span></span> - <span><math><mtext>𝖻</mtext></math>=<span>1D5BB</span></span> - <span><math><mtext>𝖼</mtext></math>=<span>1D5BC</span></span> - <span><math><mtext>𝖽</mtext></math>=<span>1D5BD</span></span><br/> - <span><math><mtext>𝖾</mtext></math>=<span>1D5BE</span></span> - <span><math><mtext>𝖿</mtext></math>=<span>1D5BF</span></span> - <span><math><mtext>𝗀</mtext></math>=<span>1D5C0</span></span> - <span><math><mtext>𝗁</mtext></math>=<span>1D5C1</span></span> - <span><math><mtext>𝗂</mtext></math>=<span>1D5C2</span></span> - <span><math><mtext>𝗃</mtext></math>=<span>1D5C3</span></span> - <span><math><mtext>𝗄</mtext></math>=<span>1D5C4</span></span> - <span><math><mtext>𝗅</mtext></math>=<span>1D5C5</span></span> - <span><math><mtext>𝗆</mtext></math>=<span>1D5C6</span></span> - <span><math><mtext>𝗇</mtext></math>=<span>1D5C7</span></span><br/> - <span><math><mtext>𝗈</mtext></math>=<span>1D5C8</span></span> - <span><math><mtext>𝗉</mtext></math>=<span>1D5C9</span></span> - <span><math><mtext>𝗊</mtext></math>=<span>1D5CA</span></span> - <span><math><mtext>𝗋</mtext></math>=<span>1D5CB</span></span> - <span><math><mtext>𝗌</mtext></math>=<span>1D5CC</span></span> - <span><math><mtext>𝗍</mtext></math>=<span>1D5CD</span></span> - <span><math><mtext>𝗎</mtext></math>=<span>1D5CE</span></span> - <span><math><mtext>𝗏</mtext></math>=<span>1D5CF</span></span> - <span><math><mtext>𝗐</mtext></math>=<span>1D5D0</span></span> - <span><math><mtext>𝗑</mtext></math>=<span>1D5D1</span></span><br/> - <span><math><mtext>𝗒</mtext></math>=<span>1D5D2</span></span> - <span><math><mtext>𝗓</mtext></math>=<span>1D5D3</span></span> + <span><math class="testfont"><mtext>𝟢</mtext></math>=<span>1D7E2</span></span> + <span><math class="testfont"><mtext>𝟣</mtext></math>=<span>1D7E3</span></span> + <span><math class="testfont"><mtext>𝟤</mtext></math>=<span>1D7E4</span></span> + <span><math class="testfont"><mtext>𝟥</mtext></math>=<span>1D7E5</span></span> + <span><math class="testfont"><mtext>𝟦</mtext></math>=<span>1D7E6</span></span> + <span><math class="testfont"><mtext>𝟧</mtext></math>=<span>1D7E7</span></span> + <span><math class="testfont"><mtext>𝟨</mtext></math>=<span>1D7E8</span></span> + <span><math class="testfont"><mtext>𝟩</mtext></math>=<span>1D7E9</span></span> + <span><math class="testfont"><mtext>𝟪</mtext></math>=<span>1D7EA</span></span> + <span><math class="testfont"><mtext>𝟫</mtext></math>=<span>1D7EB</span></span><br/> + <span><math class="testfont"><mtext>𝖠</mtext></math>=<span>1D5A0</span></span> + <span><math class="testfont"><mtext>𝖡</mtext></math>=<span>1D5A1</span></span> + <span><math class="testfont"><mtext>𝖢</mtext></math>=<span>1D5A2</span></span> + <span><math class="testfont"><mtext>𝖣</mtext></math>=<span>1D5A3</span></span> + <span><math class="testfont"><mtext>𝖤</mtext></math>=<span>1D5A4</span></span> + <span><math class="testfont"><mtext>𝖥</mtext></math>=<span>1D5A5</span></span> + <span><math class="testfont"><mtext>𝖦</mtext></math>=<span>1D5A6</span></span> + <span><math class="testfont"><mtext>𝖧</mtext></math>=<span>1D5A7</span></span> + <span><math class="testfont"><mtext>𝖨</mtext></math>=<span>1D5A8</span></span> + <span><math class="testfont"><mtext>𝖩</mtext></math>=<span>1D5A9</span></span><br/> + <span><math class="testfont"><mtext>𝖪</mtext></math>=<span>1D5AA</span></span> + <span><math class="testfont"><mtext>𝖫</mtext></math>=<span>1D5AB</span></span> + <span><math class="testfont"><mtext>𝖬</mtext></math>=<span>1D5AC</span></span> + <span><math class="testfont"><mtext>𝖭</mtext></math>=<span>1D5AD</span></span> + <span><math class="testfont"><mtext>𝖮</mtext></math>=<span>1D5AE</span></span> + <span><math class="testfont"><mtext>𝖯</mtext></math>=<span>1D5AF</span></span> + <span><math class="testfont"><mtext>𝖰</mtext></math>=<span>1D5B0</span></span> + <span><math class="testfont"><mtext>𝖱</mtext></math>=<span>1D5B1</span></span> + <span><math class="testfont"><mtext>𝖲</mtext></math>=<span>1D5B2</span></span> + <span><math class="testfont"><mtext>𝖳</mtext></math>=<span>1D5B3</span></span><br/> + <span><math class="testfont"><mtext>𝖴</mtext></math>=<span>1D5B4</span></span> + <span><math class="testfont"><mtext>𝖵</mtext></math>=<span>1D5B5</span></span> + <span><math class="testfont"><mtext>𝖶</mtext></math>=<span>1D5B6</span></span> + <span><math class="testfont"><mtext>𝖷</mtext></math>=<span>1D5B7</span></span> + <span><math class="testfont"><mtext>𝖸</mtext></math>=<span>1D5B8</span></span> + <span><math class="testfont"><mtext>𝖹</mtext></math>=<span>1D5B9</span></span> + <span><math class="testfont"><mtext>𝖺</mtext></math>=<span>1D5BA</span></span> + <span><math class="testfont"><mtext>𝖻</mtext></math>=<span>1D5BB</span></span> + <span><math class="testfont"><mtext>𝖼</mtext></math>=<span>1D5BC</span></span> + <span><math class="testfont"><mtext>𝖽</mtext></math>=<span>1D5BD</span></span><br/> + <span><math class="testfont"><mtext>𝖾</mtext></math>=<span>1D5BE</span></span> + <span><math class="testfont"><mtext>𝖿</mtext></math>=<span>1D5BF</span></span> + <span><math class="testfont"><mtext>𝗀</mtext></math>=<span>1D5C0</span></span> + <span><math class="testfont"><mtext>𝗁</mtext></math>=<span>1D5C1</span></span> + <span><math class="testfont"><mtext>𝗂</mtext></math>=<span>1D5C2</span></span> + <span><math class="testfont"><mtext>𝗃</mtext></math>=<span>1D5C3</span></span> + <span><math class="testfont"><mtext>𝗄</mtext></math>=<span>1D5C4</span></span> + <span><math class="testfont"><mtext>𝗅</mtext></math>=<span>1D5C5</span></span> + <span><math class="testfont"><mtext>𝗆</mtext></math>=<span>1D5C6</span></span> + <span><math class="testfont"><mtext>𝗇</mtext></math>=<span>1D5C7</span></span><br/> + <span><math class="testfont"><mtext>𝗈</mtext></math>=<span>1D5C8</span></span> + <span><math class="testfont"><mtext>𝗉</mtext></math>=<span>1D5C9</span></span> + <span><math class="testfont"><mtext>𝗊</mtext></math>=<span>1D5CA</span></span> + <span><math class="testfont"><mtext>𝗋</mtext></math>=<span>1D5CB</span></span> + <span><math class="testfont"><mtext>𝗌</mtext></math>=<span>1D5CC</span></span> + <span><math class="testfont"><mtext>𝗍</mtext></math>=<span>1D5CD</span></span> + <span><math class="testfont"><mtext>𝗎</mtext></math>=<span>1D5CE</span></span> + <span><math class="testfont"><mtext>𝗏</mtext></math>=<span>1D5CF</span></span> + <span><math class="testfont"><mtext>𝗐</mtext></math>=<span>1D5D0</span></span> + <span><math class="testfont"><mtext>𝗑</mtext></math>=<span>1D5D1</span></span><br/> + <span><math class="testfont"><mtext>𝗒</mtext></math>=<span>1D5D2</span></span> + <span><math class="testfont"><mtext>𝗓</mtext></math>=<span>1D5D3</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html index bfee81c0..afceecf6 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-sans-serif.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,67 +28,67 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="sans-serif">0</mtext></math>=<span>1D7E2</span></span> - <span><math><mtext mathvariant="sans-serif">1</mtext></math>=<span>1D7E3</span></span> - <span><math><mtext mathvariant="sans-serif">2</mtext></math>=<span>1D7E4</span></span> - <span><math><mtext mathvariant="sans-serif">3</mtext></math>=<span>1D7E5</span></span> - <span><math><mtext mathvariant="sans-serif">4</mtext></math>=<span>1D7E6</span></span> - <span><math><mtext mathvariant="sans-serif">5</mtext></math>=<span>1D7E7</span></span> - <span><math><mtext mathvariant="sans-serif">6</mtext></math>=<span>1D7E8</span></span> - <span><math><mtext mathvariant="sans-serif">7</mtext></math>=<span>1D7E9</span></span> - <span><math><mtext mathvariant="sans-serif">8</mtext></math>=<span>1D7EA</span></span> - <span><math><mtext mathvariant="sans-serif">9</mtext></math>=<span>1D7EB</span></span><br/> - <span><math><mtext mathvariant="sans-serif">A</mtext></math>=<span>1D5A0</span></span> - <span><math><mtext mathvariant="sans-serif">B</mtext></math>=<span>1D5A1</span></span> - <span><math><mtext mathvariant="sans-serif">C</mtext></math>=<span>1D5A2</span></span> - <span><math><mtext mathvariant="sans-serif">D</mtext></math>=<span>1D5A3</span></span> - <span><math><mtext mathvariant="sans-serif">E</mtext></math>=<span>1D5A4</span></span> - <span><math><mtext mathvariant="sans-serif">F</mtext></math>=<span>1D5A5</span></span> - <span><math><mtext mathvariant="sans-serif">G</mtext></math>=<span>1D5A6</span></span> - <span><math><mtext mathvariant="sans-serif">H</mtext></math>=<span>1D5A7</span></span> - <span><math><mtext mathvariant="sans-serif">I</mtext></math>=<span>1D5A8</span></span> - <span><math><mtext mathvariant="sans-serif">J</mtext></math>=<span>1D5A9</span></span><br/> - <span><math><mtext mathvariant="sans-serif">K</mtext></math>=<span>1D5AA</span></span> - <span><math><mtext mathvariant="sans-serif">L</mtext></math>=<span>1D5AB</span></span> - <span><math><mtext mathvariant="sans-serif">M</mtext></math>=<span>1D5AC</span></span> - <span><math><mtext mathvariant="sans-serif">N</mtext></math>=<span>1D5AD</span></span> - <span><math><mtext mathvariant="sans-serif">O</mtext></math>=<span>1D5AE</span></span> - <span><math><mtext mathvariant="sans-serif">P</mtext></math>=<span>1D5AF</span></span> - <span><math><mtext mathvariant="sans-serif">Q</mtext></math>=<span>1D5B0</span></span> - <span><math><mtext mathvariant="sans-serif">R</mtext></math>=<span>1D5B1</span></span> - <span><math><mtext mathvariant="sans-serif">S</mtext></math>=<span>1D5B2</span></span> - <span><math><mtext mathvariant="sans-serif">T</mtext></math>=<span>1D5B3</span></span><br/> - <span><math><mtext mathvariant="sans-serif">U</mtext></math>=<span>1D5B4</span></span> - <span><math><mtext mathvariant="sans-serif">V</mtext></math>=<span>1D5B5</span></span> - <span><math><mtext mathvariant="sans-serif">W</mtext></math>=<span>1D5B6</span></span> - <span><math><mtext mathvariant="sans-serif">X</mtext></math>=<span>1D5B7</span></span> - <span><math><mtext mathvariant="sans-serif">Y</mtext></math>=<span>1D5B8</span></span> - <span><math><mtext mathvariant="sans-serif">Z</mtext></math>=<span>1D5B9</span></span> - <span><math><mtext mathvariant="sans-serif">a</mtext></math>=<span>1D5BA</span></span> - <span><math><mtext mathvariant="sans-serif">b</mtext></math>=<span>1D5BB</span></span> - <span><math><mtext mathvariant="sans-serif">c</mtext></math>=<span>1D5BC</span></span> - <span><math><mtext mathvariant="sans-serif">d</mtext></math>=<span>1D5BD</span></span><br/> - <span><math><mtext mathvariant="sans-serif">e</mtext></math>=<span>1D5BE</span></span> - <span><math><mtext mathvariant="sans-serif">f</mtext></math>=<span>1D5BF</span></span> - <span><math><mtext mathvariant="sans-serif">g</mtext></math>=<span>1D5C0</span></span> - <span><math><mtext mathvariant="sans-serif">h</mtext></math>=<span>1D5C1</span></span> - <span><math><mtext mathvariant="sans-serif">i</mtext></math>=<span>1D5C2</span></span> - <span><math><mtext mathvariant="sans-serif">j</mtext></math>=<span>1D5C3</span></span> - <span><math><mtext mathvariant="sans-serif">k</mtext></math>=<span>1D5C4</span></span> - <span><math><mtext mathvariant="sans-serif">l</mtext></math>=<span>1D5C5</span></span> - <span><math><mtext mathvariant="sans-serif">m</mtext></math>=<span>1D5C6</span></span> - <span><math><mtext mathvariant="sans-serif">n</mtext></math>=<span>1D5C7</span></span><br/> - <span><math><mtext mathvariant="sans-serif">o</mtext></math>=<span>1D5C8</span></span> - <span><math><mtext mathvariant="sans-serif">p</mtext></math>=<span>1D5C9</span></span> - <span><math><mtext mathvariant="sans-serif">q</mtext></math>=<span>1D5CA</span></span> - <span><math><mtext mathvariant="sans-serif">r</mtext></math>=<span>1D5CB</span></span> - <span><math><mtext mathvariant="sans-serif">s</mtext></math>=<span>1D5CC</span></span> - <span><math><mtext mathvariant="sans-serif">t</mtext></math>=<span>1D5CD</span></span> - <span><math><mtext mathvariant="sans-serif">u</mtext></math>=<span>1D5CE</span></span> - <span><math><mtext mathvariant="sans-serif">v</mtext></math>=<span>1D5CF</span></span> - <span><math><mtext mathvariant="sans-serif">w</mtext></math>=<span>1D5D0</span></span> - <span><math><mtext mathvariant="sans-serif">x</mtext></math>=<span>1D5D1</span></span><br/> - <span><math><mtext mathvariant="sans-serif">y</mtext></math>=<span>1D5D2</span></span> - <span><math><mtext mathvariant="sans-serif">z</mtext></math>=<span>1D5D3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">0</mtext></math>=<span>1D7E2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">1</mtext></math>=<span>1D7E3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">2</mtext></math>=<span>1D7E4</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">3</mtext></math>=<span>1D7E5</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">4</mtext></math>=<span>1D7E6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">5</mtext></math>=<span>1D7E7</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">6</mtext></math>=<span>1D7E8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">7</mtext></math>=<span>1D7E9</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">8</mtext></math>=<span>1D7EA</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">9</mtext></math>=<span>1D7EB</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif">A</mtext></math>=<span>1D5A0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">B</mtext></math>=<span>1D5A1</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">C</mtext></math>=<span>1D5A2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">D</mtext></math>=<span>1D5A3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">E</mtext></math>=<span>1D5A4</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">F</mtext></math>=<span>1D5A5</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">G</mtext></math>=<span>1D5A6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">H</mtext></math>=<span>1D5A7</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">I</mtext></math>=<span>1D5A8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">J</mtext></math>=<span>1D5A9</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif">K</mtext></math>=<span>1D5AA</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">L</mtext></math>=<span>1D5AB</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">M</mtext></math>=<span>1D5AC</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">N</mtext></math>=<span>1D5AD</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">O</mtext></math>=<span>1D5AE</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">P</mtext></math>=<span>1D5AF</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">Q</mtext></math>=<span>1D5B0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">R</mtext></math>=<span>1D5B1</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">S</mtext></math>=<span>1D5B2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">T</mtext></math>=<span>1D5B3</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif">U</mtext></math>=<span>1D5B4</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">V</mtext></math>=<span>1D5B5</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">W</mtext></math>=<span>1D5B6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">X</mtext></math>=<span>1D5B7</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">Y</mtext></math>=<span>1D5B8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">Z</mtext></math>=<span>1D5B9</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">a</mtext></math>=<span>1D5BA</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">b</mtext></math>=<span>1D5BB</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">c</mtext></math>=<span>1D5BC</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">d</mtext></math>=<span>1D5BD</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif">e</mtext></math>=<span>1D5BE</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">f</mtext></math>=<span>1D5BF</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">g</mtext></math>=<span>1D5C0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">h</mtext></math>=<span>1D5C1</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">i</mtext></math>=<span>1D5C2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">j</mtext></math>=<span>1D5C3</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">k</mtext></math>=<span>1D5C4</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">l</mtext></math>=<span>1D5C5</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">m</mtext></math>=<span>1D5C6</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">n</mtext></math>=<span>1D5C7</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif">o</mtext></math>=<span>1D5C8</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">p</mtext></math>=<span>1D5C9</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">q</mtext></math>=<span>1D5CA</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">r</mtext></math>=<span>1D5CB</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">s</mtext></math>=<span>1D5CC</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">t</mtext></math>=<span>1D5CD</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">u</mtext></math>=<span>1D5CE</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">v</mtext></math>=<span>1D5CF</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">w</mtext></math>=<span>1D5D0</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">x</mtext></math>=<span>1D5D1</span></span><br/> + <span><math class="testfont"><mtext mathvariant="sans-serif">y</mtext></math>=<span>1D5D2</span></span> + <span><math class="testfont"><mtext mathvariant="sans-serif">z</mtext></math>=<span>1D5D3</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script-ref.html index 725268a..60ced85bc 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,57 +23,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𝒜</mtext></math>=<span>1D49C</span></span> - <span><math><mtext>ℬ</mtext></math>=<span>0212C</span></span> - <span><math><mtext>𝒞</mtext></math>=<span>1D49E</span></span> - <span><math><mtext>𝒟</mtext></math>=<span>1D49F</span></span> - <span><math><mtext>ℰ</mtext></math>=<span>02130</span></span> - <span><math><mtext>ℱ</mtext></math>=<span>02131</span></span> - <span><math><mtext>𝒢</mtext></math>=<span>1D4A2</span></span> - <span><math><mtext>ℋ</mtext></math>=<span>0210B</span></span> - <span><math><mtext>ℐ</mtext></math>=<span>02110</span></span> - <span><math><mtext>𝒥</mtext></math>=<span>1D4A5</span></span><br/> - <span><math><mtext>𝒦</mtext></math>=<span>1D4A6</span></span> - <span><math><mtext>ℒ</mtext></math>=<span>02112</span></span> - <span><math><mtext>ℳ</mtext></math>=<span>02133</span></span> - <span><math><mtext>𝒩</mtext></math>=<span>1D4A9</span></span> - <span><math><mtext>𝒪</mtext></math>=<span>1D4AA</span></span> - <span><math><mtext>𝒫</mtext></math>=<span>1D4AB</span></span> - <span><math><mtext>𝒬</mtext></math>=<span>1D4AC</span></span> - <span><math><mtext>ℛ</mtext></math>=<span>0211B</span></span> - <span><math><mtext>𝒮</mtext></math>=<span>1D4AE</span></span> - <span><math><mtext>𝒯</mtext></math>=<span>1D4AF</span></span><br/> - <span><math><mtext>𝒰</mtext></math>=<span>1D4B0</span></span> - <span><math><mtext>𝒱</mtext></math>=<span>1D4B1</span></span> - <span><math><mtext>𝒲</mtext></math>=<span>1D4B2</span></span> - <span><math><mtext>𝒳</mtext></math>=<span>1D4B3</span></span> - <span><math><mtext>𝒴</mtext></math>=<span>1D4B4</span></span> - <span><math><mtext>𝒵</mtext></math>=<span>1D4B5</span></span> - <span><math><mtext>𝒶</mtext></math>=<span>1D4B6</span></span> - <span><math><mtext>𝒷</mtext></math>=<span>1D4B7</span></span> - <span><math><mtext>𝒸</mtext></math>=<span>1D4B8</span></span> - <span><math><mtext>𝒹</mtext></math>=<span>1D4B9</span></span><br/> - <span><math><mtext>ℯ</mtext></math>=<span>0212F</span></span> - <span><math><mtext>𝒻</mtext></math>=<span>1D4BB</span></span> - <span><math><mtext>ℊ</mtext></math>=<span>0210A</span></span> - <span><math><mtext>𝒽</mtext></math>=<span>1D4BD</span></span> - <span><math><mtext>𝒾</mtext></math>=<span>1D4BE</span></span> - <span><math><mtext>𝒿</mtext></math>=<span>1D4BF</span></span> - <span><math><mtext>𝓀</mtext></math>=<span>1D4C0</span></span> - <span><math><mtext>𝓁</mtext></math>=<span>1D4C1</span></span> - <span><math><mtext>𝓂</mtext></math>=<span>1D4C2</span></span> - <span><math><mtext>𝓃</mtext></math>=<span>1D4C3</span></span><br/> - <span><math><mtext>ℴ</mtext></math>=<span>02134</span></span> - <span><math><mtext>𝓅</mtext></math>=<span>1D4C5</span></span> - <span><math><mtext>𝓆</mtext></math>=<span>1D4C6</span></span> - <span><math><mtext>𝓇</mtext></math>=<span>1D4C7</span></span> - <span><math><mtext>𝓈</mtext></math>=<span>1D4C8</span></span> - <span><math><mtext>𝓉</mtext></math>=<span>1D4C9</span></span> - <span><math><mtext>𝓊</mtext></math>=<span>1D4CA</span></span> - <span><math><mtext>𝓋</mtext></math>=<span>1D4CB</span></span> - <span><math><mtext>𝓌</mtext></math>=<span>1D4CC</span></span> - <span><math><mtext>𝓍</mtext></math>=<span>1D4CD</span></span><br/> - <span><math><mtext>𝓎</mtext></math>=<span>1D4CE</span></span> - <span><math><mtext>𝓏</mtext></math>=<span>1D4CF</span></span> + <span><math class="testfont"><mtext>𝒜</mtext></math>=<span>1D49C</span></span> + <span><math class="testfont"><mtext>ℬ</mtext></math>=<span>0212C</span></span> + <span><math class="testfont"><mtext>𝒞</mtext></math>=<span>1D49E</span></span> + <span><math class="testfont"><mtext>𝒟</mtext></math>=<span>1D49F</span></span> + <span><math class="testfont"><mtext>ℰ</mtext></math>=<span>02130</span></span> + <span><math class="testfont"><mtext>ℱ</mtext></math>=<span>02131</span></span> + <span><math class="testfont"><mtext>𝒢</mtext></math>=<span>1D4A2</span></span> + <span><math class="testfont"><mtext>ℋ</mtext></math>=<span>0210B</span></span> + <span><math class="testfont"><mtext>ℐ</mtext></math>=<span>02110</span></span> + <span><math class="testfont"><mtext>𝒥</mtext></math>=<span>1D4A5</span></span><br/> + <span><math class="testfont"><mtext>𝒦</mtext></math>=<span>1D4A6</span></span> + <span><math class="testfont"><mtext>ℒ</mtext></math>=<span>02112</span></span> + <span><math class="testfont"><mtext>ℳ</mtext></math>=<span>02133</span></span> + <span><math class="testfont"><mtext>𝒩</mtext></math>=<span>1D4A9</span></span> + <span><math class="testfont"><mtext>𝒪</mtext></math>=<span>1D4AA</span></span> + <span><math class="testfont"><mtext>𝒫</mtext></math>=<span>1D4AB</span></span> + <span><math class="testfont"><mtext>𝒬</mtext></math>=<span>1D4AC</span></span> + <span><math class="testfont"><mtext>ℛ</mtext></math>=<span>0211B</span></span> + <span><math class="testfont"><mtext>𝒮</mtext></math>=<span>1D4AE</span></span> + <span><math class="testfont"><mtext>𝒯</mtext></math>=<span>1D4AF</span></span><br/> + <span><math class="testfont"><mtext>𝒰</mtext></math>=<span>1D4B0</span></span> + <span><math class="testfont"><mtext>𝒱</mtext></math>=<span>1D4B1</span></span> + <span><math class="testfont"><mtext>𝒲</mtext></math>=<span>1D4B2</span></span> + <span><math class="testfont"><mtext>𝒳</mtext></math>=<span>1D4B3</span></span> + <span><math class="testfont"><mtext>𝒴</mtext></math>=<span>1D4B4</span></span> + <span><math class="testfont"><mtext>𝒵</mtext></math>=<span>1D4B5</span></span> + <span><math class="testfont"><mtext>𝒶</mtext></math>=<span>1D4B6</span></span> + <span><math class="testfont"><mtext>𝒷</mtext></math>=<span>1D4B7</span></span> + <span><math class="testfont"><mtext>𝒸</mtext></math>=<span>1D4B8</span></span> + <span><math class="testfont"><mtext>𝒹</mtext></math>=<span>1D4B9</span></span><br/> + <span><math class="testfont"><mtext>ℯ</mtext></math>=<span>0212F</span></span> + <span><math class="testfont"><mtext>𝒻</mtext></math>=<span>1D4BB</span></span> + <span><math class="testfont"><mtext>ℊ</mtext></math>=<span>0210A</span></span> + <span><math class="testfont"><mtext>𝒽</mtext></math>=<span>1D4BD</span></span> + <span><math class="testfont"><mtext>𝒾</mtext></math>=<span>1D4BE</span></span> + <span><math class="testfont"><mtext>𝒿</mtext></math>=<span>1D4BF</span></span> + <span><math class="testfont"><mtext>𝓀</mtext></math>=<span>1D4C0</span></span> + <span><math class="testfont"><mtext>𝓁</mtext></math>=<span>1D4C1</span></span> + <span><math class="testfont"><mtext>𝓂</mtext></math>=<span>1D4C2</span></span> + <span><math class="testfont"><mtext>𝓃</mtext></math>=<span>1D4C3</span></span><br/> + <span><math class="testfont"><mtext>ℴ</mtext></math>=<span>02134</span></span> + <span><math class="testfont"><mtext>𝓅</mtext></math>=<span>1D4C5</span></span> + <span><math class="testfont"><mtext>𝓆</mtext></math>=<span>1D4C6</span></span> + <span><math class="testfont"><mtext>𝓇</mtext></math>=<span>1D4C7</span></span> + <span><math class="testfont"><mtext>𝓈</mtext></math>=<span>1D4C8</span></span> + <span><math class="testfont"><mtext>𝓉</mtext></math>=<span>1D4C9</span></span> + <span><math class="testfont"><mtext>𝓊</mtext></math>=<span>1D4CA</span></span> + <span><math class="testfont"><mtext>𝓋</mtext></math>=<span>1D4CB</span></span> + <span><math class="testfont"><mtext>𝓌</mtext></math>=<span>1D4CC</span></span> + <span><math class="testfont"><mtext>𝓍</mtext></math>=<span>1D4CD</span></span><br/> + <span><math class="testfont"><mtext>𝓎</mtext></math>=<span>1D4CE</span></span> + <span><math class="testfont"><mtext>𝓏</mtext></math>=<span>1D4CF</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html index dd7ab6a..c7f93a8d 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-script.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,57 +28,57 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="script">A</mtext></math>=<span>1D49C</span></span> - <span><math><mtext mathvariant="script">B</mtext></math>=<span>0212C</span></span> - <span><math><mtext mathvariant="script">C</mtext></math>=<span>1D49E</span></span> - <span><math><mtext mathvariant="script">D</mtext></math>=<span>1D49F</span></span> - <span><math><mtext mathvariant="script">E</mtext></math>=<span>02130</span></span> - <span><math><mtext mathvariant="script">F</mtext></math>=<span>02131</span></span> - <span><math><mtext mathvariant="script">G</mtext></math>=<span>1D4A2</span></span> - <span><math><mtext mathvariant="script">H</mtext></math>=<span>0210B</span></span> - <span><math><mtext mathvariant="script">I</mtext></math>=<span>02110</span></span> - <span><math><mtext mathvariant="script">J</mtext></math>=<span>1D4A5</span></span><br/> - <span><math><mtext mathvariant="script">K</mtext></math>=<span>1D4A6</span></span> - <span><math><mtext mathvariant="script">L</mtext></math>=<span>02112</span></span> - <span><math><mtext mathvariant="script">M</mtext></math>=<span>02133</span></span> - <span><math><mtext mathvariant="script">N</mtext></math>=<span>1D4A9</span></span> - <span><math><mtext mathvariant="script">O</mtext></math>=<span>1D4AA</span></span> - <span><math><mtext mathvariant="script">P</mtext></math>=<span>1D4AB</span></span> - <span><math><mtext mathvariant="script">Q</mtext></math>=<span>1D4AC</span></span> - <span><math><mtext mathvariant="script">R</mtext></math>=<span>0211B</span></span> - <span><math><mtext mathvariant="script">S</mtext></math>=<span>1D4AE</span></span> - <span><math><mtext mathvariant="script">T</mtext></math>=<span>1D4AF</span></span><br/> - <span><math><mtext mathvariant="script">U</mtext></math>=<span>1D4B0</span></span> - <span><math><mtext mathvariant="script">V</mtext></math>=<span>1D4B1</span></span> - <span><math><mtext mathvariant="script">W</mtext></math>=<span>1D4B2</span></span> - <span><math><mtext mathvariant="script">X</mtext></math>=<span>1D4B3</span></span> - <span><math><mtext mathvariant="script">Y</mtext></math>=<span>1D4B4</span></span> - <span><math><mtext mathvariant="script">Z</mtext></math>=<span>1D4B5</span></span> - <span><math><mtext mathvariant="script">a</mtext></math>=<span>1D4B6</span></span> - <span><math><mtext mathvariant="script">b</mtext></math>=<span>1D4B7</span></span> - <span><math><mtext mathvariant="script">c</mtext></math>=<span>1D4B8</span></span> - <span><math><mtext mathvariant="script">d</mtext></math>=<span>1D4B9</span></span><br/> - <span><math><mtext mathvariant="script">e</mtext></math>=<span>0212F</span></span> - <span><math><mtext mathvariant="script">f</mtext></math>=<span>1D4BB</span></span> - <span><math><mtext mathvariant="script">g</mtext></math>=<span>0210A</span></span> - <span><math><mtext mathvariant="script">h</mtext></math>=<span>1D4BD</span></span> - <span><math><mtext mathvariant="script">i</mtext></math>=<span>1D4BE</span></span> - <span><math><mtext mathvariant="script">j</mtext></math>=<span>1D4BF</span></span> - <span><math><mtext mathvariant="script">k</mtext></math>=<span>1D4C0</span></span> - <span><math><mtext mathvariant="script">l</mtext></math>=<span>1D4C1</span></span> - <span><math><mtext mathvariant="script">m</mtext></math>=<span>1D4C2</span></span> - <span><math><mtext mathvariant="script">n</mtext></math>=<span>1D4C3</span></span><br/> - <span><math><mtext mathvariant="script">o</mtext></math>=<span>02134</span></span> - <span><math><mtext mathvariant="script">p</mtext></math>=<span>1D4C5</span></span> - <span><math><mtext mathvariant="script">q</mtext></math>=<span>1D4C6</span></span> - <span><math><mtext mathvariant="script">r</mtext></math>=<span>1D4C7</span></span> - <span><math><mtext mathvariant="script">s</mtext></math>=<span>1D4C8</span></span> - <span><math><mtext mathvariant="script">t</mtext></math>=<span>1D4C9</span></span> - <span><math><mtext mathvariant="script">u</mtext></math>=<span>1D4CA</span></span> - <span><math><mtext mathvariant="script">v</mtext></math>=<span>1D4CB</span></span> - <span><math><mtext mathvariant="script">w</mtext></math>=<span>1D4CC</span></span> - <span><math><mtext mathvariant="script">x</mtext></math>=<span>1D4CD</span></span><br/> - <span><math><mtext mathvariant="script">y</mtext></math>=<span>1D4CE</span></span> - <span><math><mtext mathvariant="script">z</mtext></math>=<span>1D4CF</span></span> + <span><math class="testfont"><mtext mathvariant="script">A</mtext></math>=<span>1D49C</span></span> + <span><math class="testfont"><mtext mathvariant="script">B</mtext></math>=<span>0212C</span></span> + <span><math class="testfont"><mtext mathvariant="script">C</mtext></math>=<span>1D49E</span></span> + <span><math class="testfont"><mtext mathvariant="script">D</mtext></math>=<span>1D49F</span></span> + <span><math class="testfont"><mtext mathvariant="script">E</mtext></math>=<span>02130</span></span> + <span><math class="testfont"><mtext mathvariant="script">F</mtext></math>=<span>02131</span></span> + <span><math class="testfont"><mtext mathvariant="script">G</mtext></math>=<span>1D4A2</span></span> + <span><math class="testfont"><mtext mathvariant="script">H</mtext></math>=<span>0210B</span></span> + <span><math class="testfont"><mtext mathvariant="script">I</mtext></math>=<span>02110</span></span> + <span><math class="testfont"><mtext mathvariant="script">J</mtext></math>=<span>1D4A5</span></span><br/> + <span><math class="testfont"><mtext mathvariant="script">K</mtext></math>=<span>1D4A6</span></span> + <span><math class="testfont"><mtext mathvariant="script">L</mtext></math>=<span>02112</span></span> + <span><math class="testfont"><mtext mathvariant="script">M</mtext></math>=<span>02133</span></span> + <span><math class="testfont"><mtext mathvariant="script">N</mtext></math>=<span>1D4A9</span></span> + <span><math class="testfont"><mtext mathvariant="script">O</mtext></math>=<span>1D4AA</span></span> + <span><math class="testfont"><mtext mathvariant="script">P</mtext></math>=<span>1D4AB</span></span> + <span><math class="testfont"><mtext mathvariant="script">Q</mtext></math>=<span>1D4AC</span></span> + <span><math class="testfont"><mtext mathvariant="script">R</mtext></math>=<span>0211B</span></span> + <span><math class="testfont"><mtext mathvariant="script">S</mtext></math>=<span>1D4AE</span></span> + <span><math class="testfont"><mtext mathvariant="script">T</mtext></math>=<span>1D4AF</span></span><br/> + <span><math class="testfont"><mtext mathvariant="script">U</mtext></math>=<span>1D4B0</span></span> + <span><math class="testfont"><mtext mathvariant="script">V</mtext></math>=<span>1D4B1</span></span> + <span><math class="testfont"><mtext mathvariant="script">W</mtext></math>=<span>1D4B2</span></span> + <span><math class="testfont"><mtext mathvariant="script">X</mtext></math>=<span>1D4B3</span></span> + <span><math class="testfont"><mtext mathvariant="script">Y</mtext></math>=<span>1D4B4</span></span> + <span><math class="testfont"><mtext mathvariant="script">Z</mtext></math>=<span>1D4B5</span></span> + <span><math class="testfont"><mtext mathvariant="script">a</mtext></math>=<span>1D4B6</span></span> + <span><math class="testfont"><mtext mathvariant="script">b</mtext></math>=<span>1D4B7</span></span> + <span><math class="testfont"><mtext mathvariant="script">c</mtext></math>=<span>1D4B8</span></span> + <span><math class="testfont"><mtext mathvariant="script">d</mtext></math>=<span>1D4B9</span></span><br/> + <span><math class="testfont"><mtext mathvariant="script">e</mtext></math>=<span>0212F</span></span> + <span><math class="testfont"><mtext mathvariant="script">f</mtext></math>=<span>1D4BB</span></span> + <span><math class="testfont"><mtext mathvariant="script">g</mtext></math>=<span>0210A</span></span> + <span><math class="testfont"><mtext mathvariant="script">h</mtext></math>=<span>1D4BD</span></span> + <span><math class="testfont"><mtext mathvariant="script">i</mtext></math>=<span>1D4BE</span></span> + <span><math class="testfont"><mtext mathvariant="script">j</mtext></math>=<span>1D4BF</span></span> + <span><math class="testfont"><mtext mathvariant="script">k</mtext></math>=<span>1D4C0</span></span> + <span><math class="testfont"><mtext mathvariant="script">l</mtext></math>=<span>1D4C1</span></span> + <span><math class="testfont"><mtext mathvariant="script">m</mtext></math>=<span>1D4C2</span></span> + <span><math class="testfont"><mtext mathvariant="script">n</mtext></math>=<span>1D4C3</span></span><br/> + <span><math class="testfont"><mtext mathvariant="script">o</mtext></math>=<span>02134</span></span> + <span><math class="testfont"><mtext mathvariant="script">p</mtext></math>=<span>1D4C5</span></span> + <span><math class="testfont"><mtext mathvariant="script">q</mtext></math>=<span>1D4C6</span></span> + <span><math class="testfont"><mtext mathvariant="script">r</mtext></math>=<span>1D4C7</span></span> + <span><math class="testfont"><mtext mathvariant="script">s</mtext></math>=<span>1D4C8</span></span> + <span><math class="testfont"><mtext mathvariant="script">t</mtext></math>=<span>1D4C9</span></span> + <span><math class="testfont"><mtext mathvariant="script">u</mtext></math>=<span>1D4CA</span></span> + <span><math class="testfont"><mtext mathvariant="script">v</mtext></math>=<span>1D4CB</span></span> + <span><math class="testfont"><mtext mathvariant="script">w</mtext></math>=<span>1D4CC</span></span> + <span><math class="testfont"><mtext mathvariant="script">x</mtext></math>=<span>1D4CD</span></span><br/> + <span><math class="testfont"><mtext mathvariant="script">y</mtext></math>=<span>1D4CE</span></span> + <span><math class="testfont"><mtext mathvariant="script">z</mtext></math>=<span>1D4CF</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched-ref.html index 1450e19..8ad8f7b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,28 +23,28 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𞹾</mtext></math>=<span>1EE7E</span></span> - <span><math><mtext>𞹡</mtext></math>=<span>1EE61</span></span> - <span><math><mtext>𞹵</mtext></math>=<span>1EE75</span></span> - <span><math><mtext>𞹶</mtext></math>=<span>1EE76</span></span> - <span><math><mtext>𞹢</mtext></math>=<span>1EE62</span></span> - <span><math><mtext>𞹧</mtext></math>=<span>1EE67</span></span> - <span><math><mtext>𞹷</mtext></math>=<span>1EE77</span></span> - <span><math><mtext>𞹮</mtext></math>=<span>1EE6E</span></span> - <span><math><mtext>𞹴</mtext></math>=<span>1EE74</span></span> - <span><math><mtext>𞹱</mtext></math>=<span>1EE71</span></span><br/> - <span><math><mtext>𞹹</mtext></math>=<span>1EE79</span></span> - <span><math><mtext>𞹨</mtext></math>=<span>1EE68</span></span> - <span><math><mtext>𞹺</mtext></math>=<span>1EE7A</span></span> - <span><math><mtext>𞹯</mtext></math>=<span>1EE6F</span></span> - <span><math><mtext>𞹻</mtext></math>=<span>1EE7B</span></span> - <span><math><mtext>𞹰</mtext></math>=<span>1EE70</span></span> - <span><math><mtext>𞹲</mtext></math>=<span>1EE72</span></span> - <span><math><mtext>𞹪</mtext></math>=<span>1EE6A</span></span> - <span><math><mtext>𞹬</mtext></math>=<span>1EE6C</span></span> - <span><math><mtext>𞹭</mtext></math>=<span>1EE6D</span></span><br/> - <span><math><mtext>𞹤</mtext></math>=<span>1EE64</span></span> - <span><math><mtext>𞹩</mtext></math>=<span>1EE69</span></span> - <span><math><mtext>𞹼</mtext></math>=<span>1EE7C</span></span> + <span><math class="testfont"><mtext>𞹾</mtext></math>=<span>1EE7E</span></span> + <span><math class="testfont"><mtext>𞹡</mtext></math>=<span>1EE61</span></span> + <span><math class="testfont"><mtext>𞹵</mtext></math>=<span>1EE75</span></span> + <span><math class="testfont"><mtext>𞹶</mtext></math>=<span>1EE76</span></span> + <span><math class="testfont"><mtext>𞹢</mtext></math>=<span>1EE62</span></span> + <span><math class="testfont"><mtext>𞹧</mtext></math>=<span>1EE67</span></span> + <span><math class="testfont"><mtext>𞹷</mtext></math>=<span>1EE77</span></span> + <span><math class="testfont"><mtext>𞹮</mtext></math>=<span>1EE6E</span></span> + <span><math class="testfont"><mtext>𞹴</mtext></math>=<span>1EE74</span></span> + <span><math class="testfont"><mtext>𞹱</mtext></math>=<span>1EE71</span></span><br/> + <span><math class="testfont"><mtext>𞹹</mtext></math>=<span>1EE79</span></span> + <span><math class="testfont"><mtext>𞹨</mtext></math>=<span>1EE68</span></span> + <span><math class="testfont"><mtext>𞹺</mtext></math>=<span>1EE7A</span></span> + <span><math class="testfont"><mtext>𞹯</mtext></math>=<span>1EE6F</span></span> + <span><math class="testfont"><mtext>𞹻</mtext></math>=<span>1EE7B</span></span> + <span><math class="testfont"><mtext>𞹰</mtext></math>=<span>1EE70</span></span> + <span><math class="testfont"><mtext>𞹲</mtext></math>=<span>1EE72</span></span> + <span><math class="testfont"><mtext>𞹪</mtext></math>=<span>1EE6A</span></span> + <span><math class="testfont"><mtext>𞹬</mtext></math>=<span>1EE6C</span></span> + <span><math class="testfont"><mtext>𞹭</mtext></math>=<span>1EE6D</span></span><br/> + <span><math class="testfont"><mtext>𞹤</mtext></math>=<span>1EE64</span></span> + <span><math class="testfont"><mtext>𞹩</mtext></math>=<span>1EE69</span></span> + <span><math class="testfont"><mtext>𞹼</mtext></math>=<span>1EE7C</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html index 8530c688..e2c8286 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-stretched.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,28 +28,28 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="stretched">ڡ</mtext></math>=<span>1EE7E</span></span> - <span><math><mtext mathvariant="stretched">ب</mtext></math>=<span>1EE61</span></span> - <span><math><mtext mathvariant="stretched">ت</mtext></math>=<span>1EE75</span></span> - <span><math><mtext mathvariant="stretched">ث</mtext></math>=<span>1EE76</span></span> - <span><math><mtext mathvariant="stretched">ج</mtext></math>=<span>1EE62</span></span> - <span><math><mtext mathvariant="stretched">ح</mtext></math>=<span>1EE67</span></span> - <span><math><mtext mathvariant="stretched">خ</mtext></math>=<span>1EE77</span></span> - <span><math><mtext mathvariant="stretched">س</mtext></math>=<span>1EE6E</span></span> - <span><math><mtext mathvariant="stretched">ش</mtext></math>=<span>1EE74</span></span> - <span><math><mtext mathvariant="stretched">ص</mtext></math>=<span>1EE71</span></span><br/> - <span><math><mtext mathvariant="stretched">ض</mtext></math>=<span>1EE79</span></span> - <span><math><mtext mathvariant="stretched">ط</mtext></math>=<span>1EE68</span></span> - <span><math><mtext mathvariant="stretched">ظ</mtext></math>=<span>1EE7A</span></span> - <span><math><mtext mathvariant="stretched">ع</mtext></math>=<span>1EE6F</span></span> - <span><math><mtext mathvariant="stretched">غ</mtext></math>=<span>1EE7B</span></span> - <span><math><mtext mathvariant="stretched">ف</mtext></math>=<span>1EE70</span></span> - <span><math><mtext mathvariant="stretched">ق</mtext></math>=<span>1EE72</span></span> - <span><math><mtext mathvariant="stretched">ك</mtext></math>=<span>1EE6A</span></span> - <span><math><mtext mathvariant="stretched">م</mtext></math>=<span>1EE6C</span></span> - <span><math><mtext mathvariant="stretched">ن</mtext></math>=<span>1EE6D</span></span><br/> - <span><math><mtext mathvariant="stretched">ه</mtext></math>=<span>1EE64</span></span> - <span><math><mtext mathvariant="stretched">ي</mtext></math>=<span>1EE69</span></span> - <span><math><mtext mathvariant="stretched">ٮ</mtext></math>=<span>1EE7C</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ڡ</mtext></math>=<span>1EE7E</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ب</mtext></math>=<span>1EE61</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ت</mtext></math>=<span>1EE75</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ث</mtext></math>=<span>1EE76</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ج</mtext></math>=<span>1EE62</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ح</mtext></math>=<span>1EE67</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">خ</mtext></math>=<span>1EE77</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">س</mtext></math>=<span>1EE6E</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ش</mtext></math>=<span>1EE74</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ص</mtext></math>=<span>1EE71</span></span><br/> + <span><math class="testfont"><mtext mathvariant="stretched">ض</mtext></math>=<span>1EE79</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ط</mtext></math>=<span>1EE68</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ظ</mtext></math>=<span>1EE7A</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ع</mtext></math>=<span>1EE6F</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">غ</mtext></math>=<span>1EE7B</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ف</mtext></math>=<span>1EE70</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ق</mtext></math>=<span>1EE72</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ك</mtext></math>=<span>1EE6A</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">م</mtext></math>=<span>1EE6C</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ن</mtext></math>=<span>1EE6D</span></span><br/> + <span><math class="testfont"><mtext mathvariant="stretched">ه</mtext></math>=<span>1EE64</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ي</mtext></math>=<span>1EE69</span></span> + <span><math class="testfont"><mtext mathvariant="stretched">ٮ</mtext></math>=<span>1EE7C</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed-ref.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed-ref.html index b8e6160fe..5273a28 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed-ref.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed-ref.html
@@ -15,7 +15,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -23,20 +23,20 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext>𞹒</mtext></math>=<span>1EE52</span></span> - <span><math><mtext>𞹋</mtext></math>=<span>1EE4B</span></span> - <span><math><mtext>𞹍</mtext></math>=<span>1EE4D</span></span> - <span><math><mtext>𞹉</mtext></math>=<span>1EE49</span></span> - <span><math><mtext>𞹂</mtext></math>=<span>1EE42</span></span> - <span><math><mtext>𞹇</mtext></math>=<span>1EE47</span></span> - <span><math><mtext>𞹗</mtext></math>=<span>1EE57</span></span> - <span><math><mtext>𞹟</mtext></math>=<span>1EE5F</span></span> - <span><math><mtext>𞹎</mtext></math>=<span>1EE4E</span></span> - <span><math><mtext>𞹔</mtext></math>=<span>1EE54</span></span><br/> - <span><math><mtext>𞹑</mtext></math>=<span>1EE51</span></span> - <span><math><mtext>𞹙</mtext></math>=<span>1EE59</span></span> - <span><math><mtext>𞹏</mtext></math>=<span>1EE4F</span></span> - <span><math><mtext>𞹛</mtext></math>=<span>1EE5B</span></span> - <span><math><mtext>𞹝</mtext></math>=<span>1EE5D</span></span> + <span><math class="testfont"><mtext>𞹒</mtext></math>=<span>1EE52</span></span> + <span><math class="testfont"><mtext>𞹋</mtext></math>=<span>1EE4B</span></span> + <span><math class="testfont"><mtext>𞹍</mtext></math>=<span>1EE4D</span></span> + <span><math class="testfont"><mtext>𞹉</mtext></math>=<span>1EE49</span></span> + <span><math class="testfont"><mtext>𞹂</mtext></math>=<span>1EE42</span></span> + <span><math class="testfont"><mtext>𞹇</mtext></math>=<span>1EE47</span></span> + <span><math class="testfont"><mtext>𞹗</mtext></math>=<span>1EE57</span></span> + <span><math class="testfont"><mtext>𞹟</mtext></math>=<span>1EE5F</span></span> + <span><math class="testfont"><mtext>𞹎</mtext></math>=<span>1EE4E</span></span> + <span><math class="testfont"><mtext>𞹔</mtext></math>=<span>1EE54</span></span><br/> + <span><math class="testfont"><mtext>𞹑</mtext></math>=<span>1EE51</span></span> + <span><math class="testfont"><mtext>𞹙</mtext></math>=<span>1EE59</span></span> + <span><math class="testfont"><mtext>𞹏</mtext></math>=<span>1EE4F</span></span> + <span><math class="testfont"><mtext>𞹛</mtext></math>=<span>1EE5B</span></span> + <span><math class="testfont"><mtext>𞹝</mtext></math>=<span>1EE5D</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html index 823438e..fa8bea41 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/mathvariant-tailed.html
@@ -20,7 +20,7 @@ font-family: monospace; font-size: 10px; } - math { + .testfont { font-family: TestFont; font-size: 10px; } @@ -28,20 +28,20 @@ <body> <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. --> <p>Test passes if all the equalities below are true.</p> - <span><math><mtext mathvariant="tailed">ق</mtext></math>=<span>1EE52</span></span> - <span><math><mtext mathvariant="tailed">ل</mtext></math>=<span>1EE4B</span></span> - <span><math><mtext mathvariant="tailed">ن</mtext></math>=<span>1EE4D</span></span> - <span><math><mtext mathvariant="tailed">ي</mtext></math>=<span>1EE49</span></span> - <span><math><mtext mathvariant="tailed">ج</mtext></math>=<span>1EE42</span></span> - <span><math><mtext mathvariant="tailed">ح</mtext></math>=<span>1EE47</span></span> - <span><math><mtext mathvariant="tailed">خ</mtext></math>=<span>1EE57</span></span> - <span><math><mtext mathvariant="tailed">ٯ</mtext></math>=<span>1EE5F</span></span> - <span><math><mtext mathvariant="tailed">س</mtext></math>=<span>1EE4E</span></span> - <span><math><mtext mathvariant="tailed">ش</mtext></math>=<span>1EE54</span></span><br/> - <span><math><mtext mathvariant="tailed">ص</mtext></math>=<span>1EE51</span></span> - <span><math><mtext mathvariant="tailed">ض</mtext></math>=<span>1EE59</span></span> - <span><math><mtext mathvariant="tailed">ع</mtext></math>=<span>1EE4F</span></span> - <span><math><mtext mathvariant="tailed">غ</mtext></math>=<span>1EE5B</span></span> - <span><math><mtext mathvariant="tailed">ں</mtext></math>=<span>1EE5D</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ق</mtext></math>=<span>1EE52</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ل</mtext></math>=<span>1EE4B</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ن</mtext></math>=<span>1EE4D</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ي</mtext></math>=<span>1EE49</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ج</mtext></math>=<span>1EE42</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ح</mtext></math>=<span>1EE47</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">خ</mtext></math>=<span>1EE57</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ٯ</mtext></math>=<span>1EE5F</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">س</mtext></math>=<span>1EE4E</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ش</mtext></math>=<span>1EE54</span></span><br/> + <span><math class="testfont"><mtext mathvariant="tailed">ص</mtext></math>=<span>1EE51</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ض</mtext></math>=<span>1EE59</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ع</mtext></math>=<span>1EE4F</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">غ</mtext></math>=<span>1EE5B</span></span> + <span><math class="testfont"><mtext mathvariant="tailed">ں</mtext></math>=<span>1EE5D</span></span> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py b/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py index 51c7c18..cb86339 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/mathvariant-transforms.py
@@ -57,6 +57,10 @@ # There is no "isolated" mathvariant. del mathvariantTransforms["isolated"] +# Automatic mathvariant uses the same transform as italic. +# It is handled specially (see below). +mathvariantTransforms["auto"] = mathvariantTransforms["italic"] + # Create a WOFF font for each mathvariant. for mathvariant in mathvariantTransforms: font = mathfont.create("mathvariant-%s" % mathvariant) @@ -67,31 +71,49 @@ mathfont.createGlyphFromValue(font, transformedChar) mathfont.save(font) -# Create a test font for each mathvariant. +# Create a MathML and CSS test for each mathvariant. for mathvariant in mathvariantTransforms: - print("Generating test for %s..." % mathvariant, end="") + print("Generating tests for %s..." % mathvariant, end="") reftest = open("../relations/css-styling/mathvariant-%s.html" % mathvariant, "w") reftestReference = open("../relations/css-styling/mathvariant-%s-ref.html" % mathvariant, "w") + CSSreftest = open("../../css/css-text/text-transform/math/text-transform-math-%s-001.tentative.html" % mathvariant, "w") + CSSreftestReference = open("../../css/css-text/text-transform/math/text-transform-math-%s-001.tentative-ref.html" % mathvariant, "w") source = '\ <!DOCTYPE html>\n\ <html>\n\ <head>\n\ <meta charset="utf-8"/>\n\ -<title>mathvariant %s</title>\n' - reftest.write(source % mathvariant) - reftestReference.write(source % ("%s (reference)" % mathvariant)) +<title>%s</title>\n' + reftest.write(source % ("mathvariant %s" % mathvariant)) + reftestReference.write(source % ("mathvariant %s (reference)" % mathvariant)) + CSSreftest.write(source % ("text-transform math-%s" % mathvariant)) + CSSreftestReference.write(source % ("text-transform math-%s (reference)" % mathvariant)) + if mathvariant == "auto": + mathAssert = "Verify that a single-char <mi> is equivalent to an <mi> with the transformed italic unicode character." + else: + mathAssert = "Verify that a single-char <mtext> with a %s mathvariant is equivalent to an <mtext> with the transformed unicode character." % mathvariant source ='\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">\n\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute">\n\ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values">\n\ <link rel="match" href="mathvariant-%s-ref.html"/>\n\ -<meta name="assert" content="Verify that a single-char <mtext> with a %s mathvariant is equivalent to an <mtext> with the transformed unicode character.">\n' - reftest.write(source % (mathvariant, mathvariant)) +<meta name="assert" content="%s">\n' + reftest.write(source % (mathvariant, mathAssert)) + source = '\ +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3745"/>\n\ +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#new-text-transform-values">\n\ +<link rel="match" href="text-transform-math-%s-001.tentative-ref.html"/>\n\ +<meta name="assert" content="Verify that a character with \'text-transform: math-%s\' renders the same as the transformed unicode character.">\n' + CSSreftest.write(source % (mathvariant, mathvariant)) + if mathvariant == "auto": + WOFFfont = "mathvariant-italic.woff" + else: + WOFFfont = "mathvariant-%s.woff" % mathvariant source = '\ <style>\n\ @font-face {\n\ font-family: TestFont;\n\ - src: url("/fonts/math/mathvariant-%s.woff");\n\ + src: url("/fonts/math/%s");\n\ }\n\ body > span {\n\ padding: 10px;\n\ @@ -100,30 +122,48 @@ font-family: monospace;\n\ font-size: 10px;\n\ }\n\ - math {\n\ + .testfont {\n\ font-family: TestFont;\n\ font-size: 10px;\n\ }\n\ </style>\n\ <body>\n\ <!-- Generated by mathml/tools/mathvariant.py; DO NOT EDIT. -->\n\ - <p>Test passes if all the equalities below are true.</p>\n' % mathvariant + <p>Test passes if all the equalities below are true.</p>\n' % WOFFfont reftest.write(source) reftestReference.write(source) + CSSreftest.write(source) + CSSreftestReference.write(source) charIndex = 0 for baseChar in mathvariantTransforms[mathvariant]: transformedChar = mathvariantTransforms[mathvariant][baseChar] - reftest.write(' <span><math><mtext mathvariant="%s">&#x%0X;</mtext></math>=<span>%05X</span></span>' % (mathvariant, baseChar, transformedChar)) - reftestReference.write(' <span><math><mtext>&#x%0X;</mtext></math>=<span>%05X</span></span>' % (transformedChar, transformedChar)) + if mathvariant == "auto": + tokenTag = '<mi>&#x%0X;</mi>' % baseChar + tokenTagRef = '<mi>&#x%0X;</mi>' % transformedChar + else: + tokenTag = '<mtext mathvariant="%s">&#x%0X;</mtext>' % (mathvariant, baseChar) + tokenTagRef = '<mtext>&#x%0X;</mtext>' % transformedChar + reftest.write(' <span><math class="testfont">%s</math>=<span>%05X</span></span>' % (tokenTag, transformedChar)) + reftestReference.write(' <span><math class="testfont">%s</math>=<span>%05X</span></span>' % (tokenTagRef, transformedChar)) + CSSreftest.write(' <span><span class="testfont" style="text-transform: math-%s">&#x%0X;</span>=<span>%05X</span></span>' % (mathvariant, baseChar, transformedChar)) + CSSreftestReference.write(' <span><span class="testfont">&#x%0X;</span>=<span>%05X</span></span>' % (transformedChar, transformedChar)) charIndex += 1 if charIndex % 10 == 0: reftest.write('<br/>') reftestReference.write('<br/>') + CSSreftest.write('<br/>') + CSSreftestReference.write('<br/>') reftest.write('\n') reftestReference.write('\n') + CSSreftest.write('\n') + CSSreftestReference.write('\n') source = '</body>\n</html>\n' reftest.write(source) reftestReference.write(source) + CSSreftest.write(source) + CSSreftestReference.write(source) reftest.close() reftestReference.close() + CSSreftest.close() + CSSreftestReference.close() print(" done.")
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_mouse_pointercapture_in_frame.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_mouse_pointercapture_in_frame.html deleted file mode 100644 index 83b4c1b..0000000 --- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_mouse_pointercapture_in_frame.html +++ /dev/null
@@ -1,143 +0,0 @@ -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<script src="/resources/testdriver-actions.js"></script> -<style> -iframe { - width: 300px; - height: 300px; - top: 100px; - left: 100px; - border: 0; - position: absolute; - background: green; -} -#outerFrame { - width: 500px; - height: 500px; - background: blue; -} -</style> -<body id="outerFrame body" onload="run()"> -<div id='outerFrame'> -<iframe id='innerFrameElement' src="resources/pointerevent_mouse_pointercapture-iframe.html"></iframe> -</div> -</body> -<script> -var receivedEventList = []; -function handleEvent(event) { - receivedEventList.push(event.target.id + ' received ' + event.type); - - if (event.type == 'pointerdown') { - if (document.setPointerCaptureOnPointerDown) { - event.target.setPointerCapture(event.pointerId); - } - } - - if (event.type == "pointermove") { - if (document.releasePointerCaptureOnFirstMove && event.target.hasPointerCapture(event.pointerId)) - event.target.releasePointerCapture(event.pointerId); - } -}; - -document.testEventList = ['pointerup', 'pointerdown', 'pointermove', 'gotpointercapture', 'lostpointercapture']; -document.testEventList.forEach(function(eventName) { - document.getElementById('outerFrame').addEventListener(eventName, handleEvent); -}); - -document.setPointerCaptureOnPointerDown = false; -document.releasePointerCaptureOnFirstMove = false; - -function run() { - promise_test (async() => { - document.setPointerCaptureOnPointerDown = true; - receivedEventList = []; - expectedEventList = ["innerFrame received pointermove", - "innerFrame received pointerdown", - "innerFrame received gotpointercapture", - "innerFrame received pointermove", - "innerFrame received pointermove", - "innerFrame received pointerup", - "innerFrame received lostpointercapture"]; - await new test_driver.Actions() - .pointerMove(200, 200) - .pointerDown() - .pointerMove(150, 150) - .pointerMove(50, 50) - .pointerUp() - .send(); - assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); - document.setPointerCaptureOnPointerDown = false; - }, "Test pointer capture event route across the same-origin frame: Mouse down at inner frame and set pointer capture."); - - - promise_test (async() => { - document.setPointerCaptureOnPointerDown = true; - receivedEventList = []; - expectedEventList = ["outerFrame received pointermove", - "outerFrame received pointerdown", - "outerFrame received gotpointercapture", - "outerFrame received pointermove", - "outerFrame received pointerup", - "outerFrame received lostpointercapture"]; - await new test_driver.Actions() - .pointerMove(25, 25) - .pointerDown() - .pointerMove(200, 200) - .pointerUp() - .send(); - assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); - document.setPointerCaptureOnPointerDown = false; - }, "Test pointer capture event route across the same-origin frame: Mouse down at outer frame body and set pointer capture."); - - - promise_test (async() => { - document.setPointerCaptureOnPointerDown = true; - document.releasePointerCaptureOnFirstMove = true; - receivedEventList = []; - expectedEventList = ["innerFrame received pointermove", - "innerFrame received pointerdown", - "innerFrame received gotpointercapture", - "innerFrame received pointermove", - "innerFrame received lostpointercapture", - "innerFrameDocument received pointermove", - "innerFrameDocument received pointerup",]; - await new test_driver.Actions() - .pointerMove(200, 200) - .pointerDown() - .pointerMove(150, 150) - .pointerMove(50, 50) - .pointerUp() - .send(); - assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); - document.releasePointerCaptureOnFirstMove = false; - document.setPointerCaptureOnPointerDown = false; - }, "Test pointer capture event route across the same-origin frame: Mouse down with set capture at inner frame, then release on next mouse move."); - - - promise_test (async() => { - document.setPointerCaptureOnPointerDown = true; - document.releasePointerCaptureOnFirstMove = true; - receivedEventList = []; - expectedEventList = ["outerFrame received pointermove", - "outerFrame received pointerdown", - "outerFrame received gotpointercapture", - "outerFrame received pointermove", - "outerFrame received lostpointercapture", - "innerFrame received pointermove", - "innerFrame received pointerup"]; - await new test_driver.Actions() - .pointerMove(50, 50) - .pointerDown() - .pointerMove(200, 200) - .pointerMove(250, 250) - .pointerUp() - .send(); - assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); - document.releasePointerCaptureOnFirstMove = false; - document.setPointerCaptureOnPointerDown = false; - }, "Test pointercapture event route across the same-origin frame: Mouse down with set capture at outer frame, then release on next mouse move."); -} -</script> -
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture_in_frame-expected.txt b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture_in_frame-expected.txt new file mode 100644 index 0000000..094b226 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture_in_frame-expected.txt
@@ -0,0 +1,15 @@ +This is a testharness.js-based test. +PASS Test mousepointer capture in same-origin frame: Pointer down at inner frame and set pointer capture. +PASS Test mousepointer capture in same-origin frame: Pointer down at outer frame body and set pointer capture. +PASS Test mousepointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove. +PASS Test mousepointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove. +PASS Test touchpointer capture in same-origin frame: Pointer down at inner frame and set pointer capture. +PASS Test touchpointer capture in same-origin frame: Pointer down at outer frame body and set pointer capture. +PASS Test touchpointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove. +PASS Test touchpointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove. +PASS Test penpointer capture in same-origin frame: Pointer down at inner frame and set pointer capture. +FAIL Test penpointer capture in same-origin frame: Pointer down at outer frame body and set pointer capture. assert_array_equals: Received events: outerFrame received pointerdown,outerFrame received gotpointercapture,outerFrame received pointermove,innerFrame received pointerup lengths differ, expected 5 got 4 +PASS Test penpointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove. +PASS Test penpointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove. +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html new file mode 100644 index 0000000..a4107fd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html
@@ -0,0 +1,160 @@ +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script type="text/javascript" src="pointerevent_support.js"></script> +<style> +iframe { + width: 300px; + height: 300px; + top: 100px; + left: 100px; + border: 0; + position: absolute; + background: green; +} +#outerFrame { + width: 500px; + height: 500px; + background: blue; +} +body { + touch-action:none; +} +</style> +<body id="outerFrame body" onload="run()"> +<div id='outerFrame'> +<iframe id='innerFrameElement' src="resources/pointerevent_pointercapture-iframe.html"></iframe> +</div> +</body> +<script> +var receivedEventList = []; +var start_logging = false; +function handleEvent(event) { + if (event.type == 'pointerdown') { + start_logging = true; + if (document.setPointerCaptureOnPointerDown) { + event.target.setPointerCapture(event.pointerId); + } + } + + if (event.type == "pointermove") { + if (document.releasePointerCaptureOnFirstMove && event.target.hasPointerCapture(event.pointerId)) + event.target.releasePointerCapture(event.pointerId); + } + if (start_logging) + receivedEventList.push(event.target.id + ' received ' + event.type); +}; + +document.testEventList = ['pointerup', 'pointerdown', 'pointermove', 'gotpointercapture', 'lostpointercapture']; +document.testEventList.forEach(function(eventName) { + document.getElementById('outerFrame').addEventListener(eventName, handleEvent); +}); + +function Reset() { + document.setPointerCaptureOnPointerDown = false; + document.releasePointerCaptureOnFirstMove = false; + receivedEventList = []; + start_logging = false; +} + +function run() { + ALL_POINTERS.forEach(function(pointerType) { + promise_test (async() => { + Reset(); + document.setPointerCaptureOnPointerDown = true; + expectedEventList = ["innerFrame received pointerdown", + "innerFrame received gotpointercapture", + "innerFrame received pointermove", + "innerFrame received pointermove", + "innerFrame received pointerup", + "innerFrame received lostpointercapture"]; + var pointerId = pointerType + "Pointer1"; + await new test_driver.Actions() + .addPointer(pointerId, pointerType) + .pointerMove(200, 200) + .pointerDown() + .pointerMove(150, 150) + .pointerMove(50, 50) + .pointerUp() + .send(); + assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); + document.setPointerCaptureOnPointerDown = false; + }, "Test " + pointerType + "pointer capture in same-origin frame: Pointer down at inner frame and set pointer capture."); + + promise_test (async() => { + Reset(); + document.setPointerCaptureOnPointerDown = true; + expectedEventList = ["outerFrame received pointerdown", + "outerFrame received gotpointercapture", + "outerFrame received pointermove", + "outerFrame received pointerup", + "outerFrame received lostpointercapture"]; + var pointerId = pointerType + "Pointer1"; + await new test_driver.Actions() + .addPointer(pointerId, pointerType) + .pointerMove(25, 25) + .pointerDown() + .pointerMove(200, 200) + .pointerUp() + .send(); + assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); + document.setPointerCaptureOnPointerDown = false; + }, "Test " + pointerType + "pointer capture in same-origin frame: Pointer down at outer frame body and set pointer capture."); + + + promise_test (async() => { + Reset(); + document.setPointerCaptureOnPointerDown = true; + document.releasePointerCaptureOnFirstMove = true; + // Mouse event has the frame capture, so after pointer capture released, events are + // dispatched to innerFrameDocument. + expectedEventList = ["innerFrame received pointerdown", + "innerFrame received gotpointercapture", + "innerFrame received pointermove", + "innerFrame received lostpointercapture", + (pointerType == "touch" ? "outerFrame": "innerFrameDocument") + " received pointermove", + (pointerType == "touch" ? "outerFrame": "innerFrameDocument") + " received pointerup",]; + var pointerId = pointerType + "Pointer1"; + await new test_driver.Actions() + .addPointer(pointerId, pointerType) + .pointerMove(200, 200) + .pointerDown() + .pointerMove(150, 150) + .pointerMove(50, 50) + .pointerUp() + .send(); + assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); + document.releasePointerCaptureOnFirstMove = false; + document.setPointerCaptureOnPointerDown = false; + }, "Test " + pointerType + "pointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove."); + + + promise_test (async() => { + Reset(); + document.setPointerCaptureOnPointerDown = true; + document.releasePointerCaptureOnFirstMove = true; + expectedEventList = ["outerFrame received pointerdown", + "outerFrame received gotpointercapture", + "outerFrame received pointermove", + "outerFrame received lostpointercapture", + "innerFrame received pointermove", + "innerFrame received pointerup"]; + var pointerId = pointerType + "Pointer1"; + await new test_driver.Actions() + .addPointer(pointerId, pointerType) + .pointerMove(50, 50) + .pointerDown() + .pointerMove(200, 200) + .pointerMove(250, 250) + .pointerUp() + .send(); + assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList); + document.releasePointerCaptureOnFirstMove = false; + document.setPointerCaptureOnPointerDown = false; + }, "Test " + pointerType + "pointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove."); + }); +} +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html b/third_party/blink/web_tests/external/wpt/pointerevents/resources/pointerevent_pointercapture-iframe.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html rename to third_party/blink/web_tests/external/wpt/pointerevents/resources/pointerevent_pointercapture-iframe.html index 817c612..10075662 100644 --- a/third_party/blink/web_tests/external/wpt/pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html +++ b/third_party/blink/web_tests/external/wpt/pointerevents/resources/pointerevent_pointercapture-iframe.html
@@ -1,4 +1,9 @@ <html id='innerFrameDocument'> +<style> +body { + touch-action:none; +} +</style> <body id='innerFrame' style='height:500px; width: 500px; padding: 0; margin: 0;'> <script> top.document.testEventList.forEach(function(eventName) { @@ -6,4 +11,4 @@ }); </script> </body> -</html> \ No newline at end of file +</html>
diff --git a/third_party/blink/web_tests/external/wpt/wake-lock/wakelock-type.https-expected.txt b/third_party/blink/web_tests/external/wpt/wake-lock/wakelock-type.https-expected.txt deleted file mode 100644 index 409d107a..0000000 --- a/third_party/blink/web_tests/external/wpt/wake-lock/wakelock-type.https-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -FAIL Test that wakeLock.type is 'screen' when screen wake lock is invoked Illegal constructor -FAIL Test that wakeLock.type is 'system' when system wake lock is invoked Illegal constructor -PASS 'TypeError' is thrown when set an empty wake lock type -PASS 'TypeError' is thrown when set an invalid wake lock type -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-expected.html b/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-expected.html deleted file mode 100644 index 09c518e..0000000 --- a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-expected.html +++ /dev/null
@@ -1,4 +0,0 @@ -<!DOCTYPE html> -<!-- This expectation is wrong because of crbug.com/562418. - The inner span should have style="color: green". --> -<p style="color: red">Red <span>This text should be green.</span> Red</p>
diff --git a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-inherited-expected.html b/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-inherited-expected.html deleted file mode 100644 index 09c518e..0000000 --- a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-inherited-expected.html +++ /dev/null
@@ -1,4 +0,0 @@ -<!DOCTYPE html> -<!-- This expectation is wrong because of crbug.com/562418. - The inner span should have style="color: green". --> -<p style="color: red">Red <span>This text should be green.</span> Red</p>
diff --git a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-inherited.html b/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-inherited.html deleted file mode 100644 index e902e79..0000000 --- a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color-inherited.html +++ /dev/null
@@ -1,17 +0,0 @@ -<!DOCTYPE html> -<style> - #block { color: green; } - #block::first-line { color: red; } - .green { color: green; } -</style> -<div id="block"> - <div> - <p>Red <span id="t"><span>This text should be green.<span></span> Red</p> - </div> -</div> -<script src="../../../resources/run-after-layout-and-paint.js"></script> -<script> -runAfterLayoutAndPaint(function() { - document.getElementById('t').className = 'green'; -}, true); -</script>
diff --git a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color.html b/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color.html deleted file mode 100644 index eeab74e0..0000000 --- a/third_party/blink/web_tests/fast/css/invalidation/first-line-change-inline-color.html +++ /dev/null
@@ -1,17 +0,0 @@ -<!DOCTYPE html> -<style> - #block { color: green; } - #block::first-line { color: red; } - .green { color: green; } -</style> -<div id="block"> - <div> - <p>Red <span id="t">This text should be green.</span> Red</p> - </div> -</div> -<script src="../../../resources/run-after-layout-and-paint.js"></script> -<script> -runAfterLayoutAndPaint(function() { - document.getElementById('t').className = 'green'; -}, true); -</script>
diff --git a/third_party/blink/web_tests/fast/events/pointerevents/pointerevent_mouse_pointercapture_inactivate_pointer.html b/third_party/blink/web_tests/fast/events/pointerevents/pointerevent_mouse_pointercapture_inactivate_pointer.html index b50c96d..7b61b60 100644 --- a/third_party/blink/web_tests/fast/events/pointerevents/pointerevent_mouse_pointercapture_inactivate_pointer.html +++ b/third_party/blink/web_tests/fast/events/pointerevents/pointerevent_mouse_pointercapture_inactivate_pointer.html
@@ -9,7 +9,7 @@ width: 300px; height: 300px; top: 100px; - left: 50px; + left: 100px; border: 0; position: absolute; background: green; @@ -22,34 +22,55 @@ </style> <body onload="run()"> <div id='outerFrame'> - <iframe id='innerFrameElement' src="resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html"></iframe> + <iframe id='iframe' src="resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html"></iframe> </div> </body> <script type="text/javascript"> - var test_pointerEvent = async_test("setPointerCapture: outer frame capture pointer active in inner frame"); + function run() { + capture_count = 0; document.addEventListener("gotpointercapture", function(){ - test_pointerEvent.step(function() { - assert_unreached("It should not be possible to capture mouse pointer when it's activate in inner frame"); - }); + capture_count ++; }) - function captureMousePointer(event) { + iframe.contentDocument.addEventListener("gotpointercapture", function(){ + capture_count ++; + }) + + document.addEventListener("pointerdown", function(event){ + // Outer frame got pointer down, set capture to inner frame. + iframe.contentDocument.getElementById("target").setPointerCapture(event.pointerId); + }); + + + iframe.contentDocument.addEventListener("pointerdown", function(event){ + // Inner frame got pointer down, set capture to outer frame. outerFrame.setPointerCapture(event.pointerId); - } + }); - function finishTest() { - test_pointerEvent.done(); - } - function run() { - new test_driver.Actions() - .pointerMove(200, 200) + promise_test(async() => { + await injectEvent(50, 50); + assert_equals(capture_count, 0, "Inner frame can not capture when pointer is activate in outer frame") + }, "setPointerCapture: pointer active in outer frame, set capture to inner frame"); + + + promise_test(async() => { + await injectEvent(250, 250); + assert_equals(capture_count, 0, "Outer frame can not capture when pointer is activate in inner frame") + }, "setPointerCapture: pointer active in inner frame, set capture to outer frame"); + + + + function injectEvent(x, y) { + return new test_driver.Actions() + .pointerMove(x, y) .pointerDown() - .pointerMove(250, 250) + .pointerMove(x, y) .pointerUp() .send(); } +} </script> </html>
diff --git a/third_party/blink/web_tests/fast/events/pointerevents/resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html b/third_party/blink/web_tests/fast/events/pointerevents/resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html index d4b4af1..3c88328b 100644 --- a/third_party/blink/web_tests/fast/events/pointerevents/resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html +++ b/third_party/blink/web_tests/fast/events/pointerevents/resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html
@@ -1,10 +1,3 @@ <body id='innerFrame' style='height:500px; width: 500px; padding: 0; margin: 0;'> - <script> - document.addEventListener('pointerdown', function(event) { - top.captureMousePointer(event); - }); - document.addEventListener('pointerup', function(event) { - top.finishTest(); - }); - </script> + <div id = 'target'></div> </body>
diff --git a/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transform.html b/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transform.html index d5720742..844a0eb 100644 --- a/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transform.html +++ b/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transform.html
@@ -36,7 +36,7 @@ document.body.offsetTop; // Force layout. The mouse is not tracked before first layout. var transformed = document.getElementById("transformed"); transformed.parentNode.setAttribute("id", "overflowHidden"); - eventSender.mouseMoveTo(transformed.offsetLeft + 10, transformed.offsetTop + 10); + eventSender.mouseMoveTo(transformed.offsetLeft + 50, transformed.offsetTop + 50); document.body.offsetTop; // Update layout for hovered state. </script> </body>
diff --git a/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transition.html b/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transition.html index c398afc..15a25f2 100644 --- a/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transition.html +++ b/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-added-after-transition.html
@@ -40,8 +40,8 @@ document.body.offsetTop; // Force layout. The mouse is not tracked before first layout. var transformed = document.getElementsByClassName("transformed"); - eventSender.mouseMoveTo(transformed[0].offsetLeft + 10, transformed[0].offsetTop + 10); - eventSender.mouseMoveTo(transformed[1].offsetLeft + 10, transformed[1].offsetTop + 10); + eventSender.mouseMoveTo(transformed[0].offsetLeft + 50, transformed[0].offsetTop + 50); + eventSender.mouseMoveTo(transformed[1].offsetLeft + 50, transformed[1].offsetTop + 50); document.body.offsetTop; // Update layout for hovered state. </script> </body>
diff --git a/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html b/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html index ec6a1df..30c2269 100644 --- a/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html +++ b/third_party/blink/web_tests/fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html
@@ -35,7 +35,7 @@ document.body.offsetTop; // Force layout. The mouse is not tracked before first layout. var transformed = document.getElementById("transformed"); - eventSender.mouseMoveTo(transformed.offsetLeft + 10, transformed.offsetTop + 10); + eventSender.mouseMoveTo(transformed.offsetLeft + 50, transformed.offsetTop + 50); document.body.offsetTop; // Update layout for hovered state. </script> </body>
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt deleted file mode 100644 index abd8db5..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ /dev/null
@@ -1,129 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='outer'", - "position": [8, 8], - "bounds": [404, 404] - }, - { - "name": "Scrolling Layer", - "position": [10, 10], - "bounds": [400, 400], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "position": [10, 10], - "bounds": [400, 704], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='inner'", - "position": [10, 510], - "bounds": [204, 204], - "transform": 1 - }, - { - "name": "Scrolling Layer", - "position": [12, 512], - "bounds": [200, 200], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Scrolling Contents Layer", - "position": [12, 512], - "bounds": [5000, 9000], - "transform": 1 - }, - { - "name": "Squashing Containment Layer", - "position": [10, 10], - "drawsContent": false, - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='grey'", - "position": [12, 512], - "bounds": [100, 800], - "contentsOpaque": true, - "backgroundColor": "#808080", - "transform": 1 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')", - "position": [12, 2512], - "bounds": [5000, 1000], - "transform": 1 - }, - { - "name": "Overflow Controls Host Layer", - "position": [12, 512], - "bounds": [204, 204], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [14, 707], - "bounds": [193, 7], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Vertical Scrollbar Layer", - "position": [207, 514], - "bounds": [7, 193], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Scroll Corner Layer", - "position": [207, 707], - "bounds": [7, 7], - "transform": 1 - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 8], - "bounds": [404, 404], - "drawsContent": false - }, - { - "name": "Vertical Scrollbar Layer", - "position": [403, 10], - "bounds": [7, 400], - "drawsContent": false - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ], - "flattenInheritedTransform": false - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt deleted file mode 100644 index 7e910706..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt +++ /dev/null
@@ -1,67 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer'", - "bounds": [352, 294] - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [79, 79], - "bounds": [196, 212], - "contentsOpaque": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer' (foreground) Layer", - "bounds": [352, 294] - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [32, 32], - "bounds": [290, 230], - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [67, 67], - "bounds": [220, 160], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "position": [67, 67], - "bounds": [220, 236], - "backgroundColor": "#FFFFFF" - }, - { - "name": "Overflow Controls Host Layer", - "position": [62, 62], - "bounds": [230, 170], - "drawsContent": false - }, - { - "name": "Vertical Scrollbar Layer", - "position": [280, 67], - "bounds": [7, 160], - "drawsContent": false - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/disable-blink-gen-property-trees/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/disable-blink-gen-property-trees/compositing/scrollbars/nested-overlay-scrollbars-expected.txt deleted file mode 100644 index abd8db5..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/disable-blink-gen-property-trees/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ /dev/null
@@ -1,129 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='outer'", - "position": [8, 8], - "bounds": [404, 404] - }, - { - "name": "Scrolling Layer", - "position": [10, 10], - "bounds": [400, 400], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "position": [10, 10], - "bounds": [400, 704], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='inner'", - "position": [10, 510], - "bounds": [204, 204], - "transform": 1 - }, - { - "name": "Scrolling Layer", - "position": [12, 512], - "bounds": [200, 200], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Scrolling Contents Layer", - "position": [12, 512], - "bounds": [5000, 9000], - "transform": 1 - }, - { - "name": "Squashing Containment Layer", - "position": [10, 10], - "drawsContent": false, - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='grey'", - "position": [12, 512], - "bounds": [100, 800], - "contentsOpaque": true, - "backgroundColor": "#808080", - "transform": 1 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')", - "position": [12, 2512], - "bounds": [5000, 1000], - "transform": 1 - }, - { - "name": "Overflow Controls Host Layer", - "position": [12, 512], - "bounds": [204, 204], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [14, 707], - "bounds": [193, 7], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Vertical Scrollbar Layer", - "position": [207, 514], - "bounds": [7, 193], - "drawsContent": false, - "transform": 1 - }, - { - "name": "Scroll Corner Layer", - "position": [207, 707], - "bounds": [7, 7], - "transform": 1 - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 8], - "bounds": [404, 404], - "drawsContent": false - }, - { - "name": "Vertical Scrollbar Layer", - "position": [403, 10], - "bounds": [7, 400], - "drawsContent": false - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ], - "flattenInheritedTransform": false - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/scrollbars/nested-overlay-scrollbars-expected.txt deleted file mode 100644 index 1fa1391d..0000000 --- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling background of LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='grey'", - "position": [2, 2], - "bounds": [100, 800], - "contentsOpaque": true, - "backgroundColor": "#808080", - "transform": 3 - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='inner'", - "position": [2, 2], - "bounds": [200, 200], - "transform": 3 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/http/tests/input/discard-events-to-unstable-iframe.html b/third_party/blink/web_tests/http/tests/input/discard-events-to-unstable-iframe.html index 015a2043..b8f5146 100644 --- a/third_party/blink/web_tests/http/tests/input/discard-events-to-unstable-iframe.html +++ b/third_party/blink/web_tests/http/tests/input/discard-events-to-unstable-iframe.html
@@ -24,11 +24,11 @@ let iframe = document.getElementById("iframe"); let expectedCounts = {}; - let tapAndCount = (x, y, mousedownCount, mouseupCount, clickCount) => { + let tapAndCount = (x, y, mousedownCount, mouseupCount, clickCount, description) => { // Use double-rAF to stabilize layout before dispatching input event. requestAnimationFrame(() => { requestAnimationFrame(() => { - iframe.contentWindow.postMessage({tap: [x, y]}, "*"); + iframe.contentWindow.postMessage({tap: [x, y], description: description}, "*"); expectedCounts = { mousedown: mousedownCount, mouseup: mouseupCount, @@ -39,14 +39,14 @@ }; let step0 = () => { - tapAndCount(20, 20, 1, 1, 1); + tapAndCount(20, 20, 1, 1, 1, "Initial state"); }; let step1 = () => { iframe.style.top = "50px"; // Iframe moved, but it's not running an IntersectionObserver, so input events // are unaffected. - tapAndCount(20, 70, 1, 1, 1); + tapAndCount(20, 70, 1, 1, 1, "Iframe moved, no observer"); }; let step2 = () => { @@ -58,14 +58,14 @@ iframe.style.left = "50px"; // Iframe moved, and it's running an IntersectionObserver with // trackVisibility=true. Input events should be discarded. - tapAndCount(70, 70, 0, 0, 0); + tapAndCount(70, 70, 0, 0, 0, "Iframe moved, observer active"); }; let step4 = () => { setTimeout(() => { // Iframe position has been stable for 500ms, so input events should not // be discarded. - tapAndCount(70, 70, 1, 1, 1); + tapAndCount(70, 70, 1, 1, 1, "Iframe stable, observer active"); }, 500); }; @@ -83,7 +83,8 @@ if (evt.data.hasOwnProperty("count")) { t.step(() => { Object.keys(expectedCounts).forEach(key => { - assert_equals(evt.data["count"][key], expectedCounts[key], key); + let description = evt.data["description"] + " [" + key + "] "; + assert_equals(evt.data["count"][key], expectedCounts[key], description); }); }); }
diff --git a/third_party/blink/web_tests/http/tests/input/resources/discard-events-to-unstable-iframe-subframe.html b/third_party/blink/web_tests/http/tests/input/resources/discard-events-to-unstable-iframe-subframe.html index 6807bc69..52ad02a 100644 --- a/third_party/blink/web_tests/http/tests/input/resources/discard-events-to-unstable-iframe-subframe.html +++ b/third_party/blink/web_tests/http/tests/input/resources/discard-events-to-unstable-iframe-subframe.html
@@ -23,7 +23,7 @@ } if (evt.data.hasOwnProperty("tap")) { chrome.gpuBenchmarking.tap(evt.data["tap"][0], evt.data["tap"][1], () => { - evt.source.postMessage({count: eventCounts}, "*"); + evt.source.postMessage({count: eventCounts, description: evt.data["description"]}, "*"); Object.keys(eventCounts).forEach(key => { eventCounts[key] = 0 }); }); }
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/resources/font-face.css b/third_party/blink/web_tests/http/tests/serviceworker/resources/font-face.css new file mode 100644 index 0000000..a51ea6ef1 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/serviceworker/resources/font-face.css
@@ -0,0 +1,12 @@ +@font-face { + font-family: 'Ahem'; + /* Use the CORS approved resource so the cross-origin test doesn't fail with + * network error. The request is still expected to be logged as initiated by a + * no-cors stylesheet. + */ + src: url(/css/resources/cors-ahem.php); +} + +body { + font-family: 'Ahem'; +}
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/resources/simple.html b/third_party/blink/web_tests/http/tests/serviceworker/resources/simple.html index 0c3e3e7..ab4fc9d 100644 --- a/third_party/blink/web_tests/http/tests/serviceworker/resources/simple.html +++ b/third_party/blink/web_tests/http/tests/serviceworker/resources/simple.html
@@ -1,3 +1,3 @@ <!DOCTYPE html> <title>Simple</title> -Here's a simple html file. +<body>Here's a simple html file.</body>
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/usecounter-request-from-no-cors-style-sheet.html b/third_party/blink/web_tests/http/tests/serviceworker/usecounter-request-from-no-cors-style-sheet.html index 3878834..5d6fc9e 100644 --- a/third_party/blink/web_tests/http/tests/serviceworker/usecounter-request-from-no-cors-style-sheet.html +++ b/third_party/blink/web_tests/http/tests/serviceworker/usecounter-request-from-no-cors-style-sheet.html
@@ -24,7 +24,9 @@ win.document.head.appendChild(link); } -const scope = 'resources/blank.html'; +// Use simple.html, not blank.html, since fonts are not loaded if there is no +// text. +const scope = 'resources/simple.html'; const basePath = new URL('.', self.location).pathname; const remoteOrigin = get_host_info()['HTTP_REMOTE_ORIGIN']; const remoteBase = new URL(basePath, remoteOrigin); @@ -42,7 +44,7 @@ new URL(`resources/${styleSheet}`, remoteBase).href; // |frame1| uses a same-origin style sheet. - const frame1 = await with_iframe('resources/blank.html'); + const frame1 = await with_iframe('resources/simple.html'); t.add_cleanup(() => { frame1.remove(); }); const win1 = frame1.contentWindow; addStyleSheet(win1, styleSheet); @@ -54,7 +56,7 @@ addStyleSheet(win2, remoteOriginStyleSheet); // |frame3| uses a cross-origin style sheet. - const frame3 = await with_iframe('resources/blank.html'); + const frame3 = await with_iframe('resources/simple.html'); t.add_cleanup(() => { frame3.remove(); }); const win3 = frame3.contentWindow; addStyleSheet(win3, remoteOriginStyleSheet); @@ -79,7 +81,8 @@ // Test a stylesheet that requests an @import. style_sheet_test('import.css', '@import'); -// TODO(falken): Add a test for fonts. +// Test a stylesheet that requests a font. +style_sheet_test('font-face.css', 'font'); promise_test(async t => { return service_worker_unregister(t, scope);
diff --git a/third_party/blink/web_tests/images/resources/webp-color-no-profile-lossy.webp b/third_party/blink/web_tests/images/resources/webp-color-no-profile-lossy.webp new file mode 100644 index 0000000..f565a77 --- /dev/null +++ b/third_party/blink/web_tests/images/resources/webp-color-no-profile-lossy.webp Binary files differ
diff --git a/third_party/blink/web_tests/images/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/images/webp-no-color-profile-lossy-expected.png new file mode 100644 index 0000000..e28080b --- /dev/null +++ b/third_party/blink/web_tests/images/webp-no-color-profile-lossy-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/images/webp-no-color-profile-lossy.html b/third_party/blink/web_tests/images/webp-no-color-profile-lossy.html new file mode 100644 index 0000000..1afdd0c --- /dev/null +++ b/third_party/blink/web_tests/images/webp-no-color-profile-lossy.html
@@ -0,0 +1,2 @@ +<!-- The red sector of the image should be at the 12 o'clock position. --> +<img src="resources/webp-color-no-profile-lossy.webp" width="400px">
diff --git a/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html b/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html index b1d82643..8bcded2 100644 --- a/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html +++ b/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html
@@ -71,9 +71,11 @@ assert_equals(document.webkitFullscreenElement, null, "Should have exited fullscreen"); - assert_equals(getComputedStyle(panel).opacity, "1", - "Inline controls should show again after exiting " + - "fullscreen since mouse is hovering over controls"); + waitForHoverEffectUpdate(t.step_func(function() { + assert_equals(getComputedStyle(panel).opacity, "1", + "Inline controls should show again after exiting " + + "fullscreen since mouse is hovering over controls"); + })); t.done(); });
diff --git a/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html b/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html index fb861ad..d662c12 100644 --- a/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html +++ b/third_party/blink/web_tests/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html
@@ -45,9 +45,11 @@ assert_equals(document.webkitFullscreenElement, video, "Should have entered fullscreen"); - assert_equals(getComputedStyle(panel).opacity, "0", - "Fullscreen controls should not show after entering " + - "fullscreen since mouse is not hovering over controls"); + waitForHoverEffectUpdate(t.step_func(function() { + assert_equals(getComputedStyle(panel).opacity, "0", + "Fullscreen controls should not show after entering " + + "fullscreen since mouse is not hovering over controls"); + })); setTimeout(t.step_func(function() { // Exit fullscreen (without moving the mouse over the controls). @@ -58,9 +60,11 @@ assert_equals(document.webkitFullscreenElement, null, "Should have exited fullscreen"); - assert_equals(getComputedStyle(panel).opacity, "0", - "Inline controls should not show after exiting " + - "fullscreen since mouse is not hovering over controls"); + waitForHoverEffectUpdate(t.step_func(function() { + assert_equals(getComputedStyle(panel).opacity, "0", + "Inline controls should not show after exiting " + + "fullscreen since mouse is not hovering over controls"); + })); t.done(); });
diff --git a/third_party/blink/web_tests/media/media-controls.js b/third_party/blink/web_tests/media/media-controls.js index 19646f0..b4d41985 100644 --- a/third_party/blink/web_tests/media/media-controls.js +++ b/third_party/blink/web_tests/media/media-controls.js
@@ -455,6 +455,17 @@ setTimeout(func, doubleTapTimeoutMs); } +// Requests an animation frame. +function waitForHoverEffectUpdate(func) { + // The hover effect is updated at the next animation frame after the layout + // changes. + return new Promise((resolve) => { + requestAnimationFrame(() => { + resolve(); + }); + }); +} + function hoverMuteButton(video, func) { // Wait for hover timer fires const delayedCallback = function() { setTimeout(func); };
diff --git a/third_party/blink/web_tests/platform/mac/std-switch/switch-appearance-customization-expected.png b/third_party/blink/web_tests/platform/mac/std-switch/switch-appearance-customization-expected.png new file mode 100644 index 0000000..8ccdad8 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/std-switch/switch-appearance-customization-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/std-switch/switch-appearance-customization-expected.png b/third_party/blink/web_tests/platform/win/std-switch/switch-appearance-customization-expected.png new file mode 100644 index 0000000..8ccdad8 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/std-switch/switch-appearance-customization-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/webp-no-color-profile-lossy-expected.png new file mode 100644 index 0000000..e28080b --- /dev/null +++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/webp-no-color-profile-lossy-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/scrollbars/nested-scroll-overlay-scrollbar-expected.html b/third_party/blink/web_tests/scrollbars/nested-scroll-overlay-scrollbar-expected.html deleted file mode 100644 index 337c2f68..0000000 --- a/third_party/blink/web_tests/scrollbars/nested-scroll-overlay-scrollbar-expected.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div id="outer" style="width: 200px; height: 200px; overflow: scroll"> - <div style="background: green; height: 100px"></div> - <div style="height: 110px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/nested-scroll-overlay-scrollbar.html b/third_party/blink/web_tests/scrollbars/nested-scroll-overlay-scrollbar.html deleted file mode 100644 index 9a9eba03..0000000 --- a/third_party/blink/web_tests/scrollbars/nested-scroll-overlay-scrollbar.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<div style="width: 200px; height: 200px; overflow: scroll"> - <!-- The intermediate div doesn't have layout overflow. --> - <div style="height: 210px; overflow: scroll"> - <div style="background: green; width: 300px; height: 100px"></div> - </div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-interleaving-z-order-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-interleaving-z-order-expected.html deleted file mode 100644 index be7860a2..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-interleaving-z-order-expected.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<div id="container" style="width: 200px; height: 200px; overflow: scroll"> - <div id="content" style="background: green; width: 210px; height: 150px"></div> - <div style="height: 60px"></div> -</div> -<div style="position: absolute; top: 80px; left: 80px; z-index: -1; background: blue; width: 200px; height: 200px"></div> -<div style="position: absolute; top: 120px; left: 120px; z-index: 20; background: yellow; width: 200px; height: 200px"></div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-interleaving-z-order.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-interleaving-z-order.html deleted file mode 100644 index fe92316..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-interleaving-z-order.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<div id="container" style="width: 200px; height: 200px; overflow: scroll; position: relative"> - <div id="content" style="position: absolute; z-index: 10; background: green; width: 210px; height: 150px"></div> - <div style="height: 210px"></div> -</div> -<div style="position: absolute; top: 80px; left: 80px; z-index: 5; background: blue; width: 200px; height: 200px"></div> -<div style="position: absolute; top: 120px; left: 120px; z-index: 20; background: yellow; width: 200px; height: 200px"></div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-expected.html deleted file mode 100644 index 49c1ce68..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-expected.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div style="width: 200px; height: 200px; overflow: scroll"> - <div style="background: green; width: 300px; height: 100px"></div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-1-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-1-expected.html deleted file mode 100644 index 0b104dd8..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-1-expected.html +++ /dev/null
@@ -1,12 +0,0 @@ -<!DOCTYPE html> -<div style="width: 200px; height: 200px; overflow: scroll"> - <div style="background: green; width: 200px; height: 70px"></div> - <!-- This div let the top-level div have the same layout overflow as in the test. --> - <div style="width: 210px; height: 220px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-1.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-1.html deleted file mode 100644 index 26445a4c..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-1.html +++ /dev/null
@@ -1,14 +0,0 @@ -<!DOCTYPE html> -<div style="position: relative; width: 200px; height: 200px; overflow: scroll"> - <!-- the intermediate div doesn't have layout overflow. --> - <div style="position: relative; width: 210px; height: 80px; overflow: scroll"> - <div style="position: absolute; z-index: 5; background: green; width: 200px; height: 70px"></div> - </div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-2-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-2-expected.html deleted file mode 100644 index e4b3bae..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-2-expected.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div style="width: 200px; height: 200px; overflow: scroll"> - <div style="background: green; width: 210px; height: 80px"></div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-2.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-2.html deleted file mode 100644 index 30fdcc3..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-2.html +++ /dev/null
@@ -1,17 +0,0 @@ -<!DOCTYPE html> -<style> - #intermediate::-webkit-scrollbar { display: none; } -</style> -<div style="position: relative; width: 200px; height: 200px; overflow: scroll"> - <!-- The intermediate div's scrollbars are hidden. --> - <div id="intermediate" style="position: relative; width: 210px; height: 80px; overflow: scroll"> - <div style="position: absolute; z-index: 5; background: green; width: 300px; height: 100px"></div> - </div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-3-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-3-expected.html deleted file mode 100644 index e4b3bae..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-3-expected.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div style="width: 200px; height: 200px; overflow: scroll"> - <div style="background: green; width: 210px; height: 80px"></div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-3.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-3.html deleted file mode 100644 index e3b043e2..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-3.html +++ /dev/null
@@ -1,14 +0,0 @@ -<!DOCTYPE html> -<div style="position: relative; width: 200px; height: 200px; overflow: scroll"> - <!-- The intermediate div's overflow is hidden. --> - <div style="position: relative; width: 210px; height: 80px; overflow: hidden"> - <div style="position: absolute; z-index: 5; background: green; width: 300px; height: 100px"></div> - </div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-expected.html deleted file mode 100644 index 447fcfb6..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested-expected.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<div style="width: 200px; height: 200px; overflow: scroll"> - <div style="width: 210px; height: 80px; overflow: scroll"> - <div style="background: green; width: 300px; height: 200px"></div> - </div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested.html deleted file mode 100644 index a915f1c..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer-nested.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<div style="position: relative; width: 200px; height: 200px; overflow: scroll"> - <div style="position: relative; width: 210px; height: 80px; overflow: scroll"> - <div style="position: absolute; z-index: 5; background: green; width: 300px; height: 100px"></div> - </div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer.html deleted file mode 100644 index 4220153..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-child-layer.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div id="container" style="width: 200px; height: 200px; overflow: scroll"> - <div id="content" style="position: relative; background: green; width: 300px; height: 100px"></div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-negative-z-child-layer-expected.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-negative-z-child-layer-expected.html deleted file mode 100644 index b136cfb..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-negative-z-child-layer-expected.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div id="container" style="width: 200px; height: 200px; overflow: scroll"> - <div id="content" style="background: green; width: 300px; height: 100px"></div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-negative-z-child-layer.html b/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-negative-z-child-layer.html deleted file mode 100644 index a8adb7f..0000000 --- a/third_party/blink/web_tests/scrollbars/overlay-scrollbar-over-negative-z-child-layer.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<div id="container" style="width: 200px; height: 200px; overflow: scroll"> - <div id="content" style="position: relative; z-index: -1; background: green; width: 300px; height: 100px"></div> - <div style="height: 210px"></div> -</div> -<script> -if (window.internals) { - internals.runtimeFlags.overlayScrollbarsEnabled = true; - internals.settings.setMockScrollbarsEnabled(true); -} -</script>
diff --git a/third_party/blink/web_tests/std-switch/resources/state-combo.js b/third_party/blink/web_tests/std-switch/resources/state-combo.js new file mode 100644 index 0000000..90e7ab3 --- /dev/null +++ b/third_party/blink/web_tests/std-switch/resources/state-combo.js
@@ -0,0 +1,47 @@ +function generateSwitchElements(callback) { + const MASK_ON = 1; + const MASK_FOCUS = 1 << 1; + const MASK_HOVER = 1 << 2; + const MASK_ACTIVE = 1 << 3; + const MASK_DISABLED = 1 << 4; + const MASK_END = 1 << 5; + for (let mask = 0; mask < MASK_END; ++mask) { + let indicator = ''; + let switchElement = document.createElement('std-switch'); + if (mask & MASK_ON) { + switchElement.on = true; + indicator += 'o'; + } else { + indicator += '-'; + } + if (mask & MASK_FOCUS) { + internals.setPseudoClassState(switchElement, ':focus', true); + indicator += 'f'; + } else { + indicator += '-'; + } + if (mask & MASK_HOVER) { + internals.setPseudoClassState(switchElement, ':hover', true); + indicator += 'h'; + } else { + indicator += '-'; + } + if (mask & MASK_ACTIVE) { + internals.setPseudoClassState(switchElement, ':active', true); + indicator += 'a'; + } else { + indicator += '-'; + } + if (mask & MASK_DISABLED) { + switchElement.disabled = true; + indicator += 'd'; + } else { + indicator += '-'; + } + // Skip some impossible combinations + if (mask & MASK_DISABLED && (mask & MASK_FOCUS || mask & MASK_ACTIVE)) { + continue; + } + callback(indicator, switchElement); + } +}
diff --git a/third_party/blink/web_tests/std-switch/switch-appearance-customization.html b/third_party/blink/web_tests/std-switch/switch-appearance-customization.html new file mode 100644 index 0000000..c5a8c7a --- /dev/null +++ b/third_party/blink/web_tests/std-switch/switch-appearance-customization.html
@@ -0,0 +1,153 @@ +<!DOCTYPE html> +<body> +<style> +std-switch { + margin: 0.5em; +} + +/* ---------------------------------------------------------------- */ + +.material std-switch { + block-size: 20px; + inline-size: 36px; +} + +.material std-switch::part(track) { + background: rgba(0,0,0,0.4); + block-size: 14px; + border: none; + box-shadow: none; +} + +.material std-switch::part(trackFill) { + background: rgba(63,81,181,0.5); +} + +.material std-switch::part(thumb) { + block-size: 20px; + border-radius: 10px; + border: none; + box-shadow: 0 1px 5px 0 rgba(0,0,0,0.6); + inline-size: 20px; + margin-inline-start: -100%; +} + +.material std-switch[on]::part(thumb) { + background: rgb(63,81,181); + margin-inline-start: calc(0px - 20px); +} + +.material std-switch:hover::part(thumb) { + inline-size: 20px; +} + +/* TODO(tkent): add style for ripple effect. */ + +/* ---------------------------------------------------------------- */ + +.cocoa std-switch { + block-size: 31px; + inline-size: 51px; +} + +.cocoa std-switch::part(track) { + border-radius: 15px; + border: 1px solid lightgray; + box-shadow: none; +} + +.cocoa std-switch::part(trackFill) { + background: #4ad963; +} + +.cocoa std-switch[on]::part(track) { + border: 1px solid #4ad963; +} + +.cocoa std-switch::part(thumb) { + block-size: 29px; + border-radius: 14.5px; + border: none; + box-shadow: 0px 3px 4px 1px rgba(0,0,0,0.2); + inline-size: 29px; + margin-inline-start: calc(-100% + 1px); +} + +.cocoa std-switch[on]::part(thumb) { + margin-inline-start: calc(0px - 29px - 1px); +} + +/* ---------------------------------------------------------------- */ + +.fluent std-switch { + block-size: 20px; + inline-size: 44px; +} + +.fluent std-switch::part(track) { + border: 2px solid #333333; + box-shadow: none; +} + +.fluent std-switch[on]::part(track) { + border: 2px solid #4cafff; +} + +.fluent std-switch::part(trackFill) { + background: #4cafff; +} + +.fluent std-switch::part(thumb) { + background: #333333; + block-size: 10px; + border-radius: 5px; + border: none; + inline-size: 10px; + margin-inline-start: calc(-100% + 5px); +} + +.fluent std-switch[on]::part(thumb) { + background: white; + margin-inline-start: calc(0px - 10px - 5px); +} + +.fluent std-switch:active::part(track) { + background: darkgray; + border: 2px solid darkgray; +} + +.fluent std-switch:active::part(thumb) { + background: white; +} + +/* ---------------------------------------------------------------- */ + +div.material, div.cocoa, div.fluent { + overflow: auto; +} + +.container { + float: left; + font-family: monospace; +} +</style> +<div class="material"><h2>Material-like</h2></div> +<div class="cocoa"><h2>Cocoa-like</h2></div> +<div class="fluent"><h2>Fluent-like</h2></div> +<script src="resources/state-combo.js"></script> +<script type="module"> +import 'std:elements/switch'; + +function wrapAndConnect(query, indicator, element) { + let container = document.createElement('div'); + container.className = 'container'; + container.appendChild(document.createTextNode(indicator)); + container.appendChild(element); + document.querySelector(query).appendChild(container); +} + +generateSwitchElements(wrapAndConnect.bind(null, 'div.material')); +generateSwitchElements(wrapAndConnect.bind(null, 'div.cocoa')); +generateSwitchElements(wrapAndConnect.bind(null, 'div.fluent')); +</script> +</body>
diff --git a/third_party/blink/web_tests/std-switch/switch-appearance.html b/third_party/blink/web_tests/std-switch/switch-appearance.html index 01ce3f2..a4fde1a8 100644 --- a/third_party/blink/web_tests/std-switch/switch-appearance.html +++ b/third_party/blink/web_tests/std-switch/switch-appearance.html
@@ -20,55 +20,14 @@ <div><std-switch><div style="display:inline-block; text-align:right; width:100%;">off</div></std-switch></div> <div><std-switch on>on</std-switch></div> <div>Hidden attribute: <std-switch hidden></std-switch> <std-switch on hidden></std-switch></div> +<script src="resources/state-combo.js"></script> <script type="module"> -const MASK_ON = 1; -const MASK_FOCUS = 1 << 1; -const MASK_HOVER = 1 << 2; -const MASK_ACTIVE = 1 << 3; -const MASK_DISABLED = 1 << 4; -const MASK_END = 1 << 5; -for (let mask = 0; mask < MASK_END; ++mask) { - let indicator = ''; - let switchElement = document.createElement('std-switch'); - if (mask & MASK_ON) { - switchElement.on = true; - indicator += 'o'; - } else { - indicator += '-'; - } - if (mask & MASK_FOCUS) { - internals.setPseudoClassState(switchElement, ':focus', true); - indicator += 'f'; - } else { - indicator += '-'; - } - if (mask & MASK_HOVER) { - internals.setPseudoClassState(switchElement, ':hover', true); - indicator += 'h'; - } else { - indicator += '-'; - } - if (mask & MASK_ACTIVE) { - internals.setPseudoClassState(switchElement, ':active', true); - indicator += 'a'; - } else { - indicator += '-'; - } - if (mask & MASK_DISABLED) { - switchElement.disabled = true; - indicator += 'd'; - } else { - indicator += '-'; - } - // Skip some impossible combinations - if (mask & MASK_DISABLED && (mask & MASK_FOCUS || mask & MASK_ACTIVE)) { - continue; - } +generateSwitchElements((indicator, element) => { let container = document.createElement('div'); container.className = 'container'; container.appendChild(document.createTextNode(indicator)); - container.appendChild(switchElement); + container.appendChild(element); document.body.appendChild(container); -} +}); </script> </body>
diff --git a/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.png b/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.png index d3100be..57f073e 100644 --- a/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.png +++ b/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt b/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt index d6d5879..54bb628 100644 --- a/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt +++ b/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt
@@ -18,22 +18,34 @@ "backgroundColor": "#FFFFFF" }, { - "name": "LayoutNGBlockFlow (positioned) DIV class='outer'", + "name": "LayoutBlockFlow (positioned) DIV class='outer'", "bounds": [352, 294] }, { - "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'", + "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "position": [79, 79], "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD" }, { - "name": "LayoutNGBlockFlow (positioned) DIV class='outer' (foreground) Layer", + "name": "Overflow Controls Host Layer", + "position": [62, 62], + "bounds": [230, 170], + "drawsContent": false + }, + { + "name": "Vertical Scrollbar Layer", + "position": [280, 67], + "bounds": [7, 160], + "drawsContent": false + }, + { + "name": "LayoutBlockFlow (positioned) DIV class='outer' (foreground) Layer", "bounds": [352, 294] }, { - "name": "LayoutNGBlockFlow DIV class='scroller'", + "name": "LayoutBlockFlow DIV class='scroller'", "position": [32, 32], "bounds": [290, 230], "backgroundColor": "#FFFFFF" @@ -49,18 +61,6 @@ "position": [67, 67], "bounds": [220, 236], "backgroundColor": "#FFFFFF" - }, - { - "name": "Overflow Controls Host Layer", - "position": [62, 62], - "bounds": [230, 170], - "drawsContent": false - }, - { - "name": "Vertical Scrollbar Layer", - "position": [280, 67], - "bounds": [7, 160], - "drawsContent": false } ] }
diff --git a/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/scrollbars/nested-overlay-scrollbars-expected.png b/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/scrollbars/nested-overlay-scrollbars-expected.png deleted file mode 100644 index 219172d..0000000 --- a/third_party/blink/web_tests/virtual/disable-blink-gen-property-trees/compositing/scrollbars/nested-overlay-scrollbars-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/virtual/exotic-color-space/images/webp-no-color-profile-lossy-expected.png new file mode 100644 index 0000000..33a5fcd --- /dev/null +++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/webp-no-color-profile-lossy-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/virtual/gpu-rasterization/images/webp-no-color-profile-lossy-expected.png new file mode 100644 index 0000000..ac46209 --- /dev/null +++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/webp-no-color-profile-lossy-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt index fe2505f..cd80f071 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/element-instance-property-listing-expected.txt
@@ -176,6 +176,7 @@ property onpointermove property onpointerout property onpointerover + property onpointerrawupdate property onpointerup property onprogress property onratechange @@ -1270,6 +1271,7 @@ property onpointermove property onpointerout property onpointerover + property onpointerrawupdate property onpointerup property onprogress property onratechange
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index a794aa3d..63e3ecf 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -1336,6 +1336,7 @@ getter onpointermove getter onpointerout getter onpointerover + getter onpointerrawupdate getter onpointerup getter onprogress getter onratechange @@ -1519,6 +1520,7 @@ setter onpointermove setter onpointerout setter onpointerover + setter onpointerrawupdate setter onpointerup setter onprogress setter onratechange @@ -2263,6 +2265,7 @@ getter onpointermove getter onpointerout getter onpointerover + getter onpointerrawupdate getter onpointerup getter onprogress getter onratechange @@ -2365,6 +2368,7 @@ setter onpointermove setter onpointerout setter onpointerover + setter onpointerrawupdate setter onpointerup setter onprogress setter onratechange @@ -5515,6 +5519,7 @@ getter onpointermove getter onpointerout getter onpointerover + getter onpointerrawupdate getter onpointerup getter onprogress getter onratechange @@ -5603,6 +5608,7 @@ setter onpointermove setter onpointerout setter onpointerover + setter onpointerrawupdate setter onpointerup setter onprogress setter onratechange @@ -8911,6 +8917,7 @@ getter onpointermove getter onpointerout getter onpointerover + getter onpointerrawupdate getter onpointerup getter onpopstate getter onprogress @@ -9096,6 +9103,7 @@ setter onpointermove setter onpointerout setter onpointerover + setter onpointerrawupdate setter onpointerup setter onpopstate setter onprogress
diff --git a/third_party/blink/web_tests/virtual/threaded/external/wpt/animation-worklet/idlharness.any-expected.txt b/third_party/blink/web_tests/virtual/threaded/external/wpt/animation-worklet/idlharness.any-expected.txt deleted file mode 100644 index b6515dd..0000000 --- a/third_party/blink/web_tests/virtual/threaded/external/wpt/animation-worklet/idlharness.any-expected.txt +++ /dev/null
@@ -1,26 +0,0 @@ -This is a testharness.js-based test. -PASS idl_test setup -PASS Partial namespace CSS: original namespace defined -PASS Partial namespace CSS: valid exposure set -PASS Partial interface AnimationEffect: original interface defined -FAIL Partial interface AnimationEffect: valid exposure set Partial AnimationEffect interface is exposed to 'AnimationWorklet', the original interface is not. -PASS StatelessAnimator interface: existence and properties of interface object -PASS StatefulAnimator interface: existence and properties of interface object -PASS AnimationWorkletGlobalScope interface: existence and properties of interface object -FAIL WorkletAnimation interface: existence and properties of interface object assert_equals: prototype of WorkletAnimation is not Animation expected function "function Animation() { [native code] }" but got function "function () { [native code] }" -FAIL WorkletAnimation interface object length assert_equals: wrong value for WorkletAnimation.length expected 1 but got 2 -PASS WorkletAnimation interface object name -FAIL WorkletAnimation interface: existence and properties of interface prototype object assert_equals: prototype of WorkletAnimation.prototype is not Animation.prototype expected object "[object Animation]" but got object "[object Object]" -PASS WorkletAnimation interface: existence and properties of interface prototype object's "constructor" property -PASS WorkletAnimation interface: existence and properties of interface prototype object's @@unscopables property -FAIL WorkletAnimation interface: attribute animatorName assert_true: The prototype object must have a property "animatorName" expected true got false -FAIL WorkletAnimation must be primary interface of new WorkletAnimation("name") assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Failed to construct 'WorkletAnimation': 2 arguments required, but only 1 present." -FAIL Stringification of new WorkletAnimation("name") assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Failed to construct 'WorkletAnimation': 2 arguments required, but only 1 present." -FAIL WorkletAnimation interface: new WorkletAnimation("name") must inherit property "animatorName" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Failed to construct 'WorkletAnimation': 2 arguments required, but only 1 present." -PASS WorkletGroupEffect interface: existence and properties of interface object -PASS WorkletGlobalScope interface: existence and properties of interface object -PASS AnimationEffect interface: member localTime -PASS CSS namespace: operation escape(CSSOMString) -FAIL CSS namespace: attribute animationWorklet assert_own_property: CSS does not have property "animationWorklet" expected property "animationWorklet" missing -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index 13b7fc1..2e41760 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -10482,6 +10482,7 @@ method constructor interface WorkletAnimation attribute @@toStringTag + getter animatorName getter currentTime getter effect getter playState
diff --git a/third_party/feed/README.chromium b/third_party/feed/README.chromium index eca4e9d..947051f 100644 --- a/third_party/feed/README.chromium +++ b/third_party/feed/README.chromium
@@ -2,7 +2,7 @@ Short name: feed URL: https://chromium.googlesource.com/feed Version: 0 -Revision: fe5535b8c88fb3a610273bf115afa4e6a706f565 +Revision: 6bd5f95e33bfa4ce1be7948c28d773e7d9247825 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/feed/update_java_sources.sh b/third_party/feed/update_java_sources.sh index bc8021a9..8aefde17 100755 --- a/third_party/feed/update_java_sources.sh +++ b/third_party/feed/update_java_sources.sh
@@ -26,6 +26,8 @@ echo "feed_conformance_test_lib_sources = [" >> java_sources.gni find src/src/main/java/com/google/android/libraries/feed -regex ".*/common/\(.*/\)*testing/.*\.java" |\ env LC_COLLATE=en_US.ASCII sort | sed 's/^\(.*\)$/ "\1",/g' >> java_sources.gni +find src/src/main/java/com/google/android/libraries/feed -regex ".*/hostimpl/\(.*/\)*testing/.*\.java" |\ + env LC_COLLATE=en_US.ASCII sort | sed 's/^\(.*\)$/ "\1",/g' >> java_sources.gni find src/src/main/java/com/google/android/libraries/feed/testing/conformance -wholename "*.java" |\ env LC_COLLATE=en_US.ASCII sort | sed 's/^\(.*\)$/ "\1",/g' >> java_sources.gni find src/src/main/java/com/google/android/libraries/feed/testing/requestmanager -wholename "*.java" |\
diff --git a/third_party/google_android_play_core/BUILD.gn b/third_party/google_android_play_core/BUILD.gn index 62df4b81..32d1ca78 100644 --- a/third_party/google_android_play_core/BUILD.gn +++ b/third_party/google_android_play_core/BUILD.gn
@@ -5,6 +5,6 @@ import("//build/config/android/rules.gni") android_aar_prebuilt("com_google_android_play_core_java") { - aar_path = "core-1.3.7.aar" + aar_path = "core-1.6.2.aar" info_path = "com_google_android_play_core.info" }
diff --git a/third_party/google_android_play_core/README.chromium b/third_party/google_android_play_core/README.chromium index dc2032ab69..90876940 100644 --- a/third_party/google_android_play_core/README.chromium +++ b/third_party/google_android_play_core/README.chromium
@@ -1,7 +1,7 @@ Name: Play Core Library Short Name: Play Core URL: https://developer.android.com/guide/app-bundle/playcore -Version: 1.3.7 +Version: 1.6.2 License: Android Software Development Kit License License File: LICENSE Security Critical: yes
diff --git a/third_party/google_android_play_core/cipd.yaml b/third_party/google_android_play_core/cipd.yaml index 59a3d7d..e5946bc3 100644 --- a/third_party/google_android_play_core/cipd.yaml +++ b/third_party/google_android_play_core/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:1.3.7-cr2 +# cipd create --pkg-def cipd.yaml -tag version:1.6.2-cr0 package: chromium/third_party/android_deps/libs/com_google_android_play_core_verification description: "" data: -- file: core-1.3.7.aar \ No newline at end of file +- file: core-1.6.2.aar \ No newline at end of file
diff --git a/third_party/google_android_play_core/com_google_android_play_core.info b/third_party/google_android_play_core/com_google_android_play_core.info index a2ebd4a..2307336 100644 --- a/third_party/google_android_play_core/com_google_android_play_core.info +++ b/third_party/google_android_play_core/com_google_android_play_core.info
@@ -7,7 +7,7 @@ has_native_libraries = false has_proguard_flags = false has_r_text_file = false -is_manifest_empty = true +is_manifest_empty = false resources = [ ] subjar_tuples = [ ] subjars = [ ]
diff --git a/third_party/inspector_protocol/README.chromium b/third_party/inspector_protocol/README.chromium index c750a40..44e3007 100644 --- a/third_party/inspector_protocol/README.chromium +++ b/third_party/inspector_protocol/README.chromium
@@ -2,7 +2,7 @@ Short Name: inspector_protocol URL: https://chromium.googlesource.com/deps/inspector_protocol/ Version: 0 -Revision: aec57d43b6a2c41c37fb0a2507108e89a9342177 +Revision: 9072ed02dbe8775cb9a64594afa3f3592922b2ba License: BSD License File: LICENSE Security Critical: yes
diff --git a/third_party/inspector_protocol/README.md b/third_party/inspector_protocol/README.md index da3f93f..4482df7c 100644 --- a/third_party/inspector_protocol/README.md +++ b/third_party/inspector_protocol/README.md
@@ -15,8 +15,8 @@ See also [Contributing to Chrome Devtools Protocol](https://docs.google.com/document/d/1c-COD2kaK__5iMM5SEx-PzNA7HFmgttcYfOHHX0HaOM/edit). We're working on enabling standalone builds for parts of this package for -testing and development, please feel free to ignore this for now. -But, if you're familiar with +testing and development. +If you're familiar with [Chromium's development process](https://www.chromium.org/developers/contributing-code) and have the depot_tools installed, you may use these commands to fetch the package (and dependencies) and build and run the tests: @@ -24,8 +24,9 @@ fetch inspector_protocol cd src gn gen out/Release - ninja -C out/Release json_parser_test - out/Release/json_parser_test + ninja -C out/Release encoding_test bindings_test + out/Release/encoding_test + out/Release/bindings_test You'll probably also need to install g++, since Clang uses this to find the standard C++ headers. E.g.,
diff --git a/third_party/inspector_protocol/code_generator.py b/third_party/inspector_protocol/code_generator.py index 95bd992..7c72cc7 100755 --- a/third_party/inspector_protocol/code_generator.py +++ b/third_party/inspector_protocol/code_generator.py
@@ -11,18 +11,18 @@ import re import copy try: - import json + import json except ImportError: - import simplejson as json + import simplejson as json import pdl try: - unicode + unicode except NameError: - # Define unicode for Py3 - def unicode(s, *_): - return s + # Define unicode for Py3 + def unicode(s, *_): + return s # Path handling for libraries and templates # Paths have to be normalized because Jinja uses the exact template path to @@ -35,662 +35,695 @@ module_path, module_filename = os.path.split(os.path.realpath(__file__)) def read_config(): - # pylint: disable=W0703 - def json_to_object(data, output_base, config_base): - def json_object_hook(object_dict): - items = [(k, os.path.join(config_base, v) if k == "path" else v) for (k, v) in object_dict.items()] - items = [(k, os.path.join(output_base, v) if k == "output" else v) for (k, v) in items] - keys, values = list(zip(*items)) - return collections.namedtuple('X', keys)(*values) - return json.loads(data, object_hook=json_object_hook) + # pylint: disable=W0703 + def json_to_object(data, output_base, config_base): + def json_object_hook(object_dict): + items = [(k, os.path.join(config_base, v) if k == "path" else v) + for (k, v) in object_dict.items()] + items = [(k, os.path.join(output_base, v) if k == "output" else v) + for (k, v) in items] + keys, values = list(zip(*items)) + return collections.namedtuple('X', keys)(*values) + return json.loads(data, object_hook=json_object_hook) - def init_defaults(config_tuple, path, defaults): - keys = list(config_tuple._fields) # pylint: disable=E1101 - values = [getattr(config_tuple, k) for k in keys] - for i in range(len(keys)): - if hasattr(values[i], "_fields"): - values[i] = init_defaults(values[i], path + "." + keys[i], defaults) - for optional in defaults: - if optional.find(path + ".") != 0: - continue - optional_key = optional[len(path) + 1:] - if optional_key.find(".") == -1 and optional_key not in keys: - keys.append(optional_key) - values.append(defaults[optional]) - return collections.namedtuple('X', keys)(*values) + def init_defaults(config_tuple, path, defaults): + keys = list(config_tuple._fields) # pylint: disable=E1101 + values = [getattr(config_tuple, k) for k in keys] + for i in range(len(keys)): + if hasattr(values[i], "_fields"): + values[i] = init_defaults(values[i], path + "." + keys[i], defaults) + for optional in defaults: + if optional.find(path + ".") != 0: + continue + optional_key = optional[len(path) + 1:] + if optional_key.find(".") == -1 and optional_key not in keys: + keys.append(optional_key) + values.append(defaults[optional]) + return collections.namedtuple('X', keys)(*values) - try: - cmdline_parser = argparse.ArgumentParser() - cmdline_parser.add_argument("--output_base", type=unicode, required=True) - cmdline_parser.add_argument("--jinja_dir", type=unicode, required=True) - cmdline_parser.add_argument("--config", type=unicode, required=True) - cmdline_parser.add_argument("--config_value", default=[], action="append") - cmdline_parser.add_argument( - "--inspector_protocol_dir", type=unicode, required=True, - help=("directory with code_generator.py and C++ encoding / binding " - "libraries, relative to the root of the source tree.")) - arg_options = cmdline_parser.parse_args() - jinja_dir = arg_options.jinja_dir - output_base = arg_options.output_base - config_file = arg_options.config - config_base = os.path.dirname(config_file) - config_values = arg_options.config_value - inspector_protocol_dir = arg_options.inspector_protocol_dir.lstrip('/') - except Exception: - # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html - exc = sys.exc_info()[1] - sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc) - exit(1) + try: + cmdline_parser = argparse.ArgumentParser() + cmdline_parser.add_argument("--output_base", type=unicode, required=True) + cmdline_parser.add_argument("--jinja_dir", type=unicode, required=True) + cmdline_parser.add_argument("--config", type=unicode, required=True) + cmdline_parser.add_argument("--config_value", default=[], action="append") + cmdline_parser.add_argument( + "--inspector_protocol_dir", type=unicode, required=True, + help=("directory with code_generator.py and C++ encoding / binding " + "libraries, relative to the root of the source tree.")) + arg_options = cmdline_parser.parse_args() + jinja_dir = arg_options.jinja_dir + output_base = arg_options.output_base + config_file = arg_options.config + config_base = os.path.dirname(config_file) + config_values = arg_options.config_value + inspector_protocol_dir = arg_options.inspector_protocol_dir.lstrip('/') + except Exception: + # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html + exc = sys.exc_info()[1] + sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc) + exit(1) - try: - config_json_file = open(config_file, "r") - config_json_string = config_json_file.read() - config_partial = json_to_object(config_json_string, output_base, config_base) - config_json_file.close() - defaults = { - ".use_snake_file_names": False, - ".use_title_case_methods": False, - ".imported": False, - ".imported.export_macro": "", - ".imported.export_header": False, - ".imported.header": False, - ".imported.package": False, - ".imported.options": False, - ".protocol.export_macro": "", - ".protocol.export_header": False, - ".protocol.options": False, - ".protocol.file_name_prefix": "", - ".exported": False, - ".exported.export_macro": "", - ".exported.export_header": False, - ".lib": False, - ".lib.export_macro": "", - ".lib.export_header": False, - # The encoding lib consists of encoding/encoding.h and - # encoding/encoding.cc in its subdirectory, which binaries - # must link / depend on. - ".encoding_lib.header": os.path.join(inspector_protocol_dir, "encoding/encoding.h"), - ".encoding_lib.namespace": "", - # Ditto for bindings, see bindings/bindings.h. - ".bindings_lib.header": os.path.join(inspector_protocol_dir, "bindings/bindings.h"), - ".bindings_lib.namespace": "" - } - for key_value in config_values: - parts = key_value.split("=") - if len(parts) == 2: - defaults["." + parts[0]] = parts[1] - return (jinja_dir, config_file, init_defaults(config_partial, "", defaults)) - except Exception: - # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html - exc = sys.exc_info()[1] - sys.stderr.write("Failed to parse config file: %s\n\n" % exc) - exit(1) + try: + config_json_file = open(config_file, "r") + config_json_string = config_json_file.read() + config_partial = json_to_object(config_json_string, output_base, + config_base) + config_json_file.close() + defaults = { + ".use_snake_file_names": False, + ".use_title_case_methods": False, + ".imported": False, + ".imported.export_macro": "", + ".imported.export_header": False, + ".imported.header": False, + ".imported.package": False, + ".imported.options": False, + ".protocol.export_macro": "", + ".protocol.export_header": False, + ".protocol.options": False, + ".protocol.file_name_prefix": "", + ".exported": False, + ".exported.export_macro": "", + ".exported.export_header": False, + ".lib": False, + ".lib.export_macro": "", + ".lib.export_header": False, + # The encoding lib consists of encoding/encoding.h and + # encoding/encoding.cc in its subdirectory, which binaries + # must link / depend on. + ".encoding_lib.header": os.path.join(inspector_protocol_dir, + "encoding/encoding.h"), + ".encoding_lib.namespace": "", + # Ditto for bindings, see bindings/bindings.h. + ".bindings_lib.header": os.path.join(inspector_protocol_dir, + "bindings/bindings.h"), + ".bindings_lib.namespace": "" + } + for key_value in config_values: + parts = key_value.split("=") + if len(parts) == 2: + defaults["." + parts[0]] = parts[1] + return (jinja_dir, config_file, init_defaults(config_partial, "", defaults)) + except Exception: + # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html + exc = sys.exc_info()[1] + sys.stderr.write("Failed to parse config file: %s\n\n" % exc) + exit(1) # ---- Begin of utilities exposed to generator ---- def to_title_case(name): - return name[:1].upper() + name[1:] + return name[:1].upper() + name[1:] def dash_to_camelcase(word): - prefix = "" - if word[0] == "-": - prefix = "Negative" - word = word[1:] - return prefix + "".join(to_title_case(x) or "-" for x in word.split("-")) + prefix = "" + if word[0] == "-": + prefix = "Negative" + word = word[1:] + return prefix + "".join(to_title_case(x) or "-" for x in word.split("-")) def to_snake_case(name): - return re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", name, sys.maxsize).lower() + return re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", name, sys.maxsize).lower() def to_method_case(config, name): - if config.use_title_case_methods: - return to_title_case(name) - return name + if config.use_title_case_methods: + return to_title_case(name) + return name def join_arrays(dict, keys): - result = [] - for key in keys: - if key in dict: - result += dict[key] - return result + result = [] + for key in keys: + if key in dict: + result += dict[key] + return result def format_include(config, header, file_name=None): - if file_name is not None: - header = header + "/" + file_name + ".h" - header = "\"" + header + "\"" if header[0] not in "<\"" else header - if config.use_snake_file_names: - header = to_snake_case(header) - return header + if file_name is not None: + header = header + "/" + file_name + ".h" + header = "\"" + header + "\"" if header[0] not in "<\"" else header + if config.use_snake_file_names: + header = to_snake_case(header) + return header def format_domain_include(config, header, file_name): - return format_include(config, header, config.protocol.file_name_prefix + file_name) + return format_include(config, header, + config.protocol.file_name_prefix + file_name) def to_file_name(config, file_name): - if config.use_snake_file_names: - return to_snake_case(file_name).replace(".cpp", ".cc") - return file_name + if config.use_snake_file_names: + return to_snake_case(file_name).replace(".cpp", ".cc") + return file_name # ---- End of utilities exposed to generator ---- def initialize_jinja_env(jinja_dir, cache_dir, config): - # pylint: disable=F0401 - sys.path.insert(1, os.path.abspath(jinja_dir)) - import jinja2 + # pylint: disable=F0401 + sys.path.insert(1, os.path.abspath(jinja_dir)) + import jinja2 - jinja_env = jinja2.Environment( - loader=jinja2.FileSystemLoader(module_path), - # Bytecode cache is not concurrency-safe unless pre-cached: - # if pre-cached this is read-only, but writing creates a race condition. - bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir), - keep_trailing_newline=True, # newline-terminate generated files - lstrip_blocks=True, # so can indent control flow tags - trim_blocks=True) - jinja_env.filters.update({"to_title_case": to_title_case, "dash_to_camelcase": dash_to_camelcase, "to_method_case": functools.partial(to_method_case, config)}) - jinja_env.add_extension("jinja2.ext.loopcontrols") - return jinja_env + jinja_env = jinja2.Environment( + loader=jinja2.FileSystemLoader(module_path), + # Bytecode cache is not concurrency-safe unless pre-cached: + # if pre-cached this is read-only, but writing creates a race condition. + bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir), + keep_trailing_newline=True, # newline-terminate generated files + lstrip_blocks=True, # so can indent control flow tags + trim_blocks=True) + jinja_env.filters.update({ + "to_title_case": to_title_case, + "dash_to_camelcase": dash_to_camelcase, + "to_method_case": functools.partial(to_method_case, config)}) + jinja_env.add_extension("jinja2.ext.loopcontrols") + return jinja_env def create_imported_type_definition(domain_name, type, imported_namespace): - # pylint: disable=W0622 - return { - "return_type": "std::unique_ptr<%s::%s::API::%s>" % (imported_namespace, domain_name, type["id"]), - "pass_type": "std::unique_ptr<%s::%s::API::%s>" % (imported_namespace, domain_name, type["id"]), - "to_raw_type": "%s.get()", - "to_pass_type": "std::move(%s)", - "to_rvalue": "std::move(%s)", - "type": "std::unique_ptr<%s::%s::API::%s>" % (imported_namespace, domain_name, type["id"]), - "raw_type": "%s::%s::API::%s" % (imported_namespace, domain_name, type["id"]), - "raw_pass_type": "%s::%s::API::%s*" % (imported_namespace, domain_name, type["id"]), - "raw_return_type": "%s::%s::API::%s*" % (imported_namespace, domain_name, type["id"]), - } + # pylint: disable=W0622 + return { + "return_type": "std::unique_ptr<%s::%s::API::%s>" % ( + imported_namespace, domain_name, type["id"]), + "pass_type": "std::unique_ptr<%s::%s::API::%s>" % ( + imported_namespace, domain_name, type["id"]), + "to_raw_type": "%s.get()", + "to_pass_type": "std::move(%s)", + "to_rvalue": "std::move(%s)", + "type": "std::unique_ptr<%s::%s::API::%s>" % ( + imported_namespace, domain_name, type["id"]), + "raw_type": "%s::%s::API::%s" % ( + imported_namespace, domain_name, type["id"]), + "raw_pass_type": "%s::%s::API::%s*" % ( + imported_namespace, domain_name, type["id"]), + "raw_return_type": "%s::%s::API::%s*" % ( + imported_namespace, domain_name, type["id"]), + } def create_user_type_definition(domain_name, type): - # pylint: disable=W0622 - return { - "return_type": "std::unique_ptr<protocol::%s::%s>" % (domain_name, type["id"]), - "pass_type": "std::unique_ptr<protocol::%s::%s>" % (domain_name, type["id"]), - "to_raw_type": "%s.get()", - "to_pass_type": "std::move(%s)", - "to_rvalue": "std::move(%s)", - "type": "std::unique_ptr<protocol::%s::%s>" % (domain_name, type["id"]), - "raw_type": "protocol::%s::%s" % (domain_name, type["id"]), - "raw_pass_type": "protocol::%s::%s*" % (domain_name, type["id"]), - "raw_return_type": "protocol::%s::%s*" % (domain_name, type["id"]), - } + # pylint: disable=W0622 + return { + "return_type": "std::unique_ptr<protocol::%s::%s>" % ( + domain_name, type["id"]), + "pass_type": "std::unique_ptr<protocol::%s::%s>" % ( + domain_name, type["id"]), + "to_raw_type": "%s.get()", + "to_pass_type": "std::move(%s)", + "to_rvalue": "std::move(%s)", + "type": "std::unique_ptr<protocol::%s::%s>" % (domain_name, type["id"]), + "raw_type": "protocol::%s::%s" % (domain_name, type["id"]), + "raw_pass_type": "protocol::%s::%s*" % (domain_name, type["id"]), + "raw_return_type": "protocol::%s::%s*" % (domain_name, type["id"]), + } def create_object_type_definition(): - # pylint: disable=W0622 - return { - "return_type": "std::unique_ptr<protocol::DictionaryValue>", - "pass_type": "std::unique_ptr<protocol::DictionaryValue>", - "to_raw_type": "%s.get()", - "to_pass_type": "std::move(%s)", - "to_rvalue": "std::move(%s)", - "type": "std::unique_ptr<protocol::DictionaryValue>", - "raw_type": "protocol::DictionaryValue", - "raw_pass_type": "protocol::DictionaryValue*", - "raw_return_type": "protocol::DictionaryValue*", - } + # pylint: disable=W0622 + return { + "return_type": "std::unique_ptr<protocol::DictionaryValue>", + "pass_type": "std::unique_ptr<protocol::DictionaryValue>", + "to_raw_type": "%s.get()", + "to_pass_type": "std::move(%s)", + "to_rvalue": "std::move(%s)", + "type": "std::unique_ptr<protocol::DictionaryValue>", + "raw_type": "protocol::DictionaryValue", + "raw_pass_type": "protocol::DictionaryValue*", + "raw_return_type": "protocol::DictionaryValue*", + } def create_any_type_definition(): - # pylint: disable=W0622 - return { - "return_type": "std::unique_ptr<protocol::Value>", - "pass_type": "std::unique_ptr<protocol::Value>", - "to_raw_type": "%s.get()", - "to_pass_type": "std::move(%s)", - "to_rvalue": "std::move(%s)", - "type": "std::unique_ptr<protocol::Value>", - "raw_type": "protocol::Value", - "raw_pass_type": "protocol::Value*", - "raw_return_type": "protocol::Value*", - } + # pylint: disable=W0622 + return { + "return_type": "std::unique_ptr<protocol::Value>", + "pass_type": "std::unique_ptr<protocol::Value>", + "to_raw_type": "%s.get()", + "to_pass_type": "std::move(%s)", + "to_rvalue": "std::move(%s)", + "type": "std::unique_ptr<protocol::Value>", + "raw_type": "protocol::Value", + "raw_pass_type": "protocol::Value*", + "raw_return_type": "protocol::Value*", + } def create_string_type_definition(): - # pylint: disable=W0622 - return { - "return_type": "String", - "pass_type": "const String&", - "to_pass_type": "%s", - "to_raw_type": "%s", - "to_rvalue": "%s", - "type": "String", - "raw_type": "String", - "raw_pass_type": "const String&", - "raw_return_type": "String", - } + # pylint: disable=W0622 + return { + "return_type": "String", + "pass_type": "const String&", + "to_pass_type": "%s", + "to_raw_type": "%s", + "to_rvalue": "%s", + "type": "String", + "raw_type": "String", + "raw_pass_type": "const String&", + "raw_return_type": "String", + } def create_binary_type_definition(): - # pylint: disable=W0622 - return { - "return_type": "Binary", - "pass_type": "const Binary&", - "to_pass_type": "%s", - "to_raw_type": "%s", - "to_rvalue": "%s", - "type": "Binary", - "raw_type": "Binary", - "raw_pass_type": "const Binary&", - "raw_return_type": "Binary", - } + # pylint: disable=W0622 + return { + "return_type": "Binary", + "pass_type": "const Binary&", + "to_pass_type": "%s", + "to_raw_type": "%s", + "to_rvalue": "%s", + "type": "Binary", + "raw_type": "Binary", + "raw_pass_type": "const Binary&", + "raw_return_type": "Binary", + } def create_primitive_type_definition(type): - # pylint: disable=W0622 - typedefs = { - "number": "double", - "integer": "int", - "boolean": "bool" - } - defaults = { - "number": "0", - "integer": "0", - "boolean": "false" - } - jsontypes = { - "number": "TypeDouble", - "integer": "TypeInteger", - "boolean": "TypeBoolean", - } - return { - "return_type": typedefs[type], - "pass_type": typedefs[type], - "to_pass_type": "%s", - "to_raw_type": "%s", - "to_rvalue": "%s", - "type": typedefs[type], - "raw_type": typedefs[type], - "raw_pass_type": typedefs[type], - "raw_return_type": typedefs[type], - "default_value": defaults[type] - } + # pylint: disable=W0622 + typedefs = { + "number": "double", + "integer": "int", + "boolean": "bool" + } + defaults = { + "number": "0", + "integer": "0", + "boolean": "false" + } + jsontypes = { + "number": "TypeDouble", + "integer": "TypeInteger", + "boolean": "TypeBoolean", + } + return { + "return_type": typedefs[type], + "pass_type": typedefs[type], + "to_pass_type": "%s", + "to_raw_type": "%s", + "to_rvalue": "%s", + "type": typedefs[type], + "raw_type": typedefs[type], + "raw_pass_type": typedefs[type], + "raw_return_type": typedefs[type], + "default_value": defaults[type] + } def wrap_array_definition(type): - # pylint: disable=W0622 - return { - "return_type": "std::unique_ptr<protocol::Array<%s>>" % type["raw_type"], - "pass_type": "std::unique_ptr<protocol::Array<%s>>" % type["raw_type"], - "to_raw_type": "%s.get()", - "to_pass_type": "std::move(%s)", - "to_rvalue": "std::move(%s)", - "type": "std::unique_ptr<protocol::Array<%s>>" % type["raw_type"], - "raw_type": "protocol::Array<%s>" % type["raw_type"], - "raw_pass_type": "protocol::Array<%s>*" % type["raw_type"], - "raw_return_type": "protocol::Array<%s>*" % type["raw_type"], - "out_type": "protocol::Array<%s>&" % type["raw_type"], - } + # pylint: disable=W0622 + return { + "return_type": "std::unique_ptr<protocol::Array<%s>>" % type["raw_type"], + "pass_type": "std::unique_ptr<protocol::Array<%s>>" % type["raw_type"], + "to_raw_type": "%s.get()", + "to_pass_type": "std::move(%s)", + "to_rvalue": "std::move(%s)", + "type": "std::unique_ptr<protocol::Array<%s>>" % type["raw_type"], + "raw_type": "protocol::Array<%s>" % type["raw_type"], + "raw_pass_type": "protocol::Array<%s>*" % type["raw_type"], + "raw_return_type": "protocol::Array<%s>*" % type["raw_type"], + "out_type": "protocol::Array<%s>&" % type["raw_type"], + } class Protocol(object): - def __init__(self, config): - self.config = config - self.json_api = {"domains": []} - self.imported_domains = [] - self.exported_domains = [] - self.generate_domains = self.read_protocol_file(config.protocol.path) - if config.protocol.options: - self.generate_domains = [rule.domain for rule in config.protocol.options] - self.exported_domains = [rule.domain for rule in config.protocol.options if hasattr(rule, "exported")] + def __init__(self, config): + self.config = config + self.json_api = {"domains": []} + self.imported_domains = [] + self.exported_domains = [] + self.generate_domains = self.read_protocol_file(config.protocol.path) - if config.imported: - self.imported_domains = self.read_protocol_file(config.imported.path) - if config.imported.options: - self.imported_domains = [rule.domain for rule in config.imported.options] + if config.protocol.options: + self.generate_domains = [rule.domain for rule in config.protocol.options] + self.exported_domains = [rule.domain for rule in config.protocol.options + if hasattr(rule, "exported")] - self.patch_full_qualified_refs() - self.create_notification_types() - self.create_type_definitions() - self.generate_used_types() + if config.imported: + self.imported_domains = self.read_protocol_file(config.imported.path) + if config.imported.options: + self.imported_domains = [rule.domain + for rule in config.imported.options] + self.patch_full_qualified_refs() + self.create_notification_types() + self.create_type_definitions() + self.generate_used_types() - def read_protocol_file(self, file_name): - input_file = open(file_name, "r") - parsed_json = pdl.loads(input_file.read(), file_name) - input_file.close() - version = parsed_json["version"]["major"] + "." + parsed_json["version"]["minor"] - domains = [] - for domain in parsed_json["domains"]: - domains.append(domain["domain"]) - domain["version"] = version - self.json_api["domains"] += parsed_json["domains"] - return domains + def read_protocol_file(self, file_name): + input_file = open(file_name, "r") + parsed_json = pdl.loads(input_file.read(), file_name) + input_file.close() + version = '%s.%s' % (parsed_json["version"]["major"], + parsed_json["version"]["minor"]) + domains = [] + for domain in parsed_json["domains"]: + domains.append(domain["domain"]) + domain["version"] = version + self.json_api["domains"] += parsed_json["domains"] + return domains + def patch_full_qualified_refs(self): + def patch_full_qualified_refs_in_domain(json, domain_name): + if isinstance(json, list): + for item in json: + patch_full_qualified_refs_in_domain(item, domain_name) + if not isinstance(json, dict): + return + for key in json: + if key == "type" and json[key] == "string": + json[key] = domain_name + ".string" + if key != "$ref": + patch_full_qualified_refs_in_domain(json[key], domain_name) + continue + if json["$ref"].find(".") == -1: + json["$ref"] = domain_name + "." + json["$ref"] + return - def patch_full_qualified_refs(self): - def patch_full_qualified_refs_in_domain(json, domain_name): - if isinstance(json, list): - for item in json: - patch_full_qualified_refs_in_domain(item, domain_name) - if not isinstance(json, dict): - return - for key in json: - if key == "type" and json[key] == "string": - json[key] = domain_name + ".string" - if key != "$ref": - patch_full_qualified_refs_in_domain(json[key], domain_name) - continue - if json["$ref"].find(".") == -1: - json["$ref"] = domain_name + "." + json["$ref"] - return + for domain in self.json_api["domains"]: + patch_full_qualified_refs_in_domain(domain, domain["domain"]) - for domain in self.json_api["domains"]: - patch_full_qualified_refs_in_domain(domain, domain["domain"]) + def all_references(self, json): + refs = set() + if isinstance(json, list): + for item in json: + refs |= self.all_references(item) + if not isinstance(json, dict): + return refs + for key in json: + if key != "$ref": + refs |= self.all_references(json[key]) + else: + refs.add(json["$ref"]) + return refs - - def all_references(self, json): - refs = set() - if isinstance(json, list): - for item in json: - refs |= self.all_references(item) - if not isinstance(json, dict): - return refs - for key in json: - if key != "$ref": - refs |= self.all_references(json[key]) - else: - refs.add(json["$ref"]) - return refs - - def generate_used_types(self): - all_refs = set() - for domain in self.json_api["domains"]: - domain_name = domain["domain"] - if "commands" in domain: - for command in domain["commands"]: - if self.generate_command(domain_name, command["name"]): - all_refs |= self.all_references(command) - if "events" in domain: - for event in domain["events"]: - if self.generate_event(domain_name, event["name"]): - all_refs |= self.all_references(event) - all_refs.add(domain_name + "." + to_title_case(event["name"]) + "Notification") - - dependencies = self.generate_type_dependencies() - queue = set(all_refs) - while len(queue): - ref = queue.pop() - if ref in dependencies: - queue |= dependencies[ref] - all_refs - all_refs |= dependencies[ref] - self.used_types = all_refs - - - def generate_type_dependencies(self): - dependencies = dict() - domains_with_types = (x for x in self.json_api["domains"] if "types" in x) - for domain in domains_with_types: - domain_name = domain["domain"] - for type in domain["types"]: - related_types = self.all_references(type) - if len(related_types): - dependencies[domain_name + "." + type["id"]] = related_types - return dependencies - - - def create_notification_types(self): - for domain in self.json_api["domains"]: - if "events" in domain: - for event in domain["events"]: - event_type = dict() - event_type["description"] = "Wrapper for notification params" - event_type["type"] = "object" - event_type["id"] = to_title_case(event["name"]) + "Notification" - if "parameters" in event: - event_type["properties"] = copy.deepcopy(event["parameters"]) - if "types" not in domain: - domain["types"] = list() - domain["types"].append(event_type) - - - def create_type_definitions(self): - imported_namespace = "::".join(self.config.imported.namespace) if self.config.imported else "" - self.type_definitions = {} - self.type_definitions["number"] = create_primitive_type_definition("number") - self.type_definitions["integer"] = create_primitive_type_definition("integer") - self.type_definitions["boolean"] = create_primitive_type_definition("boolean") - self.type_definitions["object"] = create_object_type_definition() - self.type_definitions["any"] = create_any_type_definition() - self.type_definitions["binary"] = create_binary_type_definition() - for domain in self.json_api["domains"]: - self.type_definitions[domain["domain"] + ".string"] = create_string_type_definition() - self.type_definitions[domain["domain"] + ".binary"] = create_binary_type_definition() - if not ("types" in domain): - continue - for type in domain["types"]: - type_name = domain["domain"] + "." + type["id"] - if type["type"] == "object" and domain["domain"] in self.imported_domains: - self.type_definitions[type_name] = create_imported_type_definition(domain["domain"], type, imported_namespace) - elif type["type"] == "object": - self.type_definitions[type_name] = create_user_type_definition(domain["domain"], type) - elif type["type"] == "array": - self.type_definitions[type_name] = self.resolve_type(type) - elif type["type"] == domain["domain"] + ".string": - self.type_definitions[type_name] = create_string_type_definition() - elif type["type"] == domain["domain"] + ".binary": - self.type_definitions[type_name] = create_binary_type_definition() - else: - self.type_definitions[type_name] = create_primitive_type_definition(type["type"]) - - - def check_options(self, options, domain, name, include_attr, exclude_attr, default): - for rule in options: - if rule.domain != domain: - continue - if include_attr and hasattr(rule, include_attr): - return name in getattr(rule, include_attr) - if exclude_attr and hasattr(rule, exclude_attr): - return name not in getattr(rule, exclude_attr) - return default - return False - - - # ---- Begin of methods exposed to generator - - - def type_definition(self, name): - return self.type_definitions[name] - - - def resolve_type(self, prop): - if "$ref" in prop: - return self.type_definitions[prop["$ref"]] - if prop["type"] == "array": - return wrap_array_definition(self.resolve_type(prop["items"])) - return self.type_definitions[prop["type"]] - - - def generate_command(self, domain, command): - if not self.config.protocol.options: - return domain in self.generate_domains - return self.check_options(self.config.protocol.options, domain, command, "include", "exclude", True) - - - def generate_event(self, domain, event): - if not self.config.protocol.options: - return domain in self.generate_domains - return self.check_options(self.config.protocol.options, domain, event, "include_events", "exclude_events", True) - - - def generate_type(self, domain, typename): - return domain + "." + typename in self.used_types - - - def is_async_command(self, domain, command): - if not self.config.protocol.options: - return False - return self.check_options(self.config.protocol.options, domain, command, "async", None, False) - - - def is_exported(self, domain, name): - if not self.config.protocol.options: - return False - return self.check_options(self.config.protocol.options, domain, name, "exported", None, False) - - - def is_imported(self, domain, name): - if not self.config.imported: - return False - if not self.config.imported.options: - return domain in self.imported_domains - return self.check_options(self.config.imported.options, domain, name, "imported", None, False) - - - def is_exported_domain(self, domain): - return domain in self.exported_domains - - - def generate_disable(self, domain): - if "commands" not in domain: - return True + def generate_used_types(self): + all_refs = set() + for domain in self.json_api["domains"]: + domain_name = domain["domain"] + if "commands" in domain: for command in domain["commands"]: - if command["name"] == "disable" and self.generate_command(domain["domain"], "disable"): - return False - return True + if self.generate_command(domain_name, command["name"]): + all_refs |= self.all_references(command) + if "events" in domain: + for event in domain["events"]: + if self.generate_event(domain_name, event["name"]): + all_refs |= self.all_references(event) + all_refs.add('%s.%sNotification' % (domain_name, + to_title_case(event["name"]))) + + dependencies = self.generate_type_dependencies() + queue = set(all_refs) + while len(queue): + ref = queue.pop() + if ref in dependencies: + queue |= dependencies[ref] - all_refs + all_refs |= dependencies[ref] + self.used_types = all_refs + + def generate_type_dependencies(self): + dependencies = dict() + domains_with_types = (x for x in self.json_api["domains"] if "types" in x) + for domain in domains_with_types: + domain_name = domain["domain"] + for type in domain["types"]: + related_types = self.all_references(type) + if len(related_types): + dependencies[domain_name + "." + type["id"]] = related_types + return dependencies + + def create_notification_types(self): + for domain in self.json_api["domains"]: + if "events" in domain: + for event in domain["events"]: + event_type = dict() + event_type["description"] = "Wrapper for notification params" + event_type["type"] = "object" + event_type["id"] = to_title_case(event["name"]) + "Notification" + if "parameters" in event: + event_type["properties"] = copy.deepcopy(event["parameters"]) + if "types" not in domain: + domain["types"] = list() + domain["types"].append(event_type) + + def create_type_definitions(self): + imported_namespace = "" + if self.config.imported: + imported_namespace = "::".join(self.config.imported.namespace) + self.type_definitions = {} + self.type_definitions["number"] = create_primitive_type_definition("number") + self.type_definitions["integer"] = create_primitive_type_definition("integer") + self.type_definitions["boolean"] = create_primitive_type_definition("boolean") + self.type_definitions["object"] = create_object_type_definition() + self.type_definitions["any"] = create_any_type_definition() + self.type_definitions["binary"] = create_binary_type_definition() + for domain in self.json_api["domains"]: + self.type_definitions[domain["domain"] + ".string"] = ( + create_string_type_definition()) + self.type_definitions[domain["domain"] + ".binary"] = ( + create_binary_type_definition()) + if not ("types" in domain): + continue + for type in domain["types"]: + type_name = domain["domain"] + "." + type["id"] + if type["type"] == "object" and domain["domain"] in self.imported_domains: + self.type_definitions[type_name] = create_imported_type_definition( + domain["domain"], type, imported_namespace) + elif type["type"] == "object": + self.type_definitions[type_name] = create_user_type_definition( + domain["domain"], type) + elif type["type"] == "array": + self.type_definitions[type_name] = self.resolve_type(type) + elif type["type"] == domain["domain"] + ".string": + self.type_definitions[type_name] = create_string_type_definition() + elif type["type"] == domain["domain"] + ".binary": + self.type_definitions[type_name] = create_binary_type_definition() + else: + self.type_definitions[type_name] = create_primitive_type_definition( + type["type"]) + + def check_options(self, options, domain, name, include_attr, exclude_attr, + default): + for rule in options: + if rule.domain != domain: + continue + if include_attr and hasattr(rule, include_attr): + return name in getattr(rule, include_attr) + if exclude_attr and hasattr(rule, exclude_attr): + return name not in getattr(rule, exclude_attr) + return default + return False - def is_imported_dependency(self, domain): - return domain in self.generate_domains or domain in self.imported_domains + # ---- Begin of methods exposed to generator + + def type_definition(self, name): + return self.type_definitions[name] + + def resolve_type(self, prop): + if "$ref" in prop: + return self.type_definitions[prop["$ref"]] + if prop["type"] == "array": + return wrap_array_definition(self.resolve_type(prop["items"])) + return self.type_definitions[prop["type"]] + + def generate_command(self, domain, command): + if not self.config.protocol.options: + return domain in self.generate_domains + return self.check_options(self.config.protocol.options, domain, command, + "include", "exclude", True) + + def generate_event(self, domain, event): + if not self.config.protocol.options: + return domain in self.generate_domains + return self.check_options(self.config.protocol.options, domain, event, + "include_events", "exclude_events", True) + + def generate_type(self, domain, typename): + return domain + "." + typename in self.used_types + + def is_async_command(self, domain, command): + if not self.config.protocol.options: + return False + return self.check_options(self.config.protocol.options, domain, command, + "async", None, False) + + def is_exported(self, domain, name): + if not self.config.protocol.options: + return False + return self.check_options(self.config.protocol.options, domain, name, + "exported", None, False) + + def is_imported(self, domain, name): + if not self.config.imported: + return False + if not self.config.imported.options: + return domain in self.imported_domains + return self.check_options(self.config.imported.options, domain, name, + "imported", None, False) + + def is_exported_domain(self, domain): + return domain in self.exported_domains + + def generate_disable(self, domain): + if "commands" not in domain: + return True + for command in domain["commands"]: + if command["name"] == "disable" and self.generate_command( + domain["domain"], "disable"): + return False + return True + + def is_imported_dependency(self, domain): + return domain in self.generate_domains or domain in self.imported_domains def main(): - jinja_dir, config_file, config = read_config() + jinja_dir, config_file, config = read_config() - protocol = Protocol(config) + protocol = Protocol(config) - if not config.exported and len(protocol.exported_domains): - sys.stderr.write("Domains [%s] are exported, but config is missing export entry\n\n" % ", ".join(protocol.exported_domains)) - exit(1) + if not config.exported and len(protocol.exported_domains): + sys.stderr.write(("Domains [%s] are exported, but config is missing export " + "entry\n\n") % ", ".join(protocol.exported_domains)) + exit(1) - if not os.path.exists(config.protocol.output): - os.mkdir(config.protocol.output) - if len(protocol.exported_domains) and not os.path.exists(config.exported.output): - os.mkdir(config.exported.output) - jinja_env = initialize_jinja_env(jinja_dir, config.protocol.output, config) + if not os.path.exists(config.protocol.output): + os.mkdir(config.protocol.output) + if len(protocol.exported_domains) and not os.path.exists( + config.exported.output): + os.mkdir(config.exported.output) + jinja_env = initialize_jinja_env(jinja_dir, config.protocol.output, config) - inputs = [] - inputs.append(__file__) - inputs.append(config_file) - inputs.append(config.protocol.path) - if config.imported: - inputs.append(config.imported.path) - templates_dir = os.path.join(module_path, "templates") - inputs.append(os.path.join(templates_dir, "TypeBuilder_h.template")) - inputs.append(os.path.join(templates_dir, "TypeBuilder_cpp.template")) - inputs.append(os.path.join(templates_dir, "Exported_h.template")) - inputs.append(os.path.join(templates_dir, "Imported_h.template")) + inputs = [] + inputs.append(__file__) + inputs.append(config_file) + inputs.append(config.protocol.path) + if config.imported: + inputs.append(config.imported.path) + templates_dir = os.path.join(module_path, "templates") + inputs.append(os.path.join(templates_dir, "TypeBuilder_h.template")) + inputs.append(os.path.join(templates_dir, "TypeBuilder_cpp.template")) + inputs.append(os.path.join(templates_dir, "Exported_h.template")) + inputs.append(os.path.join(templates_dir, "Imported_h.template")) - h_template = jinja_env.get_template("templates/TypeBuilder_h.template") - cpp_template = jinja_env.get_template("templates/TypeBuilder_cpp.template") - exported_template = jinja_env.get_template("templates/Exported_h.template") - imported_template = jinja_env.get_template("templates/Imported_h.template") + h_template = jinja_env.get_template("templates/TypeBuilder_h.template") + cpp_template = jinja_env.get_template("templates/TypeBuilder_cpp.template") + exported_template = jinja_env.get_template("templates/Exported_h.template") + imported_template = jinja_env.get_template("templates/Imported_h.template") - outputs = dict() + outputs = dict() - for domain in protocol.json_api["domains"]: - class_name = domain["domain"] - file_name = config.protocol.file_name_prefix + class_name - template_context = { - "protocol": protocol, - "config": config, - "domain": domain, - "join_arrays": join_arrays, - "format_include": functools.partial(format_include, config), - "format_domain_include": functools.partial(format_domain_include, config), - } + for domain in protocol.json_api["domains"]: + class_name = domain["domain"] + file_name = config.protocol.file_name_prefix + class_name + template_context = { + "protocol": protocol, + "config": config, + "domain": domain, + "join_arrays": join_arrays, + "format_include": functools.partial(format_include, config), + "format_domain_include": functools.partial(format_domain_include, config), + } - if domain["domain"] in protocol.generate_domains: - outputs[os.path.join(config.protocol.output, to_file_name(config, file_name + ".h"))] = h_template.render(template_context) - outputs[os.path.join(config.protocol.output, to_file_name(config, file_name + ".cpp"))] = cpp_template.render(template_context) - if domain["domain"] in protocol.exported_domains: - outputs[os.path.join(config.exported.output, to_file_name(config, file_name + ".h"))] = exported_template.render(template_context) - if domain["domain"] in protocol.imported_domains: - outputs[os.path.join(config.protocol.output, to_file_name(config, file_name + ".h"))] = imported_template.render(template_context) + if domain["domain"] in protocol.generate_domains: + outputs[os.path.join(config.protocol.output, to_file_name( + config, file_name + ".h"))] = h_template.render(template_context) + outputs[os.path.join(config.protocol.output, to_file_name( + config, file_name + ".cpp"))] = cpp_template.render(template_context) + if domain["domain"] in protocol.exported_domains: + outputs[os.path.join(config.exported.output, to_file_name( + config, file_name + ".h"))] = exported_template.render( + template_context) + if domain["domain"] in protocol.imported_domains: + outputs[os.path.join(config.protocol.output, to_file_name( + config, file_name + ".h"))] = imported_template.render( + template_context) - if config.lib: - template_context = { - "config": config, - "format_include": functools.partial(format_include, config), - } + if config.lib: + template_context = { + "config": config, + "format_include": functools.partial(format_include, config), + } - lib_templates_dir = os.path.join(module_path, "lib") - # Note these should be sorted in the right order. - # TODO(dgozman): sort them programmatically based on commented includes. - protocol_h_templates = [ - "ErrorSupport_h.template", - "Values_h.template", - "Object_h.template", - "ValueConversions_h.template", - "DispatcherBase_h.template", - "Parser_h.template", - ] + lib_templates_dir = os.path.join(module_path, "lib") + # Note these should be sorted in the right order. + # TODO(dgozman): sort them programmatically based on commented includes. + protocol_h_templates = [ + "ErrorSupport_h.template", + "Values_h.template", + "Object_h.template", + "ValueConversions_h.template", + "DispatcherBase_h.template", + "Parser_h.template", + ] - protocol_cpp_templates = [ - "Protocol_cpp.template", - "ErrorSupport_cpp.template", - "Values_cpp.template", - "Object_cpp.template", - "DispatcherBase_cpp.template", - "Parser_cpp.template", - ] + protocol_cpp_templates = [ + "Protocol_cpp.template", + "ErrorSupport_cpp.template", + "Values_cpp.template", + "Object_cpp.template", + "DispatcherBase_cpp.template", + "Parser_cpp.template", + ] - forward_h_templates = [ - "Forward_h.template", - "FrontendChannel_h.template", - ] + forward_h_templates = [ + "Forward_h.template", + "FrontendChannel_h.template", + ] - base_string_adapter_h_templates = [ - "base_string_adapter_h.template", - ] + base_string_adapter_h_templates = [ + "base_string_adapter_h.template", + ] - base_string_adapter_cc_templates = [ - "base_string_adapter_cc.template", - ] + base_string_adapter_cc_templates = [ + "base_string_adapter_cc.template", + ] - def generate_lib_file(file_name, template_files): - parts = [] - for template_file in template_files: - inputs.append(os.path.join(lib_templates_dir, template_file)) - template = jinja_env.get_template("lib/" + template_file) - parts.append(template.render(template_context)) - outputs[file_name] = "\n\n".join(parts) + def generate_lib_file(file_name, template_files): + parts = [] + for template_file in template_files: + inputs.append(os.path.join(lib_templates_dir, template_file)) + template = jinja_env.get_template("lib/" + template_file) + parts.append(template.render(template_context)) + outputs[file_name] = "\n\n".join(parts) - generate_lib_file(os.path.join(config.lib.output, to_file_name(config, "Forward.h")), forward_h_templates) - generate_lib_file(os.path.join(config.lib.output, to_file_name(config, "Protocol.h")), protocol_h_templates) - generate_lib_file(os.path.join(config.lib.output, to_file_name(config, "Protocol.cpp")), protocol_cpp_templates) - generate_lib_file(os.path.join(config.lib.output, to_file_name(config, "base_string_adapter.h")), base_string_adapter_h_templates) - generate_lib_file(os.path.join(config.lib.output, to_file_name(config, "base_string_adapter.cc")), base_string_adapter_cc_templates) + generate_lib_file(os.path.join(config.lib.output, to_file_name( + config, "Forward.h")), forward_h_templates) + generate_lib_file(os.path.join(config.lib.output, to_file_name( + config, "Protocol.h")), protocol_h_templates) + generate_lib_file(os.path.join(config.lib.output, to_file_name( + config, "Protocol.cpp")), protocol_cpp_templates) + generate_lib_file(os.path.join(config.lib.output, to_file_name( + config, "base_string_adapter.h")), base_string_adapter_h_templates) + generate_lib_file(os.path.join(config.lib.output, to_file_name( + config, "base_string_adapter.cc")), base_string_adapter_cc_templates) - # Make gyp / make generatos happy, otherwise make rebuilds world. - inputs_ts = max(map(os.path.getmtime, inputs)) - up_to_date = True - for output_file in outputs.keys(): - if not os.path.exists(output_file) or os.path.getmtime(output_file) < inputs_ts: - up_to_date = False - break - if up_to_date: - sys.exit() + # Make gyp / make generatos happy, otherwise make rebuilds world. + inputs_ts = max(map(os.path.getmtime, inputs)) + up_to_date = True + for output_file in outputs.keys(): + if (not os.path.exists(output_file) + or os.path.getmtime(output_file) < inputs_ts): + up_to_date = False + break + if up_to_date: + sys.exit() - for file_name, content in outputs.items(): - out_file = open(file_name, "w") - out_file.write(content) - out_file.close() + for file_name, content in outputs.items(): + out_file = open(file_name, "w") + out_file.write(content) + out_file.close() -main() +if __name__ == "__main__": + main()
diff --git a/third_party/inspector_protocol/concatenate_protocols.py b/third_party/inspector_protocol/concatenate_protocols.py index e9f448e..42ecc7f9 100755 --- a/third_party/inspector_protocol/concatenate_protocols.py +++ b/third_party/inspector_protocol/concatenate_protocols.py
@@ -7,33 +7,36 @@ import sys try: - import json + import json except ImportError: - import simplejson as json + import simplejson as json import pdl def main(argv): - if len(argv) < 1: - sys.stderr.write("Usage: %s <protocol-1> [<protocol-2> [, <protocol-3>...]] <output-file>\n" % sys.argv[0]) - return 1 + if len(argv) < 1: + sys.stderr.write( + "Usage: %s <protocol-1> [<protocol-2> [, <protocol-3>...]] " + "<output-file>\n" % sys.argv[0]) + return 1 - domains = [] - version = None - for protocol in argv[:-1]: - file_name = os.path.normpath(protocol) - if not os.path.isfile(file_name): - sys.stderr.write("Cannot find %s\n" % file_name) - return 1 - input_file = open(file_name, "r") - parsed_json = pdl.loads(input_file.read(), file_name) - domains += parsed_json["domains"] - version = parsed_json["version"] + domains = [] + version = None + for protocol in argv[:-1]: + file_name = os.path.normpath(protocol) + if not os.path.isfile(file_name): + sys.stderr.write("Cannot find %s\n" % file_name) + return 1 + input_file = open(file_name, "r") + parsed_json = pdl.loads(input_file.read(), file_name) + domains += parsed_json["domains"] + version = parsed_json["version"] - output_file = open(argv[-1], "w") - json.dump({"version": version, "domains": domains}, output_file, indent=4, sort_keys=False, separators=(',', ': ')) - output_file.close() + output_file = open(argv[-1], "w") + json.dump({"version": version, "domains": domains}, output_file, + indent=4, sort_keys=False, separators=(',', ': ')) + output_file.close() if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) + sys.exit(main(sys.argv[1:]))
diff --git a/third_party/inspector_protocol/encoding/encoding.cc b/third_party/inspector_protocol/encoding/encoding.cc index 2f69cfbd..676c8de 100644 --- a/third_party/inspector_protocol/encoding/encoding.cc +++ b/third_party/inspector_protocol/encoding/encoding.cc
@@ -1370,7 +1370,7 @@ // If we have enough bytes in our input, decode the remaining ones // belonging to this Unicode character into |codepoint|. - if (ii + num_bytes_left > chars.size()) + if (ii + num_bytes_left >= chars.size()) continue; while (num_bytes_left > 0) { c = chars[++ii];
diff --git a/third_party/inspector_protocol/encoding/encoding_test.cc b/third_party/inspector_protocol/encoding/encoding_test.cc index b8c05795..85504c76 100644 --- a/third_party/inspector_protocol/encoding/encoding_test.cc +++ b/third_party/inspector_protocol/encoding/encoding_test.cc
@@ -1366,6 +1366,32 @@ EXPECT_EQ("\"\"", out); // Empty string means that 0x7f was rejected (good). } +TEST(JsonEncoder, IncompleteUtf8Sequence) { + std::string out; + Status status; + std::unique_ptr<StreamingParserHandler> writer = + NewJSONEncoder(&GetTestPlatform(), &out, &status); + + writer->HandleArrayBegin(); // This emits [, which starts an array. + + { // 🌎 takes four bytes to encode in UTF-8. We test with the first three; + // This means we're trying to emit a string that consists solely of an + // incomplete UTF-8 sequence. So the string in the JSON output is emtpy. + std::string world_utf8 = "🌎"; + ASSERT_EQ(4u, world_utf8.size()); + std::vector<uint8_t> chars(world_utf8.begin(), world_utf8.begin() + 3); + writer->HandleString8(SpanFrom(chars)); + EXPECT_EQ("[\"\"", out); // Incomplete sequence rejected: empty string. + } + + { // This time, the incomplete sequence is at the end of the string. + std::string msg = "Hello, \xF0\x9F\x8C"; + std::vector<uint8_t> chars(msg.begin(), msg.end()); + writer->HandleString8(SpanFrom(chars)); + EXPECT_EQ("[\"\",\"Hello, \"", out); // Incomplete sequence dropped at end. + } +} + TEST(JsonStdStringWriterTest, HelloWorld) { std::string out; Status status;
diff --git a/third_party/inspector_protocol/pdl.py b/third_party/inspector_protocol/pdl.py index 03d11b39..d773363 100644 --- a/third_party/inspector_protocol/pdl.py +++ b/third_party/inspector_protocol/pdl.py
@@ -12,160 +12,167 @@ description = '' -primitiveTypes = ['integer', 'number', 'boolean', 'string', 'object', 'any', 'array', 'binary'] +primitiveTypes = ['integer', 'number', 'boolean', 'string', 'object', + 'any', 'array', 'binary'] def assignType(item, type, is_array=False, map_binary_to_string=False): - if is_array: - item['type'] = 'array' - item['items'] = collections.OrderedDict() - assignType(item['items'], type, False, map_binary_to_string) - return + if is_array: + item['type'] = 'array' + item['items'] = collections.OrderedDict() + assignType(item['items'], type, False, map_binary_to_string) + return - if type == 'enum': - type = 'string' - if map_binary_to_string and type == 'binary': - type = 'string' - if type in primitiveTypes: - item['type'] = type - else: - item['$ref'] = type + if type == 'enum': + type = 'string' + if map_binary_to_string and type == 'binary': + type = 'string' + if type in primitiveTypes: + item['type'] = type + else: + item['$ref'] = type def createItem(d, experimental, deprecated, name=None): - result = collections.OrderedDict(d) - if name: - result['name'] = name - global description - if description: - result['description'] = description.strip() - if experimental: - result['experimental'] = True - if deprecated: - result['deprecated'] = True - return result + result = collections.OrderedDict(d) + if name: + result['name'] = name + global description + if description: + result['description'] = description.strip() + if experimental: + result['experimental'] = True + if deprecated: + result['deprecated'] = True + return result def parse(data, file_name, map_binary_to_string=False): - protocol = collections.OrderedDict() - protocol['version'] = collections.OrderedDict() - protocol['domains'] = [] - domain = None - item = None - subitems = None - nukeDescription = False - global description - lines = data.split('\n') - for i in range(0, len(lines)): - if nukeDescription: - description = '' - nukeDescription = False - line = lines[i] - trimLine = line.strip() + protocol = collections.OrderedDict() + protocol['version'] = collections.OrderedDict() + protocol['domains'] = [] + domain = None + item = None + subitems = None + nukeDescription = False + global description + lines = data.split('\n') + for i in range(0, len(lines)): + if nukeDescription: + description = '' + nukeDescription = False + line = lines[i] + trimLine = line.strip() - if trimLine.startswith('#'): - if len(description): - description += '\n' - description += trimLine[2:] - continue + if trimLine.startswith('#'): + if len(description): + description += '\n' + description += trimLine[2:] + continue + else: + nukeDescription = True + + if len(trimLine) == 0: + continue + + match = re.compile( + r'^(experimental )?(deprecated )?domain (.*)').match(line) + if match: + domain = createItem({'domain' : match.group(3)}, match.group(1), + match.group(2)) + protocol['domains'].append(domain) + continue + + match = re.compile(r'^ depends on ([^\s]+)').match(line) + if match: + if 'dependencies' not in domain: + domain['dependencies'] = [] + domain['dependencies'].append(match.group(1)) + continue + + match = re.compile(r'^ (experimental )?(deprecated )?type (.*) ' + r'extends (array of )?([^\s]+)').match(line) + if match: + if 'types' not in domain: + domain['types'] = [] + item = createItem({'id': match.group(3)}, match.group(1), match.group(2)) + assignType(item, match.group(5), match.group(4), map_binary_to_string) + domain['types'].append(item) + continue + + match = re.compile( + r'^ (experimental )?(deprecated )?(command|event) (.*)').match(line) + if match: + list = [] + if match.group(3) == 'command': + if 'commands' in domain: + list = domain['commands'] else: - nukeDescription = True + list = domain['commands'] = [] + else: + if 'events' in domain: + list = domain['events'] + else: + list = domain['events'] = [] - if len(trimLine) == 0: - continue + item = createItem({}, match.group(1), match.group(2), match.group(4)) + list.append(item) + continue - match = re.compile(r'^(experimental )?(deprecated )?domain (.*)').match(line) - if match: - domain = createItem({'domain' : match.group(3)}, match.group(1), match.group(2)) - protocol['domains'].append(domain) - continue + match = re.compile( + r'^ (experimental )?(deprecated )?(optional )?' + r'(array of )?([^\s]+) ([^\s]+)').match(line) + if match: + param = createItem({}, match.group(1), match.group(2), match.group(6)) + if match.group(3): + param['optional'] = True + assignType(param, match.group(5), match.group(4), map_binary_to_string) + if match.group(5) == 'enum': + enumliterals = param['enum'] = [] + subitems.append(param) + continue - match = re.compile(r'^ depends on ([^\s]+)').match(line) - if match: - if 'dependencies' not in domain: - domain['dependencies'] = [] - domain['dependencies'].append(match.group(1)) - continue + match = re.compile(r'^ (parameters|returns|properties)').match(line) + if match: + subitems = item[match.group(1)] = [] + continue - match = re.compile(r'^ (experimental )?(deprecated )?type (.*) extends (array of )?([^\s]+)').match(line) - if match: - if 'types' not in domain: - domain['types'] = [] - item = createItem({'id': match.group(3)}, match.group(1), match.group(2)) - assignType(item, match.group(5), match.group(4), map_binary_to_string) - domain['types'].append(item) - continue + match = re.compile(r'^ enum').match(line) + if match: + enumliterals = item['enum'] = [] + continue - match = re.compile(r'^ (experimental )?(deprecated )?(command|event) (.*)').match(line) - if match: - list = [] - if match.group(3) == 'command': - if 'commands' in domain: - list = domain['commands'] - else: - list = domain['commands'] = [] - else: - if 'events' in domain: - list = domain['events'] - else: - list = domain['events'] = [] + match = re.compile(r'^version').match(line) + if match: + continue - item = createItem({}, match.group(1), match.group(2), match.group(4)) - list.append(item) - continue + match = re.compile(r'^ major (\d+)').match(line) + if match: + protocol['version']['major'] = match.group(1) + continue - match = re.compile(r'^ (experimental )?(deprecated )?(optional )?(array of )?([^\s]+) ([^\s]+)').match(line) - if match: - param = createItem({}, match.group(1), match.group(2), match.group(6)) - if match.group(3): - param['optional'] = True - assignType(param, match.group(5), match.group(4), map_binary_to_string) - if match.group(5) == 'enum': - enumliterals = param['enum'] = [] - subitems.append(param) - continue + match = re.compile(r'^ minor (\d+)').match(line) + if match: + protocol['version']['minor'] = match.group(1) + continue - match = re.compile(r'^ (parameters|returns|properties)').match(line) - if match: - subitems = item[match.group(1)] = [] - continue + match = re.compile(r'^ redirect ([^\s]+)').match(line) + if match: + item['redirect'] = match.group(1) + continue - match = re.compile(r'^ enum').match(line) - if match: - enumliterals = item['enum'] = [] - continue + match = re.compile(r'^ ( )?[^\s]+$').match(line) + if match: + # enum literal + enumliterals.append(trimLine) + continue - match = re.compile(r'^version').match(line) - if match: - continue - - match = re.compile(r'^ major (\d+)').match(line) - if match: - protocol['version']['major'] = match.group(1) - continue - - match = re.compile(r'^ minor (\d+)').match(line) - if match: - protocol['version']['minor'] = match.group(1) - continue - - match = re.compile(r'^ redirect ([^\s]+)').match(line) - if match: - item['redirect'] = match.group(1) - continue - - match = re.compile(r'^ ( )?[^\s]+$').match(line) - if match: - # enum literal - enumliterals.append(trimLine) - continue - - print('Error in %s:%s, illegal token: \t%s' % (file_name, i, line)) - sys.exit(1) - return protocol + print('Error in %s:%s, illegal token: \t%s' % (file_name, i, line)) + sys.exit(1) + return protocol def loads(data, file_name, map_binary_to_string=False): - if file_name.endswith(".pdl"): - return parse(data, file_name, map_binary_to_string) - return json.loads(data) + if file_name.endswith(".pdl"): + return parse(data, file_name, map_binary_to_string) + return json.loads(data)
diff --git a/third_party/opus/OWNERS b/third_party/opus/OWNERS index 4cc08f0..f46b8d1 100644 --- a/third_party/opus/OWNERS +++ b/third_party/opus/OWNERS
@@ -1,2 +1,2 @@ +flim@chromium.org henrika@chromium.org -sergeyu@chromium.org
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 9a0b5c2..f4a55de 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -10508,6 +10508,13 @@ <int value="212" label="Nvmem Cipher Error"/> </enum> +<enum name="Cr50U2FCommands"> + <summary>List of U2F commands that can be handled by cr50.</summary> + <int value="1" label="Register"/> + <int value="2" label="Authenticate"/> + <int value="3" label="Version"/> +</enum> + <enum name="CrashExitCodes"> <!-- These are abs() raw exit codes, so always positive. See MapCrashExitCodeForHistogram function. See also the WindowsExitCode enum. --> @@ -31349,10 +31356,11 @@ </enum> <enum name="IosLocationAuthorizationStatus"> - <int value="0" label="NotDetermined"/> + <int value="0" label="User has not made a choice"/> <int value="1" label="Restricted"/> - <int value="2" label="Denied"/> - <int value="3" label="Authorized"/> + <int value="2" label="User explicitly denied"/> + <int value="3" label="Authorized always"/> + <int value="4" label="Authorized when Chrome is in use"/> </enum> <enum name="IOSNTPImpression"> @@ -34036,6 +34044,7 @@ <int value="-1382671832" label="OmniboxUIExperimentVerticalMargin:enabled"/> <int value="-1377186702" label="DesktopIOSPromotion:disabled"/> <int value="-1376510363" label="ServiceWorkerScriptFullCodeCache:disabled"/> + <int value="-1376006534" label="WinUseBrowserSpellChecker:disabled"/> <int value="-1375111024" label="enable-fixed-position-compositing"/> <int value="-1373942769" label="WebAuthenticationCtap2:disabled"/> <int value="-1373705581" label="ManualSaving:enabled"/> @@ -34317,6 +34326,7 @@ <int value="-1010588306" label="SlideTopChromeWithPageScrolls:disabled"/> <int value="-1008511612" label="EnableCustomMacPaperSizes:disabled"/> <int value="-1001837588" label="EnableAppReinstallZeroState:enabled"/> + <int value="-998731974" label="WinUseBrowserSpellChecker:enabled"/> <int value="-998255750" label="ExperimentalKeyboardLockUI:enabled"/> <int value="-996673716" label="enable-web-app-frame"/> <int value="-994558985" label="EnableNotificationIndicator:disabled"/> @@ -56344,6 +56354,7 @@ <int value="14" label="Offline Pages"/> <int value="15" label="Send Tab To Self"/> <int value="16" label="Updates"/> + <int value="17" label="Click To Call"/> </enum> <enum name="TabBackgroundLoadStatus">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 082d932a..afbd015 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -3519,23 +3519,6 @@ </summary> </histogram> -<histogram - name="Android.WebView.ShouldInterceptRequest.NullInputStream.ResponseStatusCode" - enum="HttpResponseCode" expires_after="2020-06-14"> - <owner>timvolodine@chromium.org</owner> - <owner>tobiasjs@chromium.org</owner> - <owner>ntfschr@chromium.org</owner> - <summary> - Records the custom response status code for the intercepted requests where - input stream is null. In case status code is invalid (or has not been - specified by the app) a zero status code is recorded. This UMA is needed in - order to track specific usages of request interception where the behavior - with network service enabled is different from the old code path (for more - details see go/wv-ns-behavior-differences). This data is recorded regardless - of whether the network service is enabled or disabled. - </summary> -</histogram> - <histogram name="Android.WebView.SplitApkWorkaroundResult" enum="SplitApkWorkaroundResult" expires_after="M72"> <owner>tiborg@chromium.org</owner> @@ -4385,6 +4368,16 @@ </summary> </histogram> +<histogram name="Apps.AppListLauncherIssuedSearchQueryLength" + units="characters" expires_after="2020-01-01"> + <owner>jennyz@chromium.org</owner> + <owner>newcomer@chromium.org</owner> + <summary> + The UMA histogram that logs the length of user typed queries app list + launcher issues to the search providers. + </summary> +</histogram> + <histogram name="Apps.AppListLaunchRecorderError" enum="AppListLaunchRecorderError" expires_after="2020-05-18"> <owner>tby@chromium.org</owner> @@ -12469,7 +12462,7 @@ </histogram> <histogram name="Blink.Canvas.ResourceProviderType" - enum="CanvasResourceProviderType" expires_after="M77"> + enum="CanvasResourceProviderType" expires_after="2022-8-30"> <owner>aaronhk@chromium.org</owner> <owner>fserb@chromium.org</owner> <summary> @@ -13515,7 +13508,7 @@ </histogram> <histogram name="Blink.OffscreenCanvas.Transferred" enum="Boolean" - expires_after="M77"> + expires_after="2022-8-30"> <owner>aaronhk@chromium.org</owner> <owner>fserb@chromium.org</owner> <summary> @@ -32809,7 +32802,8 @@ </histogram> <histogram name="Enterprise.InvalidDevicePolicyFiles" units="files" - expires_after="M77"> + expires_after="2020-07-02"> + <owner>emaxx@chromium.org</owner> <owner>igorcov@chromium.org</owner> <summary> Chrome OS only. Number of policy files that turned out to be invalid when @@ -43703,7 +43697,7 @@ </histogram> <histogram name="FirstRun.LaunchSource" enum="FirstRunLaunchSource" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> Counts the number of times First Run experience was triggered by another @@ -51302,7 +51296,7 @@ </histogram> <histogram name="IOS.ContentExtension.DisplayCount" units="count" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The number of times the Content Extension was displayed since last Chrome @@ -51310,7 +51304,7 @@ </summary> </histogram> -<histogram name="IOS.ContentExtension.Index" units="index" expires_after="M77"> +<histogram name="IOS.ContentExtension.Index" units="index" expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The index of the URL selected by the user in the Content Extension. @@ -51541,13 +51535,14 @@ </summary> </histogram> -<histogram name="IOS.SearchExtension.Action" enum="IOSSearchExtensionAction"> +<histogram name="IOS.SearchExtension.Action" enum="IOSSearchExtensionAction" + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary>The action selected by the user in the Search Extension.</summary> </histogram> <histogram name="IOS.SearchExtension.DisplayCount" units="count" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The number of times the Search Extension was displayed since last Chrome @@ -51556,7 +51551,7 @@ </histogram> <histogram name="IOS.ShareExtension.ReceivedEntriesCount" units="files" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The number of items received simultaneously in Chrome from the IOS share @@ -51565,13 +51560,13 @@ </histogram> <histogram name="IOS.ShareExtension.ReceivedEntry" - enum="IOSShareExtensionReceivedEntryType" expires_after="M77"> + enum="IOSShareExtensionReceivedEntryType" expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary>Type of the item received from the iOS share extension.</summary> </histogram> <histogram name="IOS.ShareExtension.ReceivedEntryDelay" units="ms" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The delay in milliseconds between the item creation in the extension and its @@ -51580,7 +51575,7 @@ </histogram> <histogram name="IOS.ShareExtension.Source" - enum="IOSShareExtensionReceivedEntrySource" expires_after="M77"> + enum="IOSShareExtensionReceivedEntrySource" expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The source application that sent the external command to Chrome. @@ -51608,13 +51603,13 @@ </histogram> <histogram name="IOS.Spotlight.Action" enum="IOSSpotlightAction" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary>The Spotlight Action pressed by the user.</summary> </histogram> <histogram name="IOS.Spotlight.Availability" enum="IOSSpotlightAvailability" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> Tracks the availability of the Spotlight indexation on the device. It is @@ -51624,18 +51619,18 @@ </histogram> <histogram name="IOS.Spotlight.BookmarksIndexingDuration" units="ms" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary>Time spent in Spotlight initial indexation of bookmarks.</summary> </histogram> -<histogram name="IOS.Spotlight.BookmarksInitialIndexSize" expires_after="M77"> +<histogram name="IOS.Spotlight.BookmarksInitialIndexSize" expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary>Number of bookmarks indexed during initial indexation.</summary> </histogram> <histogram name="IOS.Spotlight.Origin" enum="IOSSpotlightOrigin" - expires_after="M77"> + expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> This event is recorded each time a Chrome Spotlight entry is selected by the @@ -51700,7 +51695,7 @@ </histogram> <histogram name="IOS.TabSwitcher.PageChangeInteraction" - enum="IOSTabSwitcherPageChangeInteraction" expires_after="M77"> + enum="IOSTabSwitcherPageChangeInteraction" expires_after="M85"> <owner>marq@chromium.org</owner> <summary> The UI interaction by which the user changed the visible page in the tab @@ -62610,8 +62605,8 @@ </summary> </histogram> -<histogram name="MemoryWarning.OccurrencesPerSession" expires_after="M77"> - <owner>justincohen@chromium.org</owner> +<histogram name="MemoryWarning.OccurrencesPerSession" expires_after="M85"> + <owner>marq@chromium.org</owner> <summary> The number of memory warnings during a given foreground session. </summary> @@ -86552,10 +86547,10 @@ </histogram> <histogram name="Omnibox.QueryIosLocationAuthorizationStatus" - enum="IosLocationAuthorizationStatus" expires_after="M77"> + enum="IosLocationAuthorizationStatus" expires_after="M86"> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> - <owner>kiyun@google.com</owner> + <owner>stkhapugin@chromium.com</owner> <summary> For iOS, whether the application is authorized to use location services when the user enters a search query into the Omnibox. @@ -97847,6 +97842,18 @@ </summary> </histogram> +<histogram name="Platform.U2F.Command" enum="Cr50U2FCommands"> + <owner>louiscollard@chromium.org</owner> + <owner>cros-hwsec@chromium.org</owner> + <summary>Records occurrences of U2F commands sent to cr50.</summary> +</histogram> + +<histogram name="Platform.U2F.LegacyCommand" enum="Cr50U2FCommands"> + <owner>louiscollard@chromium.org</owner> + <owner>cros-hwsec@chromium.org</owner> + <summary>Records occurrences of legacy U2F commands sent to cr50.</summary> +</histogram> + <histogram name="Platform.UncleanShutdownsDaily" units="count per day"> <owner>semenzato@chromium.org</owner> <owner>bsimonnet@chromium.org</owner> @@ -128042,7 +128049,7 @@ </histogram> <histogram name="Startup.MobileSessionStartAction" - enum="MobileSessionStartAction" expires_after="M77"> + enum="MobileSessionStartAction" expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary> The action requested on the application startup when called from another app @@ -128051,7 +128058,7 @@ </histogram> <histogram name="Startup.MobileSessionStartFromApps" - enum="MobileSessionCallerApp" expires_after="M77"> + enum="MobileSessionCallerApp" expires_after="M85"> <owner>olivierrobin@chromium.org</owner> <summary>The calling application (if any).</summary> </histogram> @@ -133247,7 +133254,7 @@ </histogram> <histogram name="Tab.StateAtRendererTermination" enum="TabForegroundState" - expires_after="2019-08-07"> + expires_after="2020-07-01"> <owner>olivierrobin@chromium.org</owner> <owner>pkl@chromium.org</owner> <summary> @@ -150801,12 +150808,14 @@ <histogram_suffixes name="AndroidFeatureModuleName" separator="."> <suffix name="ar" label="Augmented Reality Module"/> <suffix name="autofill_assistant" label="Assistant-in-Chrome Module"/> - <suffix name="devtools" label="Developer Tools Module"/> + <suffix name="dev_ui" label="Developer UI Module"/> <suffix name="tab_ui" label="Tab Management Module"/> <suffix name="vr" label="Virtual Reality Module"/> <affected-histogram name="Android.FeatureModules.AvailabilityStatus"/> <affected-histogram name="Android.FeatureModules.CachedInstallDuration"/> <affected-histogram + name="Android.FeatureModules.CachedInstallDuration.Download"/> + <affected-histogram name="Android.FeatureModules.CachedInstallDuration.Downloading"/> <affected-histogram name="Android.FeatureModules.CachedInstallDuration.Installing"/> @@ -150817,6 +150826,8 @@ <affected-histogram name="Android.FeatureModules.InstallStatus"/> <affected-histogram name="Android.FeatureModules.UncachedInstallDuration"/> <affected-histogram + name="Android.FeatureModules.UncachedInstallDuration.Download"/> + <affected-histogram name="Android.FeatureModules.UncachedInstallDuration.Downloading"/> <affected-histogram name="Android.FeatureModules.UncachedInstallDuration.Installing"/> @@ -152583,13 +152594,19 @@ </obsolete> </suffix> <suffix name="BrowserCompositor" - label="A BrowserCompositor GPU command buffer context"/> + label="A browser process UI + display compositor command buffer context"/> <suffix name="BrowserMainThread" - label="A BrowserMainThread GPU command buffer context"/> + label="A browser process shared main thread command buffer context"/> + <suffix name="BrowserWorker" + label="A browser process worker command buffer context"/> <suffix name="DisplayCompositor" - label="A display compositor GPU command buffer context"/> + label="A display compositor command buffer context"/> <suffix name="Media" label="The media worker command buffer context"/> - <suffix name="MusClient" label="A mus client command buffer context"/> + <suffix name="MusClient" label="A mus client command buffer context"> + <obsolete> + Removed 07/2019. + </obsolete> + </suffix> <suffix name="RenderCompositor" label="A RenderCompositor GPU command buffer context"/> <suffix name="RenderMainThread"
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc index 3ae7da5..093adf8b 100644 --- a/ui/views/controls/menu/menu_controller.cc +++ b/ui/views/controls/menu/menu_controller.cc
@@ -1138,30 +1138,35 @@ base::WeakPtr<MenuController> this_ref = AsWeakPtr(); if (event->type() == ui::ET_KEY_PRESSED) { + bool key_handled = false; #if defined(OS_MACOSX) // Special handling for Option-Up and Option-Down, which should behave like // Home and End respectively in menus. if ((event->flags() & ui::EF_ALT_DOWN)) { if (event->key_code() == ui::VKEY_UP) { - OnKeyDown(ui::VKEY_HOME); + key_handled = OnKeyPressed(ui::VKEY_HOME); } else if (event->key_code() == ui::VKEY_DOWN) { - OnKeyDown(ui::VKEY_END); + key_handled = OnKeyPressed(ui::VKEY_END); } else { - OnKeyDown(event->key_code()); + key_handled = OnKeyPressed(event->key_code()); } } else { - OnKeyDown(event->key_code()); + key_handled = OnKeyPressed(event->key_code()); } #else - OnKeyDown(event->key_code()); + key_handled = OnKeyPressed(event->key_code()); #endif + + if (key_handled) + event->StopPropagation(); + // Key events can lead to this being deleted. if (!this_ref) { event->StopPropagation(); return ui::POST_DISPATCH_NONE; } - if (!IsEditableCombobox()) { + if (!IsEditableCombobox() && !event->stopped_propagation()) { // Do not check mnemonics if the Alt or Ctrl modifiers are pressed. For // example Ctrl+<T> is an accelerator, but <T> only is a mnemonic. const int kKeyFlagsMask = ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN; @@ -1419,10 +1424,12 @@ did_initiate_drag_ = false; } -void MenuController::OnKeyDown(ui::KeyboardCode key_code) { +bool MenuController::OnKeyPressed(ui::KeyboardCode key_code) { // Do not process while performing drag-and-drop if (for_drop_) - return; + return false; + + bool handled_key_code = false; switch (key_code) { case ui::VKEY_HOME: @@ -1499,6 +1506,7 @@ else OpenSubmenuChangeSelectionIfCan(); } else { + handled_key_code = true; if (!SendAcceleratorToHotTrackedView() && pending_state_.item->GetEnabled()) { Accept(pending_state_.item, 0); @@ -1555,6 +1563,7 @@ default: break; } + return handled_key_code; } MenuController::MenuController(bool for_drop,
diff --git a/ui/views/controls/menu/menu_controller.h b/ui/views/controls/menu/menu_controller.h index c65b0ac..9a8de1d9 100644 --- a/ui/views/controls/menu/menu_controller.h +++ b/ui/views/controls/menu/menu_controller.h
@@ -350,8 +350,9 @@ const ui::LocatedEvent* event); void StartDrag(SubmenuView* source, const gfx::Point& location); - // Key processing. - void OnKeyDown(ui::KeyboardCode key_code); + // Handles |key_code| as a keypress. Returns true if OnKeyPressed handled the + // key code. + bool OnKeyPressed(ui::KeyboardCode key_code); // Creates a MenuController. See |for_drop_| member for details on |for_drop|. MenuController(bool for_drop, internal::MenuControllerDelegate* delegate);