File: shortcut.cc

package info (click to toggle)
chromium 139.0.7258.127-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 6,122,156 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 (99 lines) | stat: -rw-r--r-- 3,275 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
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/services/app_service/public/cpp/shortcut/shortcut.h"

#include <memory>
#include <sstream>

#include "base/check.h"
#include "base/strings/strcat.h"
#include "components/app_constants/constants.h"
#include "components/crx_file/id_util.h"

namespace apps {

std::ostream& operator<<(std::ostream& os, ShortcutSource v) {
  switch (v) {
    case ShortcutSource::kUnknown:
      return os << "ShortcutSource::kUnknown";
    case ShortcutSource::kUser:
      return os << "ShortcutSource::kUser";
    case ShortcutSource::kPolicy:
      return os << "ShortcutSource::kPolicy";
    case ShortcutSource::kDefault:
      return os << "ShortcutSource::kDefault";
  }

  // Just in case, where the value comes from outside of the chrome code
  // then casted without checks.
  return os << "(unknown: " << static_cast<int>(v) << ")";
}

Shortcut::Shortcut(const std::string& host_app_id, const std::string& local_id)
    : host_app_id(host_app_id),
      local_id(local_id),
      shortcut_id(GenerateShortcutId(host_app_id, local_id)) {}

Shortcut::~Shortcut() = default;

bool Shortcut::operator==(const Shortcut& rhs) const {
  return this->shortcut_id == rhs.shortcut_id &&
         this->host_app_id == rhs.host_app_id &&
         this->local_id == rhs.local_id && this->name == rhs.name &&
         this->shortcut_source == rhs.shortcut_source &&
         this->icon_key == rhs.icon_key &&
         this->allow_removal == rhs.allow_removal;
}

std::unique_ptr<Shortcut> Shortcut::Clone() const {
  auto shortcut = std::make_unique<Shortcut>(host_app_id, local_id);

  shortcut->name = name;
  shortcut->shortcut_source = shortcut_source;
  if (icon_key.has_value()) {
    shortcut->icon_key = std::move(*icon_key->Clone());
  }
  shortcut->allow_removal = allow_removal;
  return shortcut;
}

std::string Shortcut::ToString() const {
  std::stringstream out;
  out << "shortcut_id: " << shortcut_id << std::endl;
  if (name.has_value()) {
    out << "- name: " << name.value() << std::endl;
  }
  out << "- shortcut_source: " << shortcut_source << std::endl;
  out << "- host_app_id: " << host_app_id << std::endl;
  out << "- local_id: " << local_id << std::endl;
  if (allow_removal.has_value()) {
    out << "- allow_removal: " << allow_removal.value() << std::endl;
  }
  return out.str();
}

Shortcuts CloneShortcuts(const Shortcuts& source_shortcuts) {
  Shortcuts shortcuts;
  for (const auto& shortcut : source_shortcuts) {
    DCHECK(shortcut);
    shortcuts.push_back(shortcut->Clone());
  }
  return shortcuts;
}

ShortcutId GenerateShortcutId(const std::string& host_app_id,
                              const std::string& local_id) {
  // For web app based browser shortcut, we just use the local_id
  // that is generated in the web app system, so that we can keep
  // all the launcher and shelf locations without needing to migrate the sync
  // data.
  if (host_app_id == app_constants::kChromeAppId) {
    return ShortcutId(local_id);
  }
  const std::string input = base::StrCat({host_app_id, "#", local_id});
  return ShortcutId(crx_file::id_util::GenerateId(input));
}

}  // namespace apps