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

Unified Diff: pdf/out_of_process_instance.cc

Issue 2486683002: Improve print preview checks in the PDF plugin (Closed)
Patch Set: Improve print preview checks in the PDF plugin Created 4 years, 1 month 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
« no previous file with comments | « pdf/out_of_process_instance.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pdf/out_of_process_instance.cc
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc
index eb1c17a022a4d67a78c2a5c83f29e1c109e630a3..523c3cb5b42497f34bb82993f9a644d5462081b3 100644
--- a/pdf/out_of_process_instance.cc
+++ b/pdf/out_of_process_instance.cc
@@ -293,7 +293,8 @@ OutOfProcessInstance::OutOfProcessInstance(PP_Instance instance)
stop_scrolling_(false),
background_color_(0),
top_toolbar_height_(0),
- accessibility_state_(ACCESSIBILITY_STATE_OFF) {
+ accessibility_state_(ACCESSIBILITY_STATE_OFF),
+ is_print_preview_(false) {
loader_factory_.Initialize(this);
timer_factory_.Initialize(this);
form_factory_.Initialize(this);
@@ -325,8 +326,9 @@ bool OutOfProcessInstance::Init(uint32_t argc,
return false;
std::string document_url = document_url_var.AsString();
base::StringPiece document_url_piece(document_url);
+ is_print_preview_ = document_url_piece.starts_with(kChromePrint);
if (!document_url_piece.starts_with(kChromeExtension) &&
- !document_url_piece.starts_with(kChromePrint)) {
+ !is_print_preview_) {
return false;
}
@@ -377,7 +379,7 @@ bool OutOfProcessInstance::Init(uint32_t argc,
// A |kJSResetPrintPreviewModeType| message will be sent to the plugin letting
// it know the url to load. By not loading here we avoid loading the same
// document twice.
- if (IsPrintPreviewUrl(original_url))
+ if (IsPrintPreview())
return true;
LoadUrl(stream_url);
@@ -436,6 +438,10 @@ void OutOfProcessInstance::HandleMessage(const pp::Var& message) {
dict.Get(pp::Var(kJSPrintPreviewGrayscale)).is_bool() &&
dict.Get(pp::Var(kJSPrintPreviewPageCount)).is_int()) {
url_ = dict.Get(pp::Var(kJSPrintPreviewUrl)).AsString();
+ // For security reasons we crash if the URL that is trying to be loaded here
+ // isn't a print preview one.
+ CHECK(IsPrintPreview());
+ CHECK(IsPrintPreviewUrl(url_));
preview_pages_info_ = std::queue<PreviewPageInfo>();
preview_document_load_state_ = LOAD_STATE_COMPLETE;
document_load_state_ = LOAD_STATE_LOADING;
@@ -452,7 +458,13 @@ void OutOfProcessInstance::HandleMessage(const pp::Var& message) {
} else if (type == kJSLoadPreviewPageType &&
dict.Get(pp::Var(kJSPreviewPageUrl)).is_string() &&
dict.Get(pp::Var(kJSPreviewPageIndex)).is_int()) {
- ProcessPreviewPageInfo(dict.Get(pp::Var(kJSPreviewPageUrl)).AsString(),
+
+ std::string url = dict.Get(pp::Var(kJSPreviewPageUrl)).AsString();
+ // For security reasons we crash if the URL that is trying to be loaded here
+ // isn't a print preview one.
+ CHECK(IsPrintPreview());
+ CHECK(IsPrintPreviewUrl(url));
+ ProcessPreviewPageInfo(url,
dict.Get(pp::Var(kJSPreviewPageIndex)).AsInt());
} else if (type == kJSStopScrollingType) {
stop_scrolling_ = true;
@@ -1485,7 +1497,7 @@ void OutOfProcessInstance::AppendBlankPrintPreviewPages() {
}
bool OutOfProcessInstance::IsPrintPreview() {
- return IsPrintPreviewUrl(url_);
+ return is_print_preview_;
}
uint32_t OutOfProcessInstance::GetBackgroundColor() {
@@ -1507,8 +1519,7 @@ void OutOfProcessInstance::IsSelectingChanged(bool is_selecting) {
void OutOfProcessInstance::ProcessPreviewPageInfo(const std::string& url,
int dst_page_index) {
- if (!IsPrintPreview())
- return;
+ DCHECK(IsPrintPreview());
int src_page_index = ExtractPrintPreviewPageIndex(url);
if (src_page_index < 1)
« no previous file with comments | « pdf/out_of_process_instance.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698