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_UI_TABS_PINNED_TAB_CODEC_H_
6#define CHROME_BROWSER_UI_TABS_PINNED_TAB_CODEC_H_
7
8#include <vector>
9
10#include "chrome/browser/ui/startup/startup_tab.h"
11#include "url/gurl.h"
12
13class Profile;
14
15namespace base {
16class Value;
17}
18
19namespace user_prefs {
20class PrefRegistrySyncable;
21}
22
23// PinnedTabCodec is used to read and write the set of pinned tabs to
24// preferences. When Chrome exits the sets of pinned tabs are written to prefs.
25// On startup if the user has not chosen to restore the last session the set of
26// pinned tabs is opened.
27//
28// The entries are stored in preferences as a list of dictionaries, with each
29// dictionary describing the entry.
30class PinnedTabCodec {
31 public:
32  // Registers the preference used by this class.
33  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
34
35  // Resets the preferences state.
36  static void WritePinnedTabs(Profile* profile);
37
38  // Sets the preferences state from the specified tab list.
39  static void WritePinnedTabs(Profile* profile, const StartupTabs& tabs);
40
41  // Reads and returns the set of pinned tabs to restore from preferences.
42  static StartupTabs ReadPinnedTabs(Profile* profile);
43  static StartupTabs ReadPinnedTabs(const base::Value* value);
44
45 private:
46  PinnedTabCodec();
47  ~PinnedTabCodec();
48
49  DISALLOW_COPY_AND_ASSIGN(PinnedTabCodec);
50};
51
52#endif  // CHROME_BROWSER_UI_TABS_PINNED_TAB_CODEC_H_
53