1// Copyright (c) 2011 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#pragma once
8
9#include <string>
10
11#include "base/string16.h"
12#include "base/values.h"
13#include "chrome/browser/sync/profile_sync_service.h"
14
15class Browser;
16class Profile;
17class ListValue;
18class DictionaryValue;
19
20// Utility functions to gather current sync status information from the sync
21// service and constructs messages suitable for showing in UI.
22namespace sync_ui_util {
23
24enum MessageType {
25  PRE_SYNCED,  // User has not set up sync.
26  SYNCED,      // We are synced and authenticated to a gmail account.
27  SYNC_ERROR,  // A sync error (such as invalid credentials) has occurred.
28  SYNC_PROMO,  // A situation has occurred which should be brought to the user's
29               // attention, but not as an error.
30};
31
32// TODO(akalin): audit the use of ProfileSyncService* service below,
33// and use const ProfileSyncService& service where possible.
34
35// Create status and link labels for the current status labels and link text
36// by querying |service|.
37MessageType GetStatusLabels(ProfileSyncService* service,
38                            string16* status_label,
39                            string16* link_label);
40
41// Same as above but for use specifically on the New Tab Page.
42MessageType GetStatusLabelsForNewTabPage(ProfileSyncService* service,
43                                         string16* status_label,
44                                         string16* link_label);
45
46MessageType GetStatus(ProfileSyncService* service);
47
48// Determines whether or not the sync error button should be visible.
49bool ShouldShowSyncErrorButton(ProfileSyncService* service);
50
51// Returns a string with the synchronization status.
52string16 GetSyncMenuLabel(ProfileSyncService* service);
53
54// Open the appropriate sync dialog for the given profile (which can be
55// incognito). |browser| is the browser window that should be used if the UI
56// is in-window (i.e., WebUI). |code| should be one of the START_FROM_* codes.
57void OpenSyncMyBookmarksDialog(Profile* profile,
58                               Browser* browser,
59                               ProfileSyncService::SyncEventCodes code);
60
61void AddBoolSyncDetail(ListValue* details,
62                       const std::string& stat_name,
63                       bool stat_value);
64
65// |service| can be NULL.
66void ConstructAboutInformation(ProfileSyncService* service,
67                               DictionaryValue* strings);
68
69void AddIntSyncDetail(ListValue* details,
70                      const std::string& stat_name,
71                      int64 stat_value);
72}  // namespace sync_ui_util
73#endif  // CHROME_BROWSER_SYNC_SYNC_UI_UTIL_H_
74