File: web_contents_view_drag_security_info.h

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (63 lines) | stat: -rw-r--r-- 2,519 bytes parent folder | download | duplicates (8)
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
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_DRAG_SECURITY_INFO_H_
#define CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_DRAG_SECURITY_INFO_H_

#include "content/browser/site_instance_group.h"

namespace content {

struct DropData;
class RenderWidgetHostImpl;

// Used to track security-salient details about a drag source. This class is to
// be owned by a WebContentsView indirectly via the Aura or Mac impls. Because
// the security concerns that it addresses are those that arise when the
// WebContentsView that initiated the drag is also the target of that drag, this
// class's main question is "is the WebContentsView that is receiving the drag
// the same one that initiated that drag?" The answer to that question may be
// directly obtained via `did_initiate()`, and that answer will affect every
// other member function's return value.
class WebContentsViewDragSecurityInfo {
 public:
  WebContentsViewDragSecurityInfo();
  ~WebContentsViewDragSecurityInfo();

  // Calls to be made by the owner to indicate that it has initiated or ended a
  // drag.
  void OnDragInitiated(RenderWidgetHostImpl* source_rwh,
                       const DropData& drop_data);
  void OnDragEnded();

  // Returns true iff the current drag was initiated by this WebContentsView.
  // This will be false for drags originating from other WebContentsViews or
  // from outside of the browser, as well as if there is no current drag.
  bool did_initiate() const { return did_initiate_; }

  // Returns whether the image on the drag is accessible. See
  // https://crbug.com/1264873.
  bool IsImageAccessibleFromFrame() const;

  // Returns whether `target_rwh` is a valid RenderWidgetHost to be dragging
  // over. This enforces that same-page, cross-site drags are not allowed. See
  // https://crbug.com/666858, https://crbug.com/1266953,
  // https://crbug.com/1485266.
  bool IsValidDragTarget(RenderWidgetHostImpl* target_rwh) const;

 private:
  // See `did_initiate()`, above.
  bool did_initiate_ = false;

  // The site instance of the drag origin.
  SiteInstanceGroupId site_instance_group_id_;

  // A boolean to hold the accessibility value retrieved from the `DropData`.
  // See https://crbug.com/1264873.
  bool image_accessible_from_frame_ = true;
};

}  // namespace content

#endif  // CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_DRAG_SECURITY_INFO_H_