File: taskbar_manager.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 (73 lines) | stat: -rw-r--r-- 2,903 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
// Copyright 2025 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_WIN_TASKBAR_MANAGER_H_
#define CHROME_BROWSER_WIN_TASKBAR_MANAGER_H_

#include <string>

#include "base/functional/callback_forward.h"

namespace browser_util {

using PinResultCallback = base::OnceCallback<void(bool)>;

// Functions to pin an icon for a Chrome window to the Windows taskbar, and to
// check if Chrome should offer to pin. These functions do most of their work on
// a background thread, but have to finish the work on the UI thread.
// The result callback will be called from the thread that called them.

// `callback` is called with true if pinning is supported, and the app is not
// currently pinned to the taskbar, false otherwise. There must be a shortcut
// with `app_user_model_id` in the start menu for pinning to be supported.
void ShouldOfferToPin(const std::wstring& app_user_model_id,
                      PinResultCallback callback);

// Pins a Chrome window to the taskbar. `app_user_model_id` is the AUMI for
// the window to pin. The user should have requested this window be pinned,
// per the Microsoft limited feature access request form.
// There must be a shortcut in the Start Menu folder with the same AUMI.
// It uses the Windows TaskbarManager method `RequestPinCurrentAppAsync`, which
// will confirm that the user wishes to pin the window to the taskbar.
void PinAppToTaskbar(const std::wstring& app_user_model_id,
                     PinResultCallback callback);

// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused. These values are recorded both for
// determining if Chrome can be pinned to the taskbar, and if an attempt was
// made to pin Chrome to the taskbar. Public for testing.
enum class PinResultMetric {
  // Shortcut was pinned, or we successfully determined if we should pin.
  kSuccess = 0,

  // `PinLimitedAccessFeatureAvailable` returned false.
  kFeatureNotAvailable = 1,

  // There are a number of COM calls that can fail. This is unexpected.
  kCOMError = 2,

  // Error calling ITaskbarManager method.
  kTaskbarManagerError = 3,

  // Error posting async results.
  kPostAsyncResultsFailed = 4,

  // `get_IsPinningAllowed` false. This could be because there is no shortcut to
  // the app in the start menu, or some other Windows criteria for app pinning
  // has not been met.
  kPinningNotAllowed = 5,

  // Chrome already pinned to taskbar.
  kAlreadyPinned = 6,

  // Successfully called RequestPinCurrentAppAsync and the request failed.
  // This could be because the user rejected the Windows confirmation, or some
  // other internal failure.
  kPinCurrentAppFailed = 7,
  kMaxValue = kPinCurrentAppFailed,
};

}  // namespace browser_util

#endif  // CHROME_BROWSER_WIN_TASKBAR_MANAGER_H_