Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(738)

Unified Diff: chrome/browser/ui/webui/print_preview_data_source.cc

Issue 7063030: PrintPreview: Print Preview is not staying associated with initiator renderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix win compile error Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/print_preview_data_source.cc
diff --git a/chrome/browser/ui/webui/print_preview_ui_html_source.cc b/chrome/browser/ui/webui/print_preview_data_source.cc
similarity index 75%
rename from chrome/browser/ui/webui/print_preview_ui_html_source.cc
rename to chrome/browser/ui/webui/print_preview_data_source.cc
index 7dad069677068dbf9886ed96881f6ae5c082512e..f29d94f6787f8508e6d84327fe30045a75838a9a 100644
--- a/chrome/browser/ui/webui/print_preview_ui_html_source.cc
+++ b/chrome/browser/ui/webui/print_preview_data_source.cc
@@ -2,16 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/webui/print_preview_ui_html_source.h"
+#include "chrome/browser/ui/webui/print_preview_data_source.h"
#include <algorithm>
#include <vector>
+#include "base/memory/singleton.h"
#include "base/message_loop.h"
#include "base/shared_memory.h"
#include "base/string_piece.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
+#include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h"
+#include "chrome/browser/ui/webui/print_preview_ui.h"
#include "chrome/common/jstemplate_builder.h"
#include "chrome/common/url_constants.h"
#include "grit/browser_resources.h"
@@ -110,28 +115,53 @@ void SetLocalizedStrings(DictionaryValue* localized_strings) {
} // namespace
-PrintPreviewUIHTMLSource::PrintPreviewUIHTMLSource()
- : DataSource(chrome::kChromeUIPrintHost, MessageLoop::current()),
- data_(std::make_pair(static_cast<base::SharedMemory*>(NULL), 0U)) {
+PrintPreviewDataSource::PrintPreviewDataSource()
+ : DataSource(chrome::kChromeUIPrintHost, MessageLoop::current()) {
}
-PrintPreviewUIHTMLSource::~PrintPreviewUIHTMLSource() {
- delete data_.first;
+PrintPreviewDataSource::~PrintPreviewDataSource() {
}
-void PrintPreviewUIHTMLSource::GetPrintPreviewData(PrintPreviewData* data) {
- *data = data_;
+// static
+PrintPreviewDataSource* PrintPreviewDataSource::GetInstance() {
+ // Uses the LeakySingletonTrait because the base class will do the cleanup.
+ return Singleton<PrintPreviewDataSource,
+ LeakySingletonTraits<PrintPreviewDataSource> >::get();
}
-void PrintPreviewUIHTMLSource::SetPrintPreviewData(
- const PrintPreviewData& data) {
- delete data_.first;
- data_ = data;
+void PrintPreviewDataSource::RemoveEntry(
+ const PreviewUIAddrStr& preview_ui_addr_str) {
+ PreviewDataSrcMap::iterator it = data_source_map_.find(preview_ui_addr_str);
+ if (it == data_source_map_.end())
+ return;
+
+ if (it->second.first)
+ delete it->second.first;
+ data_source_map_.erase(it);
+}
+
+void PrintPreviewDataSource::SetDataEntry(
+ const PreviewUIAddrStr& preview_ui_addr_str, const PrintPreviewData& data) {
+ RemoveEntry(preview_ui_addr_str);
+ data_source_map_[preview_ui_addr_str] = data;
}
-void PrintPreviewUIHTMLSource::StartDataRequest(const std::string& path,
- bool is_incognito,
- int request_id) {
+void PrintPreviewDataSource::GetDataEntry(
+ const PreviewUIAddrStr& preview_ui_addr_str, PrintPreviewData* data) {
+ PreviewDataSrcMap::iterator i = data_source_map_.find(preview_ui_addr_str);
Lei Zhang 2011/05/26 01:48:31 nit: name the iterator "it"
kmadhusu 2011/05/26 15:51:22 Done.
+ if (i != data_source_map_.end())
+ *data = data_source_map_[preview_ui_addr_str];
+}
+
+void PrintPreviewDataSource::StartDataRequest(const std::string& path,
+ bool is_incognito,
+ int request_id) {
+ PrintPreviewData data;
+ if (path.size() > 10 && path.substr(0, 10) == "print.pdf/") {
+ // Get the print preview data.
+ GetDataEntry(path.substr(10), &data);
Lei Zhang 2011/05/26 01:48:31 Why not just put this in the else if block below?
kmadhusu 2011/05/26 15:51:22 If data.first is null, I want to send empty_bytes
+ }
+
if (path.empty()) {
// Print Preview Index page.
DictionaryValue localized_strings;
@@ -150,10 +180,12 @@ void PrintPreviewUIHTMLSource::StartDataRequest(const std::string& path,
SendResponse(request_id, html_bytes);
return;
- } else if (path == "print.pdf" && data_.first) {
+ } else if (path.size() > 10 &&
+ path.substr(0, 10) == "print.pdf/" &&
+ data.first) {
// Print Preview data.
- char* preview_data = reinterpret_cast<char*>(data_.first->memory());
- uint32 preview_data_size = data_.second;
+ char* preview_data = reinterpret_cast<char*>(data.first->memory());
+ uint32 preview_data_size = data.second;
scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
html_bytes->data.resize(preview_data_size);
@@ -162,7 +194,7 @@ void PrintPreviewUIHTMLSource::StartDataRequest(const std::string& path,
*it = *(preview_data + i);
SendResponse(request_id, html_bytes);
return;
- } else {
+ } else {
// Invalid request.
scoped_refptr<RefCountedBytes> empty_bytes(new RefCountedBytes);
SendResponse(request_id, empty_bytes);
@@ -170,11 +202,8 @@ void PrintPreviewUIHTMLSource::StartDataRequest(const std::string& path,
}
}
-std::string PrintPreviewUIHTMLSource::GetMimeType(
- const std::string& path) const {
- // Print Preview Index page.
+std::string PrintPreviewDataSource::GetMimeType(const std::string& path) const {
if (path.empty())
- return "text/html";
- // Print Preview data.
- return "application/pdf";
+ return "text/html"; // Print Preview Index Page.
+ return "application/pdf"; // Print Preview data
}

Powered by Google App Engine
This is Rietveld 408576698