Home | History | Annotate | Download | only in printing
      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 
     13 template<typename T> struct DefaultSingletonTraits;
     14 
     15 class PrintPreviewDataStore;
     16 
     17 namespace base {
     18 class 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.
     23 class 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