1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
// 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.
#include "chrome/browser/ui/webui/print_preview_ui.h"
#include "base/metrics/histogram.h"
#include "base/string_util.h"
#include "base/values.h"
#include "chrome/browser/printing/print_preview_data_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/print_preview_data_source.h"
#include "chrome/browser/ui/webui/print_preview_handler.h"
#include "content/browser/tab_contents/tab_contents.h"
PrintPreviewUI::PrintPreviewUI(TabContents* contents)
: ChromeWebUI(contents),
initial_preview_start_time_(base::TimeTicks::Now()),
request_count_(0U) {
// WebUI owns |handler_|.
handler_ = new PrintPreviewHandler();
AddMessageHandler(handler_->Attach(this));
// Set up the chrome://print/ data source.
contents->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;
}
PrintPreviewUI::~PrintPreviewUI() {
print_preview_data_service()->RemoveEntry(preview_ui_addr_str_);
}
void PrintPreviewUI::GetPrintPreviewData(scoped_refptr<RefCountedBytes>* data) {
print_preview_data_service()->GetDataEntry(preview_ui_addr_str_, data);
}
void PrintPreviewUI::SetPrintPreviewData(const RefCountedBytes* data) {
print_preview_data_service()->SetDataEntry(preview_ui_addr_str_, data);
}
void PrintPreviewUI::OnInitiatorTabClosed(
const std::string& initiator_url) {
StringValue initiator_tab_url(initiator_url);
CallJavascriptFunction("onInitiatorTabClosed", initiator_tab_url);
}
void PrintPreviewUI::OnPrintPreviewRequest() {
request_count_++;
}
void PrintPreviewUI::OnDidGetPreviewPageCount(int page_count) {
DCHECK_GT(page_count, 0);
FundamentalValue count(page_count);
CallJavascriptFunction("onDidGetPreviewPageCount", count);
}
void PrintPreviewUI::OnDidPreviewPage(int page_number) {
DCHECK_GE(page_number, 0);
FundamentalValue number(page_number);
CallJavascriptFunction("onDidPreviewPage", number);
}
void PrintPreviewUI::OnPreviewDataIsAvailable(int expected_pages_count,
const string16& job_title,
bool modifiable) {
VLOG(1) << "Print preview request finished with "
<< expected_pages_count << " pages";
DecrementRequestCount();
if (!initial_preview_start_time_.is_null()) {
UMA_HISTOGRAM_TIMES("PrintPreview.InitalDisplayTime",
base::TimeTicks::Now() - initial_preview_start_time_);
UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.Initial",
expected_pages_count);
initial_preview_start_time_ = base::TimeTicks();
}
FundamentalValue pages_count(expected_pages_count);
StringValue title(job_title);
FundamentalValue is_preview_modifiable(modifiable);
StringValue ui_identifier(preview_ui_addr_str_);
CallJavascriptFunction("updatePrintPreview", title, is_preview_modifiable,
ui_identifier);
}
void PrintPreviewUI::OnNavigation() {
handler_->OnNavigation();
}
void PrintPreviewUI::OnFileSelectionCancelled() {
CallJavascriptFunction("fileSelectionCancelled");
}
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() {
DCHECK_GT(request_count_, 0U);
if (request_count_ > 0)
request_count_--;
}
|