Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "pdf/out_of_process_instance.h" | 5 #include "pdf/out_of_process_instance.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> // for min/max() | 10 #include <algorithm> // for min/max() |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 296 uma_(this), | 296 uma_(this), |
| 297 told_browser_about_unsupported_feature_(false), | 297 told_browser_about_unsupported_feature_(false), |
| 298 print_preview_page_count_(0), | 298 print_preview_page_count_(0), |
| 299 last_progress_sent_(0), | 299 last_progress_sent_(0), |
| 300 recently_sent_find_update_(false), | 300 recently_sent_find_update_(false), |
| 301 received_viewport_message_(false), | 301 received_viewport_message_(false), |
| 302 did_call_start_loading_(false), | 302 did_call_start_loading_(false), |
| 303 stop_scrolling_(false), | 303 stop_scrolling_(false), |
| 304 background_color_(0), | 304 background_color_(0), |
| 305 top_toolbar_height_(0), | 305 top_toolbar_height_(0), |
| 306 accessibility_enabled_(false) { | 306 accessibility_enabled_(false), |
| 307 accessibility_loaded_(false) { | |
| 307 loader_factory_.Initialize(this); | 308 loader_factory_.Initialize(this); |
| 308 timer_factory_.Initialize(this); | 309 timer_factory_.Initialize(this); |
| 309 form_factory_.Initialize(this); | 310 form_factory_.Initialize(this); |
| 310 print_callback_factory_.Initialize(this); | 311 print_callback_factory_.Initialize(this); |
| 311 engine_.reset(PDFEngine::Create(this)); | 312 engine_.reset(PDFEngine::Create(this)); |
| 312 pp::Module::Get()->AddPluginInterface(kPPPPdfInterface, &ppp_private); | 313 pp::Module::Get()->AddPluginInterface(kPPPPdfInterface, &ppp_private); |
| 313 AddPerInstanceObject(kPPPPdfInterface, this); | 314 AddPerInstanceObject(kPPPPdfInterface, this); |
| 314 | 315 |
| 315 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_MOUSE); | 316 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_MOUSE); |
| 316 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); | 317 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 623 options->duplex = | 624 options->duplex = |
| 624 static_cast<PP_PrivateDuplexMode_Dev>(engine_->GetDuplexType()); | 625 static_cast<PP_PrivateDuplexMode_Dev>(engine_->GetDuplexType()); |
| 625 options->copies = engine_->GetCopiesToPrint(); | 626 options->copies = engine_->GetCopiesToPrint(); |
| 626 pp::Size uniform_page_size; | 627 pp::Size uniform_page_size; |
| 627 options->is_page_size_uniform = | 628 options->is_page_size_uniform = |
| 628 PP_FromBool(engine_->GetPageSizeAndUniformity(&uniform_page_size)); | 629 PP_FromBool(engine_->GetPageSizeAndUniformity(&uniform_page_size)); |
| 629 options->uniform_page_size = uniform_page_size; | 630 options->uniform_page_size = uniform_page_size; |
| 630 } | 631 } |
| 631 | 632 |
| 632 void OutOfProcessInstance::EnableAccessibility() { | 633 void OutOfProcessInstance::EnableAccessibility() { |
| 633 if (accessibility_enabled_) | 634 accessibility_enabled_ = true; |
| 635 if (document_load_state_ == LOAD_STATE_LOADING) | |
| 634 return; | 636 return; |
| 635 | 637 |
| 636 accessibility_enabled_ = true; | 638 if (accessibility_loaded_ || document_load_state_ != LOAD_STATE_COMPLETE) |
| 639 return; | |
| 637 | 640 |
| 641 accessibility_loaded_ = true; | |
| 638 PP_PrivateAccessibilityDocInfo doc_info; | 642 PP_PrivateAccessibilityDocInfo doc_info; |
| 639 doc_info.page_count = engine_->GetNumberOfPages(); | 643 doc_info.page_count = engine_->GetNumberOfPages(); |
| 640 doc_info.text_accessible = PP_FromBool( | 644 doc_info.text_accessible = PP_FromBool( |
| 641 engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE)); | 645 engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE)); |
| 642 doc_info.text_copyable = PP_FromBool( | 646 doc_info.text_copyable = PP_FromBool( |
| 643 engine_->HasPermission(PDFEngine::PERMISSION_COPY)); | 647 engine_->HasPermission(PDFEngine::PERMISSION_COPY)); |
| 648 | |
| 644 pp::PDF::SetAccessibilityDocInfo(GetPluginInstance(), &doc_info); | 649 pp::PDF::SetAccessibilityDocInfo(GetPluginInstance(), &doc_info); |
| 645 | 650 |
| 646 // If the document contents isn't accessible, don't send anything more. | 651 // If the document contents isn't accessible, don't send anything more. |
| 647 if (!(engine_->HasPermission(PDFEngine::PERMISSION_COPY) || | 652 if (!(engine_->HasPermission(PDFEngine::PERMISSION_COPY) || |
| 648 engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE))) { | 653 engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE))) { |
| 649 return; | 654 return; |
| 650 } | 655 } |
| 651 | 656 |
| 652 PP_PrivateAccessibilityViewportInfo viewport_info; | 657 PP_PrivateAccessibilityViewportInfo viewport_info; |
| 653 viewport_info.scroll.x = 0; | 658 viewport_info.scroll.x = 0; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 670 | 675 |
| 671 int char_count = engine_->GetCharCount(page_index); | 676 int char_count = engine_->GetCharCount(page_index); |
| 672 PP_PrivateAccessibilityPageInfo page_info; | 677 PP_PrivateAccessibilityPageInfo page_info; |
| 673 page_info.page_index = page_index; | 678 page_info.page_index = page_index; |
| 674 page_info.bounds = engine_->GetPageBoundsRect(page_index); | 679 page_info.bounds = engine_->GetPageBoundsRect(page_index); |
| 675 page_info.char_count = char_count; | 680 page_info.char_count = char_count; |
| 676 | 681 |
| 677 std::vector<PP_PrivateAccessibilityCharInfo> chars(page_info.char_count); | 682 std::vector<PP_PrivateAccessibilityCharInfo> chars(page_info.char_count); |
| 678 for (uint32_t i = 0; i < page_info.char_count; ++i) { | 683 for (uint32_t i = 0; i < page_info.char_count; ++i) { |
| 679 chars[i].unicode_character = engine_->GetCharUnicode(page_index, i); | 684 chars[i].unicode_character = engine_->GetCharUnicode(page_index, i); |
| 680 chars[i].char_width = engine_->GetCharWidth(page_index, i); | |
| 681 } | 685 } |
| 682 | 686 |
| 683 std::vector<PP_PrivateAccessibilityTextRunInfo> text_runs; | 687 std::vector<PP_PrivateAccessibilityTextRunInfo> text_runs; |
| 684 int char_index = 0; | 688 int char_index = 0; |
| 685 while (char_index < char_count) { | 689 while (char_index < char_count) { |
| 686 PP_PrivateAccessibilityTextRunInfo text_run_info; | 690 PP_PrivateAccessibilityTextRunInfo text_run_info; |
| 687 pp::FloatRect bounds; | 691 pp::FloatRect bounds; |
| 688 engine_->GetTextRunInfo(page_index, char_index, &text_run_info.len, | 692 engine_->GetTextRunInfo(page_index, char_index, &text_run_info.len, |
| 689 &text_run_info.font_size, &bounds); | 693 &text_run_info.font_size, &bounds); |
| 690 text_run_info.direction = PP_PRIVATEDIRECTION_LTR; | 694 text_run_info.direction = PP_PRIVATEDIRECTION_LTR; |
| 691 text_run_info.bounds = bounds; | 695 text_run_info.bounds = bounds; |
| 692 text_runs.push_back(text_run_info); | 696 text_runs.push_back(text_run_info); |
| 697 | |
| 698 pp::FloatRect char_bounds = engine_->GetCharBounds(page_index, char_index); | |
|
Lei Zhang
2016/06/09 22:19:05
Can you add a brief description of what this new b
dmazzoni
2016/06/10 17:44:52
Done.
| |
| 699 for (uint32_t i = 0; i < text_run_info.len - 1; i++) { | |
| 700 pp::FloatRect next_char_bounds = engine_->GetCharBounds( | |
| 701 page_index, char_index + i + 1); | |
|
Lei Zhang
2016/06/09 22:19:05
Can you double check and make sure char_index + i
dmazzoni
2016/06/10 17:44:52
Added a DCHECK.
| |
| 702 chars[char_index + i].char_width = next_char_bounds.x() - char_bounds.x(); | |
| 703 char_bounds = next_char_bounds; | |
| 704 } | |
| 705 chars[char_index + text_run_info.len - 1].char_width = char_bounds.width(); | |
| 706 | |
| 693 char_index += text_run_info.len; | 707 char_index += text_run_info.len; |
| 694 } | 708 } |
| 695 | 709 |
| 696 page_info.text_run_count = text_runs.size(); | 710 page_info.text_run_count = text_runs.size(); |
| 697 pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &page_info, | 711 pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &page_info, |
| 698 text_runs.data(), chars.data()); | 712 text_runs.data(), chars.data()); |
| 699 | 713 |
| 700 // Schedule loading the next page. | 714 // Schedule loading the next page. |
| 701 pp::CompletionCallback callback = timer_factory_.NewCallback( | 715 pp::CompletionCallback callback = timer_factory_.NewCallback( |
| 702 &OutOfProcessInstance::SendNextAccessibilityPage); | 716 &OutOfProcessInstance::SendNextAccessibilityPage); |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1247 content_restrictions |= CONTENT_RESTRICTION_COPY; | 1261 content_restrictions |= CONTENT_RESTRICTION_COPY; |
| 1248 | 1262 |
| 1249 if (!engine_->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) && | 1263 if (!engine_->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) && |
| 1250 !engine_->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY)) { | 1264 !engine_->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY)) { |
| 1251 content_restrictions |= CONTENT_RESTRICTION_PRINT; | 1265 content_restrictions |= CONTENT_RESTRICTION_PRINT; |
| 1252 } | 1266 } |
| 1253 | 1267 |
| 1254 pp::PDF::SetContentRestriction(this, content_restrictions); | 1268 pp::PDF::SetContentRestriction(this, content_restrictions); |
| 1255 | 1269 |
| 1256 uma_.HistogramCustomCounts("PDF.PageCount", page_count, 1, 1000000, 50); | 1270 uma_.HistogramCustomCounts("PDF.PageCount", page_count, 1, 1000000, 50); |
| 1271 | |
| 1272 if (accessibility_enabled_) | |
|
Lei Zhang
2016/06/09 22:19:05
This is a bit confusing, since EnableAccessibility
dmazzoni
2016/06/10 17:44:52
Split into EnableAccessibility() and LoadAccessibi
| |
| 1273 EnableAccessibility(); | |
| 1257 } | 1274 } |
| 1258 | 1275 |
| 1259 void OutOfProcessInstance::RotateClockwise() { | 1276 void OutOfProcessInstance::RotateClockwise() { |
| 1260 engine_->RotateClockwise(); | 1277 engine_->RotateClockwise(); |
| 1261 } | 1278 } |
| 1262 | 1279 |
| 1263 void OutOfProcessInstance::RotateCounterclockwise() { | 1280 void OutOfProcessInstance::RotateCounterclockwise() { |
| 1264 engine_->RotateCounterclockwise(); | 1281 engine_->RotateCounterclockwise(); |
| 1265 } | 1282 } |
| 1266 | 1283 |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1526 const pp::FloatPoint& scroll_offset) { | 1543 const pp::FloatPoint& scroll_offset) { |
| 1527 float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); | 1544 float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); |
| 1528 float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f); | 1545 float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f); |
| 1529 float min_y = -top_toolbar_height_; | 1546 float min_y = -top_toolbar_height_; |
| 1530 float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); | 1547 float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); |
| 1531 float y = std::max(std::min(scroll_offset.y(), max_y), min_y); | 1548 float y = std::max(std::min(scroll_offset.y(), max_y), min_y); |
| 1532 return pp::FloatPoint(x, y); | 1549 return pp::FloatPoint(x, y); |
| 1533 } | 1550 } |
| 1534 | 1551 |
| 1535 } // namespace chrome_pdf | 1552 } // namespace chrome_pdf |
| OLD | NEW |