File: chrome_navigation_ui_data.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 (130 lines) | stat: -rw-r--r-- 5,225 bytes parent folder | download | duplicates (5)
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
// Copyright 2016 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_RENDERER_HOST_CHROME_NAVIGATION_UI_DATA_H_
#define CHROME_BROWSER_RENDERER_HOST_CHROME_NAVIGATION_UI_DATA_H_

#include <memory>
#include <optional>
#include <string>

#include "components/offline_pages/buildflags/buildflags.h"
#include "components/offline_pages/core/request_header/offline_page_navigation_ui_data.h"
#include "content/public/browser/navigation_ui_data.h"
#include "extensions/buildflags/buildflags.h"

#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/browser/extension_navigation_ui_data.h"
#endif

namespace content {
class NavigationHandle;
class WebContents;
}

// Contains data that is passed from the UI thread to the IO thread at the
// beginning of each navigation. The class is instantiated on the UI thread,
// then a copy created using Clone is passed to the content::ResourceRequestInfo
// on the IO thread.
class ChromeNavigationUIData : public content::NavigationUIData {
 public:
  ChromeNavigationUIData();
  explicit ChromeNavigationUIData(content::NavigationHandle* navigation_handle);

  ChromeNavigationUIData(const ChromeNavigationUIData&) = delete;
  ChromeNavigationUIData& operator=(const ChromeNavigationUIData&) = delete;

  ~ChromeNavigationUIData() override;

  // Creates an instance of ChromeNavigationUIData associated with the given
  // |web_contents|.
  // If |is_using_https_as_default_scheme|, this is a typed main frame
  // navigation where the omnibox used HTTPS as the default URL scheme because
  // the user didn't type a scheme (e.g. they entered "example.com" and we
  // are navigating to https://example.com).
  static std::unique_ptr<ChromeNavigationUIData> CreateForMainFrameNavigation(
      content::WebContents* web_contents,
      bool is_using_https_as_default_scheme,
      bool force_no_https_upgrade);

  // Creates a new ChromeNavigationUIData that is a deep copy of the original.
  // Any changes to the original after the clone is created will not be
  // reflected in the clone.  All owned data members are deep copied.
  std::unique_ptr<content::NavigationUIData> Clone() override;

#if BUILDFLAG(ENABLE_EXTENSIONS)
  void SetExtensionNavigationUIData(
      std::unique_ptr<extensions::ExtensionNavigationUIData> extension_data);

  extensions::ExtensionNavigationUIData* GetExtensionNavigationUIData() const {
    return extension_data_.get();
  }
#endif

#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
  void SetOfflinePageNavigationUIData(
      std::unique_ptr<offline_pages::OfflinePageNavigationUIData>
          offline_page_data);

  offline_pages::OfflinePageNavigationUIData* GetOfflinePageNavigationUIData()
      const {
    return offline_page_data_.get();
  }
#endif
  bool is_no_state_prefetching() const { return is_no_state_prefetching_; }
  bool is_using_https_as_default_scheme() const {
    return is_using_https_as_default_scheme_;
  }
  bool force_no_https_upgrade() const { return force_no_https_upgrade_; }

  std::optional<int64_t> bookmark_id() { return bookmark_id_; }
  void set_bookmark_id(std::optional<int64_t> id) { bookmark_id_ = id; }

  bool navigation_initiated_from_sync() {
    return navigation_initiated_from_sync_;
  }
  void set_navigation_initiated_from_sync(bool navigation_initiated_from_sync) {
    navigation_initiated_from_sync_ = navigation_initiated_from_sync;
  }

 private:
#if BUILDFLAG(ENABLE_EXTENSIONS)
  // Manages the lifetime of optional ExtensionNavigationUIData information.
  std::unique_ptr<extensions::ExtensionNavigationUIData> extension_data_;
#endif

#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
  // Manages the lifetime of optional OfflinePageNavigationUIData information.
  std::unique_ptr<offline_pages::OfflinePageNavigationUIData>
      offline_page_data_;
#endif

  bool is_no_state_prefetching_ = false;

  // True if the navigation was initiated by typing in the omnibox but the typed
  // text didn't have a scheme such as http or https (e.g. google.com), and
  // https was used as the default scheme for the navigation. This is used by
  // TypedNavigationUpgradeThrottle to determine if the navigation should be
  // observed and fall back to using http scheme if necessary.
  bool is_using_https_as_default_scheme_ = false;

  // True if the navigation should be excluded from HTTPS upgrades.
  // This can happen in the following cases:
  // - the navigatioon was initiated by typing in the omnibox, and the
  // typed text had an explicit http scheme.
  // - the navigation was initiated as a captive portal login.
  bool force_no_https_upgrade_ = false;

  // Id of the bookmark which started this navigation.
  std::optional<int64_t> bookmark_id_ = std::nullopt;

  // True if the navigation was initiated in response to a sync message. This is
  // used in tab group sync to identify the sync initiated navigations and
  // blocking them from sending back to sync which would otherwise cause
  // ping-pong issue. They will still be allowed to load locally like a normal
  // navigation.
  bool navigation_initiated_from_sync_ = false;
};

#endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_NAVIGATION_UI_DATA_H_