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

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

Issue 7621087: Print Preview: Go from event driven print preview back to print preview with sync messages. The s... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: merge, undo print preview id change Created 9 years, 4 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_ui.cc
===================================================================
--- chrome/browser/ui/webui/print_preview_ui.cc (revision 97706)
+++ chrome/browser/ui/webui/print_preview_ui.cc (working copy)
@@ -4,8 +4,12 @@
#include "chrome/browser/ui/webui/print_preview_ui.h"
+#include <map>
+
+#include "base/lazy_instance.h"
#include "base/metrics/histogram.h"
#include "base/string_util.h"
+#include "base/synchronization/lock.h"
#include "base/values.h"
#include "chrome/browser/printing/print_preview_data_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -13,12 +17,27 @@
#include "chrome/browser/ui/webui/print_preview_handler.h"
#include "chrome/common/print_messages.h"
#include "content/browser/tab_contents/tab_contents.h"
+#include "printing/print_job_constants.h"
+namespace {
+
+// Mapping from PrintPreviewUI address to most recent print preview request id.
+typedef std::map<std::string, int> PrintPreviewRequestIdMap;
+
+struct PrintPreviewRequestIdMapWithLock {
+ PrintPreviewRequestIdMap map;
+ base::Lock lock;
+};
+
+// Written to on the UI thread, read on IO thread.
+base::LazyInstance<PrintPreviewRequestIdMapWithLock>
+ g_print_preview_request_id_map(base::LINKER_INITIALIZED);
+
+} // namespace
+
PrintPreviewUI::PrintPreviewUI(TabContents* contents)
: ChromeWebUI(contents),
- initial_preview_start_time_(base::TimeTicks::Now()),
- request_count_(0U),
- document_cookie_(0) {
+ initial_preview_start_time_(base::TimeTicks::Now()) {
// WebUI owns |handler_|.
handler_ = new PrintPreviewHandler();
AddMessageHandler(handler_->Attach(this));
@@ -28,15 +47,18 @@
profile->GetChromeURLDataManager()->AddDataSource(
new PrintPreviewDataSource());
- // Store the PrintPreviewUIAddress as a string.
- // "0x" + deadc0de + '\0' = 2 + 2 * sizeof(this) + 1;
- char preview_ui_addr[2 + (2 * sizeof(this)) + 1];
- base::snprintf(preview_ui_addr, sizeof(preview_ui_addr), "%p", this);
- preview_ui_addr_str_ = preview_ui_addr;
+ preview_ui_addr_str_ = GetPrintPreviewUIAddress();
+
+ base::AutoLock lock(g_print_preview_request_id_map.Get().lock);
+ g_print_preview_request_id_map.Get().map[preview_ui_addr_str_] = -1;
}
PrintPreviewUI::~PrintPreviewUI() {
print_preview_data_service()->RemoveEntry(preview_ui_addr_str_);
+
+ base::AutoLock lock(g_print_preview_request_id_map.Get().lock);
+ PrintPreviewRequestIdMap* map = &g_print_preview_request_id_map.Get().map;
+ map->erase(preview_ui_addr_str_);
}
void PrintPreviewUI::GetPrintPreviewDataForIndex(
@@ -61,6 +83,31 @@
initiator_tab_title_ = job_title;
}
+// static
+void PrintPreviewUI::GetCurrentPrintPreviewStatus(
+ const std::string& preview_ui_addr,
+ int request_id,
+ bool* cancel) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ base::AutoLock lock(g_print_preview_request_id_map.Get().lock);
+ PrintPreviewRequestIdMap::const_iterator it =
+ g_print_preview_request_id_map.Get().map.find(preview_ui_addr);
+ if (it == g_print_preview_request_id_map.Get().map.end()) {
+ *cancel = true;
+ return;
+ }
+ *cancel = (request_id != it->second);
+}
+
+std::string PrintPreviewUI::GetPrintPreviewUIAddress() const {
+ // Store the PrintPreviewUIAddress as a string.
+ // "0x" + deadc0de + '\0' = 2 + 2 * sizeof(this) + 1;
+ char preview_ui_addr[2 + (2 * sizeof(this)) + 1];
+ base::snprintf(preview_ui_addr, sizeof(preview_ui_addr), "%p", this);
+ return preview_ui_addr;
+}
+
void PrintPreviewUI::OnInitiatorTabCrashed() {
StringValue initiator_tab_url(initiator_url_);
CallJavascriptFunction("onInitiatorTabCrashed", initiator_tab_url);
@@ -71,14 +118,14 @@
CallJavascriptFunction("onInitiatorTabClosed", initiator_tab_url);
}
-void PrintPreviewUI::OnPrintPreviewRequest() {
- request_count_++;
+void PrintPreviewUI::OnPrintPreviewRequest(int request_id) {
+ base::AutoLock lock(g_print_preview_request_id_map.Get().lock);
+ g_print_preview_request_id_map.Get().map[preview_ui_addr_str_] = request_id;
}
void PrintPreviewUI::OnDidGetPreviewPageCount(
const PrintHostMsg_DidGetPreviewPageCount_Params& params) {
DCHECK_GT(params.page_count, 0);
- document_cookie_ = params.document_cookie;
base::FundamentalValue count(params.page_count);
base::FundamentalValue modifiable(params.is_modifiable);
base::FundamentalValue request_id(params.preview_request_id);
@@ -97,8 +144,6 @@
}
void PrintPreviewUI::OnReusePreviewData(int preview_request_id) {
- DecrementRequestCount();
-
base::StringValue ui_identifier(preview_ui_addr_str_);
base::FundamentalValue ui_preview_request_id(preview_request_id);
CallJavascriptFunction("reloadPreviewPages", ui_identifier,
@@ -109,7 +154,6 @@
int preview_request_id) {
VLOG(1) << "Print preview request finished with "
<< expected_pages_count << " pages";
- DecrementRequestCount();
if (!initial_preview_start_time_.is_null()) {
UMA_HISTOGRAM_TIMES("PrintPreview.InitalDisplayTime",
@@ -133,27 +177,9 @@
}
void PrintPreviewUI::OnPrintPreviewFailed() {
- DecrementRequestCount();
CallJavascriptFunction("printPreviewFailed");
}
-void PrintPreviewUI::OnPrintPreviewCancelled() {
- DecrementRequestCount();
-}
-
-bool PrintPreviewUI::HasPendingRequests() {
- return request_count_ > 1;
-}
-
PrintPreviewDataService* PrintPreviewUI::print_preview_data_service() {
return PrintPreviewDataService::GetInstance();
}
-
-void PrintPreviewUI::DecrementRequestCount() {
- if (request_count_ > 0)
- request_count_--;
-}
-
-int PrintPreviewUI::document_cookie() {
- return document_cookie_;
-}

Powered by Google App Engine
This is Rietveld 408576698