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_PRINTING_PRINT_PREVIEW_DATA_SERVICE_H_
6#define CHROME_BROWSER_PRINTING_PRINT_PREVIEW_DATA_SERVICE_H_
7
8#include <map>
9#include <string>
10
11#include "base/memory/ref_counted.h"
12
13template<typename T> struct DefaultSingletonTraits;
14
15class PrintPreviewDataStore;
16
17namespace base {
18class RefCountedBytes;
19}
20
21// PrintPreviewDataService manages data stores for chrome://print requests.
22// It owns the data store object and is responsible for freeing it.
23class PrintPreviewDataService {
24 public:
25  static PrintPreviewDataService* GetInstance();
26
27  // Get the data entry from PrintPreviewDataStore. |index| is zero-based or
28  // |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to represent complete preview
29  // data. Use |index| to retrieve a specific preview page data. |data| is set
30  // to NULL if the requested page is not yet available.
31  void GetDataEntry(int32 preview_ui_id, int index,
32                    scoped_refptr<base::RefCountedBytes>* data);
33
34  // Set/Update the data entry in PrintPreviewDataStore. |index| is zero-based
35  // or |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to represent complete
36  // preview data. Use |index| to set/update a specific preview page data.
37  // NOTE: PrintPreviewDataStore owns the data. Do not refcount |data| before
38  // calling this function. It will be refcounted in PrintPreviewDataStore.
39  void SetDataEntry(int32 preview_ui_id, int index,
40                    const base::RefCountedBytes* data);
41
42  // Remove the corresponding PrintPreviewUI entry from the map.
43  void RemoveEntry(int32 preview_ui_id);
44
45  // Returns the available draft page count.
46  int GetAvailableDraftPageCount(int32 preview_ui_id);
47
48 private:
49  friend struct DefaultSingletonTraits<PrintPreviewDataService>;
50
51  // 1:1 relationship between PrintPreviewUI and data store object.
52  // Key: PrintPreviewUI ID.
53  // Value: Print preview data store object.
54  typedef std::map<int32, scoped_refptr<PrintPreviewDataStore> >
55      PreviewDataStoreMap;
56
57  PrintPreviewDataService();
58  virtual ~PrintPreviewDataService();
59
60  PreviewDataStoreMap data_store_map_;
61
62  DISALLOW_COPY_AND_ASSIGN(PrintPreviewDataService);
63};
64
65#endif  // CHROME_BROWSER_PRINTING_PRINT_PREVIEW_DATA_SERVICE_H_
66