File: template_url_table_model.h

package info (click to toggle)
chromium 140.0.7339.127-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,201,772 kB
  • sloc: cpp: 35,093,800; ansic: 7,161,670; javascript: 4,199,694; python: 1,441,798; asm: 949,904; xml: 747,503; pascal: 187,748; perl: 88,691; sh: 88,248; objc: 79,953; sql: 52,714; cs: 44,599; fortran: 24,137; makefile: 22,119; tcl: 15,277; php: 13,980; yacc: 9,000; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (157 lines) | stat: -rw-r--r-- 5,561 bytes parent folder | download | duplicates (4)
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Copyright 2012 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_UI_SEARCH_ENGINES_TEMPLATE_URL_TABLE_MODEL_H_
#define CHROME_BROWSER_UI_SEARCH_ENGINES_TEMPLATE_URL_TABLE_MODEL_H_

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

#include "base/i18n/string_compare.h"
#include "base/memory/raw_ptr.h"
#include "components/search_engines/template_url_service_observer.h"
#include "ui/base/models/table_model.h"

class TemplateURL;
class TemplateURLService;

namespace search_engines {
enum class ChoiceMadeLocation;
}

namespace internal {

// Allows sorting site search engines by group (either created by the
// SiteSearchSettings policy, or not created by policy) and alphabetically
// inside each group.
//
// Alphabetical comparison is case-insensitive according to the current locale.
// In case of loading errors for ICU, fallback to regular string comparison.
class OrderByManagedAndAlphabetically {
 public:
  OrderByManagedAndAlphabetically();
  OrderByManagedAndAlphabetically(const OrderByManagedAndAlphabetically& other);
  ~OrderByManagedAndAlphabetically();

  bool operator()(const TemplateURL* lhs, const TemplateURL* rhs) const;

  // Exposed for testing
  std::string GetShortNameSortKey(const std::u16string& short_name) const;

 private:
  std::unique_ptr<icu::Collator> collator_;
};

}  // namespace internal

// TemplateURLTableModel is the TableModel implementation used by
// KeywordEditorView to show the keywords in a TableView.
//
// TemplateURLTableModel has two columns, the first showing the description,
// the second the keyword.
//
// TemplateURLTableModel maintains a vector of TemplateURLs. The entries in the
// model are sorted such that non-generated keywords appear first (grouped
// together) and are followed by generated keywords.

class TemplateURLTableModel : public ui::TableModel,
                              TemplateURLServiceObserver {
 public:
  TemplateURLTableModel(TemplateURLService* template_url_service,
                        bool ai_mode_enabled);

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

  ~TemplateURLTableModel() override;

  // Reloads the entries from the TemplateURLService. This should ONLY be
  // invoked if the TemplateURLService wasn't initially loaded and has been
  // loaded.
  void Reload();

  // ui::TableModel overrides.
  size_t RowCount() override;
  std::u16string GetText(size_t row, int column) override;
  void SetObserver(ui::TableModelObserver* observer) override;

  // Removes the entry at the specified index.
  void Remove(size_t index);

  // Adds a new entry at the specified index.
  void Add(size_t index,
           const std::u16string& short_name,
           const std::u16string& keyword,
           const std::string& url);

  // Update the entry at the specified index.
  void ModifyTemplateURL(size_t index,
                         const std::u16string& title,
                         const std::u16string& keyword,
                         const std::string& url);

  // Reloads the icon at the specified index.
  void ReloadIcon(size_t index);

  // Returns the TemplateURL at the specified index.
  TemplateURL* GetTemplateURL(size_t index);

  // Returns the index of the TemplateURL, or nullopt if it the TemplateURL is
  // not found.
  std::optional<size_t> IndexOfTemplateURL(const TemplateURL* template_url);

  // Make the TemplateURL at |index| the default.  Returns the new index, or -1
  // if the index is invalid or it is already the default.
  void MakeDefaultTemplateURL(
      size_t index,
      search_engines::ChoiceMadeLocation choice_location);

  // Activates the TemplateURL at the specified index if `is_active` is true and
  // deactivates if false. When the TemplateURL is active, it can be invoked by
  // keyword via the omnibox.
  void SetIsActiveTemplateURL(size_t index, bool is_active);

  // Returns the index of the last entry shown in the search engines group.
  size_t last_search_engine_index() const { return last_search_engine_index_; }

  // Returns the index of the last entry shown in the active search engines
  // group.
  size_t last_active_engine_index() const { return last_active_engine_index_; }

  // Returns the index of the last entry shown in the other search engines
  // group.
  size_t last_other_engine_index() const { return last_other_engine_index_; }

 private:
  // TemplateURLServiceObserver notification.
  void OnTemplateURLServiceChanged() override;

  raw_ptr<ui::TableModelObserver> observer_;

  // The entries.
  std::vector<raw_ptr<TemplateURL, VectorExperimental>> entries_;

  // The model we're displaying entries from.
  raw_ptr<TemplateURLService> template_url_service_;

  // Index of the last search engine in entries_. This is used to determine the
  // group boundaries.
  size_t last_search_engine_index_;

  // Index of the last active engine in entries_. Engines are active if they've
  // been used or manually added/modified by the user. This is used to determine
  // the group boundaries.
  size_t last_active_engine_index_;

  // Index of the last other engine in entries_. This is used to determine the
  // group boundaries.
  size_t last_other_engine_index_;

  // Whether to show the @aimode keyword. This depends on user eligibility.
  bool ai_mode_enabled_;
};

#endif  // CHROME_BROWSER_UI_SEARCH_ENGINES_TEMPLATE_URL_TABLE_MODEL_H_