1// Copyright 2013 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_BOOKMARKS_ENHANCED_BOOKMARKS_FEATURES_H_
6#define CHROME_BROWSER_BOOKMARKS_ENHANCED_BOOKMARKS_FEATURES_H_
7
8#include <string>
9
10#include "extensions/common/extension.h"
11
12namespace about_flags {
13class FlagsStorage;
14}  // namespace about_flags
15
16class PrefService;
17class Profile;
18
19// States for bookmark experiment. They are set by Chrome sync into
20// sync_driver::prefs::kEnhancedBookmarksExperimentEnabled user preference and
21// used for UMA reporting as well.
22enum BookmarksExperimentState {
23  BOOKMARKS_EXPERIMENT_NONE,
24  BOOKMARKS_EXPERIMENT_ENABLED,
25  BOOKMARKS_EXPERIMENT_ENABLED_USER_OPT_OUT,
26  BOOKMARKS_EXPERIMENT_ENABLED_FROM_FINCH,
27  BOOKMARKS_EXPERIMENT_OPT_OUT_FROM_FINCH,
28  BOOKMARKS_EXPERIMENT_ENABLED_FROM_FINCH_USER_SIGNEDIN,
29  BOOKMARKS_EXPERIMENT_ENABLED_FROM_SYNC_UNKNOWN,
30  BOOKMARKS_EXPERIMENT_ENUM_SIZE
31};
32
33// Returns true and sets |extension_id| if bookmarks experiment enabled
34//         false if no bookmark experiment or extension id is empty.
35bool GetBookmarksExperimentExtensionID(const PrefService* user_prefs,
36                                       std::string* extension_id);
37
38// Updates bookmark experiment state based on information from Chrome sync,
39// Finch experiments, and command line flag.
40void UpdateBookmarksExperimentState(
41    PrefService* user_prefs,
42    PrefService* local_state,
43    bool user_signed_in,
44    BookmarksExperimentState experiment_enabled_from_sync);
45
46// Same as UpdateBookmarksExperimentState, but the last argument with
47// BOOKMARKS_EXPERIMENT_ENABLED_FROM_SYNC_UNKNOWN.
48// Intended for performing initial configuration of bookmarks experiments
49// when the browser is first initialized.
50void InitBookmarksExperimentState(Profile* profile);
51
52// Sets flag to opt-in user into Finch experiment.
53void ForceFinchBookmarkExperimentIfNeeded(
54    PrefService* local_state,
55    BookmarksExperimentState bookmarks_experiment_state);
56
57// Returns true if enhanced bookmarks experiment is running.
58// Experiment could run by Chrome sync or by Finch.
59// Note that this doesn't necessarily mean that enhanced bookmarks
60// is enabled, e.g., user can opt out using a flag.
61bool IsEnhancedBookmarksExperimentEnabled(
62    about_flags::FlagsStorage* flags_storage);
63
64#if defined(OS_ANDROID)
65// Returns true if enhanced bookmark salient image prefetching is enabled.
66// This can be controlled by field trial.
67bool IsEnhancedBookmarkImageFetchingEnabled(const PrefService* user_prefs);
68
69// Returns true if enhanced bookmarks is enabled.
70bool IsEnhancedBookmarksEnabled(const PrefService* user_prefs);
71
72#endif
73
74// Returns true when flag enable-dom-distiller is set or enabled from Finch.
75bool IsEnableDomDistillerSet();
76
77// Returns true when flag enable-sync-articles is set or enabled from Finch.
78bool IsEnableSyncArticlesSet();
79
80#endif  // CHROME_BROWSER_BOOKMARKS_ENHANCED_BOOKMARKS_FEATURES_H_
81