Index: chrome/browser/ui/webui/print_preview_data_source.h |
diff --git a/chrome/browser/ui/webui/print_preview_data_source.h b/chrome/browser/ui/webui/print_preview_data_source.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8d8a154b0988e33befb410be2c2f8df2f64c41f3 |
--- /dev/null |
+++ b/chrome/browser/ui/webui/print_preview_data_source.h |
@@ -0,0 +1,83 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_DATA_SOURCE_H_ |
+#define CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_DATA_SOURCE_H_ |
+#pragma once |
+ |
+#include <map> |
+#include <string> |
+#include <utility> |
+ |
+#include "chrome/browser/ui/webui/chrome_url_data_manager.h" |
+ |
+template<typename T> struct LeakySingletonTraits; |
+ |
+class PrintPreviewUI; |
+ |
+namespace base { |
+class SharedMemory; |
+} |
+ |
+// PrintPreviewDataSource serves data for chrome://print requests. |
+// |
+// PrintPreviewDataSource owns the data and is responsible for freeing it when |
+// either: |
+// a) there is a new data. |
+// b) When PrintPreviewDataSource is destroyed. |
+// |
+// The format for requesting data is as follows: |
+// chrome://print/print.pdf/<PrintPreviewUIAddrStr> |
+// |
+// Parameters (< > required): |
+// <PrintPreviewUIAddrStr> = Print preview UI identifier. |
+// |
+// Example: |
+// chrome://print/print.pdf/0x7f5470fbe510 |
+ |
+class PrintPreviewDataSource : public ChromeURLDataManager::DataSource { |
+ public: |
+ // A SharedMemory that contains the data for print preview, |
+ // and the size of the print preview data in bytes. |
+ typedef std::pair<base::SharedMemory*, uint32> PrintPreviewData; |
sky
2011/05/25 20:57:35
To make lifetime management easier, could this tak
kmadhusu
2011/05/25 23:45:21
I understand your concern. Just to be consistent w
sky
2011/05/26 17:40:41
Shouldn't you be striving for less error prone cod
|
+ |
+ typedef std::string PreviewUIAddrStr; |
+ |
+ // 1:1 relationship between PrintPreviewUI and preview data. |
+ // Key: Print preview UI address string. |
+ // Value: Preview data. |
+ typedef std::map<PreviewUIAddrStr, PrintPreviewData> PreviewDataSrcMap; |
+ |
+ // Getter for the singleton. |
+ static PrintPreviewDataSource* GetInstance(); |
sky
2011/05/25 20:57:35
nit: constructor/destructor before static methods.
kmadhusu
2011/05/25 23:45:21
Done.
|
+ |
+ PrintPreviewDataSource(); |
sky
2011/05/25 20:57:35
Is it possible to make the constructor private?
kmadhusu
2011/05/25 23:45:21
Since I am using "LeakySingleTonTraits", it needs
|
+ virtual ~PrintPreviewDataSource(); |
+ |
+ // Remove the corresponding PrintPreviewUI entry from the map. |
+ void RemoveEntry(const PreviewUIAddrStr& preview_ui_addr_str); |
+ |
+ // Set/Update the data entry in PreviewDataSrcMap. |
+ void SetDataEntry(const PreviewUIAddrStr& preview_ui_addr_str, |
+ const PrintPreviewData& data); |
+ |
+ // Get the data entry from PreviewDataSrcMap. |
+ void GetDataEntry(const PreviewUIAddrStr& preview_ui_addr_str, |
+ PrintPreviewData* data); |
+ |
+ // ChromeURLDataManager::DataSource implementation. |
+ virtual void StartDataRequest(const std::string& path, |
sky
2011/05/25 20:57:35
nit: Use OVERRIDE here and 73.
kmadhusu
2011/05/25 23:45:21
Done.
|
+ bool is_incognito, |
+ int request_id); |
+ virtual std::string GetMimeType(const std::string& path) const; |
+ |
+ private: |
+ friend struct LeakySingletonTraits<PrintPreviewDataSource>; |
+ |
+ PreviewDataSrcMap data_source_map_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PrintPreviewDataSource); |
+}; |
+ |
+#endif // CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_DATA_SOURCE_H_ |