| Index: pdf/out_of_process_instance.cc | 
| diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc | 
| index 2f08ff9cda26f624577744d4b94cbfc501583f78..58b25a9f66c9a7980a7697d7b6077faa4a5db480 100644 | 
| --- a/pdf/out_of_process_instance.cc | 
| +++ b/pdf/out_of_process_instance.cc | 
| @@ -255,7 +255,6 @@ OutOfProcessInstance::OutOfProcessInstance(PP_Instance instance) | 
| cursor_(PP_CURSORTYPE_POINTER), | 
| zoom_(1.0), | 
| device_scale_(1.0), | 
| -      printing_enabled_(true), | 
| full_(false), | 
| paint_manager_(this, this, true), | 
| first_paint_(true), | 
| @@ -268,7 +267,8 @@ OutOfProcessInstance::OutOfProcessInstance(PP_Instance instance) | 
| recently_sent_find_update_(false), | 
| received_viewport_message_(false), | 
| did_call_start_loading_(false), | 
| -      stop_scrolling_(false) { | 
| +      stop_scrolling_(false), | 
| +      delay_print_(false) { | 
| loader_factory_.Initialize(this); | 
| timer_factory_.Initialize(this); | 
| form_factory_.Initialize(this); | 
| @@ -970,9 +970,13 @@ void OutOfProcessInstance::Email(const std::string& to, | 
| } | 
|  | 
| void OutOfProcessInstance::Print() { | 
| -  if (!printing_enabled_ || | 
| -      (!engine_->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) && | 
| -       !engine_->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY))) { | 
| +  if (document_load_state_ == LOAD_STATE_LOADING) { | 
| +    delay_print_ = true; | 
| +    return; | 
| +  } | 
| + | 
| +  if (!engine_->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) && | 
| +      !engine_->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY)) { | 
| return; | 
| } | 
|  | 
| @@ -1088,38 +1092,35 @@ void OutOfProcessInstance::DocumentLoadComplete(int page_count) { | 
| pp::Var(named_destinations)); | 
| PostMessage(named_destinations_message); | 
|  | 
| +  pp::VarDictionary bookmarks_message; | 
| +  bookmarks_message.Set(pp::Var(kType), pp::Var(kJSBookmarksType)); | 
| +  bookmarks_message.Set(pp::Var(kJSBookmarks), engine_->GetBookmarks()); | 
| +  PostMessage(bookmarks_message); | 
| + | 
| pp::VarDictionary progress_message; | 
| progress_message.Set(pp::Var(kType), pp::Var(kJSLoadProgressType)); | 
| progress_message.Set(pp::Var(kJSProgressPercentage), pp::Var(100)); | 
| PostMessage(progress_message); | 
|  | 
| -  pp::VarDictionary bookmarksMessage; | 
| -  bookmarksMessage.Set(pp::Var(kType), pp::Var(kJSBookmarksType)); | 
| -  bookmarksMessage.Set(pp::Var(kJSBookmarks), engine_->GetBookmarks()); | 
| -  PostMessage(bookmarksMessage); | 
| - | 
| -  if (!full_) | 
| -    return; | 
| +  if (full_) { | 
| +    if (did_call_start_loading_) { | 
| +      pp::PDF::DidStopLoading(this); | 
| +      did_call_start_loading_ = false; | 
| +    } | 
|  | 
| -  if (did_call_start_loading_) { | 
| -    pp::PDF::DidStopLoading(this); | 
| -    did_call_start_loading_ = false; | 
| -  } | 
| +    int content_restrictions = | 
| +        CONTENT_RESTRICTION_CUT | CONTENT_RESTRICTION_PASTE; | 
| +    if (!engine_->HasPermission(PDFEngine::PERMISSION_COPY)) | 
| +      content_restrictions |= CONTENT_RESTRICTION_COPY; | 
|  | 
| -  int content_restrictions = | 
| -      CONTENT_RESTRICTION_CUT | CONTENT_RESTRICTION_PASTE; | 
| -  if (!engine_->HasPermission(PDFEngine::PERMISSION_COPY)) | 
| -    content_restrictions |= CONTENT_RESTRICTION_COPY; | 
| +    pp::PDF::SetContentRestriction(this, content_restrictions); | 
|  | 
| -  if (!engine_->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) && | 
| -      !engine_->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY)) { | 
| -    printing_enabled_ = false; | 
| +    uma_.HistogramCustomCounts("PDF.PageCount", page_count, | 
| +                               1, 1000000, 50); | 
| } | 
|  | 
| -  pp::PDF::SetContentRestriction(this, content_restrictions); | 
| - | 
| -  uma_.HistogramCustomCounts("PDF.PageCount", page_count, | 
| -                             1, 1000000, 50); | 
| +  if (delay_print_) | 
| +    Print(); | 
| } | 
|  | 
| void OutOfProcessInstance::RotateClockwise() { | 
|  |