168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_FAST_SHOW_PICKLER_H_
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_FAST_SHOW_PICKLER_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <string>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/pickle.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/app_list/app_list_model.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Functions for pickling/unpickling AppListModel for fast show. Fast show is
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// where the app list is put on the screen using data retrieved from a cache
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// before the extension system has loaded.
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class FastShowPickler {
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // The version that this pickler understands.
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  static const int kVersion;
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Pickles a subset of the data in |model| that is useful for doing a fast
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // show of the app list.
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  static scoped_ptr<Pickle> PickleAppListModelForFastShow(
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      app_list::AppListModel* model);
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Given a Pickle created by PickleAppListModelForFastShow(), this creates an
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // AppListModel that represents it.
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  static scoped_ptr<app_list::AppListModel> UnpickleAppListModelForFastShow(
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      Pickle* pickle);
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Copies parts that are needed to show the app list quickly on startup from
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // |src| to |dest|.
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  static void CopyOver(
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      app_list::AppListModel* src, app_list::AppListModel* dest);
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Private static methods allow friend access to AppListItem methods.
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static scoped_ptr<app_list::AppListItem> UnpickleAppListItem(
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      PickleIterator* it);
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static bool PickleAppListItem(Pickle* pickle, app_list::AppListItem* item);
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static void CopyOverItem(app_list::AppListItem* src_item,
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           app_list::AppListItem* dest_item);
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_APP_LIST_FAST_SHOW_PICKLER_H_
47