File: lens_region_search_controller.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (135 lines) | stat: -rw-r--r-- 5,451 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_LENS_REGION_SEARCH_LENS_REGION_SEARCH_CONTROLLER_H_
#define CHROME_BROWSER_LENS_REGION_SEARCH_LENS_REGION_SEARCH_CONTROLLER_H_

#include "base/memory/raw_ptr.h"
#include "base/supports_user_data.h"
#include "chrome/browser/image_editor/screenshot_flow.h"
#include "components/lens/lens_metrics.h"
#include "content/public/browser/web_contents_observer.h"
#include "ui/gfx/image/image.h"
#include "ui/views/widget/widget.h"

namespace content {
class WebContents;
enum class Visibility;
}  // namespace content

namespace views {
class Widget;
}  // namespace views

namespace lens {

class LensRegionSearchController : public content::WebContentsObserver {
 public:
  LensRegionSearchController();
  ~LensRegionSearchController() override;

  // Creates and runs the drag and capture flow. When run, the user enters into
  // a screenshot capture mode with the ability to draw a rectagular region
  // around the web contents. When finished with selection, the region is
  // converted into a PNG and sent to Lens. If `use_fullscreen_capture` is set
  // to true, the whole screen will automatically be captured.
  void Start(content::WebContents* web_contents,
             bool use_fullscreen_capture,
             bool is_google_default_search_provider,
             lens::AmbientSearchEntryPoint entry_point);

  // Closes the UI overlay and user education bubble if currently being shown.
  // The closed reason for this method is defaulted to the close button being
  // clicked.
  void Close();
  void Escape();

  // Closes the UI overlay and user education bubble if shown with the specified
  // closed reason.
  void CloseWithReason(views::Widget::ClosedReason reason);

  // Calculates the percentage that the image area takes up in the screen area.
  // This value is calculated as double and then floored to the nearest integer.
  static int CalculateViewportProportionFromAreas(int screen_height,
                                                  int screen_width,
                                                  int image_width,
                                                  int image_height);
  // Returns an enum representing the aspect ratio of the image as defined in
  // lens_metrics.h.
  static lens::LensRegionSearchAspectRatio GetAspectRatioFromSize(
      int image_height,
      int image_width);

  // content::WebContentsObserver:
  void WebContentsDestroyed() override;
  void OnVisibilityChanged(content::Visibility visibility) override;

  // The function handling the metrics recording and resizing that happens when
  // the capture has been completed.
  void OnCaptureCompleted(const image_editor::ScreenshotCaptureResult& result);

  // Returns whether the overlay and instruction bubble are both visible. If
  // either of the UI elements is not visible, returns false.
  bool IsOverlayUIVisibleForTesting();
  void SetEntryPointForTesting(lens::AmbientSearchEntryPoint entry_point);

  // Sets the web contents for unit tests that do not launch the region search
  // UI.
  void SetWebContentsForTesting(content::WebContents* web_contents);

 private:
  void RecordCaptureResult(lens::LensRegionSearchCaptureResult result);

  void RecordRegionSizeRelatedMetrics(gfx::Rect screen_bounds,
                                      gfx::Size region_size);

  // Variable for tracking the default search provider as to launch the image
  // results in correct search engine. This value is set every time the capture
  // mode is started to have an accurate value for the completed capture.
  bool is_google_default_search_provider_ = false;

  // Variable for tracking whether the region search request originated from the
  // companion.
  lens::AmbientSearchEntryPoint entry_point_;

  bool in_capture_mode_ = false;

  std::unique_ptr<image_editor::ScreenshotFlow> screenshot_flow_;

  raw_ptr<views::Widget> bubble_widget_ = nullptr;

  base::WeakPtr<LensRegionSearchController> weak_this_;

  base::WeakPtrFactory<LensRegionSearchController> weak_factory_{this};
};

// Class to associate region search controller data with Profile across
// navigation. Used to support region search via keyboard shortcut.
class LensRegionSearchControllerData : public base::SupportsUserData::Data {
 public:
  LensRegionSearchControllerData();
  ~LensRegionSearchControllerData() override;
  LensRegionSearchControllerData(const LensRegionSearchControllerData&) =
      delete;
  LensRegionSearchControllerData& operator=(
      const LensRegionSearchControllerData&) = delete;

  static constexpr char kDataKey[] = "lens_region_search_controller_data";
  std::unique_ptr<LensRegionSearchController> lens_region_search_controller;
};

// Class to associate region search captured data with Profile across
// navigation. Used to support region search on a static WebUI page.
class RegionSearchCapturedData : public base::SupportsUserData::Data {
 public:
  RegionSearchCapturedData();
  ~RegionSearchCapturedData() override;
  RegionSearchCapturedData(const RegionSearchCapturedData&) = delete;
  RegionSearchCapturedData& operator=(const RegionSearchCapturedData&) = delete;

  static constexpr char kDataKey[] = "region_search_data";
  gfx::Image image;
};
}  // namespace lens
#endif  // CHROME_BROWSER_LENS_REGION_SEARCH_LENS_REGION_SEARCH_CONTROLLER_H_