pinned_tab_codec.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// Use of this source code is governed by a BSD-style license that can be
3f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// found in the LICENSE file.
4f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
5f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang#ifndef CHROME_BROWSER_UI_TABS_PINNED_TAB_CODEC_H_
6f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang#define CHROME_BROWSER_UI_TABS_PINNED_TAB_CODEC_H_
7f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
8f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang#include <vector>
9f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
101fdb08e5fc427b54b54214e3b3fbdda73d369f4dDavid Mosberger-Tang#include "chrome/browser/ui/startup/startup_tab.h"
11f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang#include "url/gurl.h"
123842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz
133842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzclass Profile;
143842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz
153842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitznamespace base {
163842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzclass Value;
173842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz}
186a5da54b8ac724fc68001a1e07430d910d9e8141Tommi Rantala
196a5da54b8ac724fc68001a1e07430d910d9e8141Tommi Rantalanamespace user_prefs {
20ee8df2628891435ebb95eee04668d5bbd6995723Tommi Rantalaclass PrefRegistrySyncable;
211fdb08e5fc427b54b54214e3b3fbdda73d369f4dDavid Mosberger-Tang}
226a5da54b8ac724fc68001a1e07430d910d9e8141Tommi Rantala
231fdb08e5fc427b54b54214e3b3fbdda73d369f4dDavid Mosberger-Tang// PinnedTabCodec is used to read and write the set of pinned tabs to
246a5da54b8ac724fc68001a1e07430d910d9e8141Tommi Rantala// preferences. When Chrome exits the sets of pinned tabs are written to prefs.
25f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// On startup if the user has not chosen to restore the last session the set of
26f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// pinned tabs is opened.
27f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang//
28f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// The entries are stored in preferences as a list of dictionaries, with each
29f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang// dictionary describing the entry.
30f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tangclass PinnedTabCodec {
313842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz public:
32f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  // Registers the preference used by this class.
33f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
34f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
35f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  // Resets the preferences state.
36f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  static void WritePinnedTabs(Profile* profile);
37f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
38f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  // Sets the preferences state from the specified tab list.
39f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  static void WritePinnedTabs(Profile* profile, const StartupTabs& tabs);
40f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
41f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  // Reads and returns the set of pinned tabs to restore from preferences.
42f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  static StartupTabs ReadPinnedTabs(Profile* profile);
433842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz  static StartupTabs ReadPinnedTabs(const base::Value* value);
44f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
45f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang private:
46f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  PinnedTabCodec();
47f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang  ~PinnedTabCodec();
48f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
493842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz  DISALLOW_COPY_AND_ASSIGN(PinnedTabCodec);
50f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang};
51f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang
52f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang#endif  // CHROME_BROWSER_UI_TABS_PINNED_TAB_CODEC_H_
53f176ad6fc6d4982e92c330265b00419e93b79f27David Mosberger-Tang