1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_SYNC_UI_UTIL_H_
6#define CHROME_BROWSER_SYNC_SYNC_UI_UTIL_H_
7
8#include "base/strings/string16.h"
9
10class ProfileSyncService;
11class SigninManagerBase;
12
13// Utility functions to gather current sync status information from the sync
14// service and constructs messages suitable for showing in UI.
15namespace sync_ui_util {
16
17enum MessageType {
18  PRE_SYNCED,  // User has not set up sync.
19  SYNCED,      // We are synced and authenticated to a gmail account.
20  SYNC_ERROR,  // A sync error (such as invalid credentials) has occurred.
21  SYNC_PROMO,  // A situation has occurred which should be brought to the user's
22               // attention, but not as an error.
23};
24
25enum StatusLabelStyle {
26  PLAIN_TEXT,  // Label will be plain-text only.
27  WITH_HTML    // Label may contain an HTML-formatted link.
28};
29
30// TODO(akalin): audit the use of ProfileSyncService* service below,
31// and use const ProfileSyncService& service where possible.
32
33// Create status and link labels for the current status labels and link text
34// by querying |service|.
35// |style| sets the link properties, see |StatusLabelStyle|.
36MessageType GetStatusLabels(ProfileSyncService* service,
37                            const SigninManagerBase& signin,
38                            StatusLabelStyle style,
39                            base::string16* status_label,
40                            base::string16* link_label);
41
42// Same as above but for use specifically on the New Tab Page.
43// |status_label| may contain an HTML-formatted link.
44MessageType GetStatusLabelsForNewTabPage(ProfileSyncService* service,
45                                         const SigninManagerBase& signin,
46                                         base::string16* status_label,
47                                         base::string16* link_label);
48
49// Gets various labels for the sync global error based on the sync error state.
50// |menu_item_label|, |bubble_message|, and |bubble_accept_label| must not be
51// NULL. Note that we don't use SyncGlobalError on Chrome OS.
52#if !defined(OS_CHROMEOS)
53void GetStatusLabelsForSyncGlobalError(const ProfileSyncService* service,
54                                       base::string16* menu_item_label,
55                                       base::string16* bubble_message,
56                                       base::string16* bubble_accept_label);
57#endif
58
59MessageType GetStatus(ProfileSyncService* service,
60                      const SigninManagerBase& signin);
61
62}  // namespace sync_ui_util
63#endif  // CHROME_BROWSER_SYNC_SYNC_UI_UTIL_H_
64