|
@@ -0,0 +1,63 @@
|
|
|
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
+From: Ionel Popescu <[email protected]>
|
|
|
+Date: Wed, 15 Sep 2021 18:16:16 +0000
|
|
|
+Subject: Speculative fix for eye dropper getColor crash.
|
|
|
+
|
|
|
+There seems to be a situation where the captured frame coordinates
|
|
|
+are different than the ones accessible by moving the mouse.
|
|
|
+
|
|
|
+I am not able to locally reproduce this issue, so I am adding DCHECKs
|
|
|
+to validate that the coordinates are correct and I am also handling
|
|
|
+the invalid coordinates to prevent invalid memory access.
|
|
|
+
|
|
|
+(cherry picked from commit a656373ae7212e0d88474bdec4691a4152452748)
|
|
|
+
|
|
|
+Bug: 1246631
|
|
|
+Change-Id: I915d46a71aa73b5dcf08127d347fdd47c1ddf54c
|
|
|
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3152423
|
|
|
+Reviewed-by: Mason Freed <[email protected]>
|
|
|
+Commit-Queue: Ionel Popescu <[email protected]>
|
|
|
+Cr-Original-Commit-Position: refs/heads/main@{#920811}
|
|
|
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3163070
|
|
|
+Auto-Submit: Ionel Popescu <[email protected]>
|
|
|
+Commit-Queue: Rubber Stamper <[email protected]>
|
|
|
+Bot-Commit: Rubber Stamper <[email protected]>
|
|
|
+Cr-Commit-Position: refs/branch-heads/4638@{#75}
|
|
|
+Cr-Branched-From: 159257cab5585bc8421abf347984bb32fdfe9eb9-refs/heads/main@{#920003}
|
|
|
+
|
|
|
+diff --git a/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc b/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc
|
|
|
+index 46cfbf3f497fa824a112165450d5cc98883a58c3..112b734be608802a33acff0aa790ce7e829b7bb4 100644
|
|
|
+--- a/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc
|
|
|
++++ b/chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc
|
|
|
+@@ -65,6 +65,7 @@ class EyeDropperView::ScreenCapturer
|
|
|
+ std::unique_ptr<webrtc::DesktopFrame> frame) override;
|
|
|
+
|
|
|
+ SkBitmap GetBitmap() const;
|
|
|
++ SkColor GetColor(int x, int y) const;
|
|
|
+ int original_offset_x() const;
|
|
|
+ int original_offset_y() const;
|
|
|
+
|
|
|
+@@ -125,6 +126,13 @@ SkBitmap EyeDropperView::ScreenCapturer::GetBitmap() const {
|
|
|
+ return frame_;
|
|
|
+ }
|
|
|
+
|
|
|
++SkColor EyeDropperView::ScreenCapturer::GetColor(int x, int y) const {
|
|
|
++ DCHECK(x < frame_.width());
|
|
|
++ DCHECK(y < frame_.height());
|
|
|
++ return x < frame_.width() && y < frame_.height() ? frame_.getColor(x, y)
|
|
|
++ : SK_ColorBLACK;
|
|
|
++}
|
|
|
++
|
|
|
+ int EyeDropperView::ScreenCapturer::original_offset_x() const {
|
|
|
+ return original_offset_x_;
|
|
|
+ }
|
|
|
+@@ -224,7 +232,8 @@ void EyeDropperView::OnPaint(gfx::Canvas* view_canvas) {
|
|
|
+
|
|
|
+ // Store the pixel color under the cursor as it is the last color seen
|
|
|
+ // by the user before selection.
|
|
|
+- selected_color_ = frame.getColor(center_position.x(), center_position.y());
|
|
|
++ selected_color_ =
|
|
|
++ screen_capturer_->GetColor(center_position.x(), center_position.y());
|
|
|
+
|
|
|
+ // Paint grid.
|
|
|
+ cc::PaintFlags flags;
|