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 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 engine_->HasPermission(PDFEngine::PERMISSION_COPY)); | 619 engine_->HasPermission(PDFEngine::PERMISSION_COPY)); |
620 | 620 |
621 pp::PDF::SetAccessibilityDocInfo(GetPluginInstance(), &doc_info); | 621 pp::PDF::SetAccessibilityDocInfo(GetPluginInstance(), &doc_info); |
622 | 622 |
623 // If the document contents isn't accessible, don't send anything more. | 623 // If the document contents isn't accessible, don't send anything more. |
624 if (!(engine_->HasPermission(PDFEngine::PERMISSION_COPY) || | 624 if (!(engine_->HasPermission(PDFEngine::PERMISSION_COPY) || |
625 engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE))) { | 625 engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE))) { |
626 return; | 626 return; |
627 } | 627 } |
628 | 628 |
629 PP_PrivateAccessibilityViewportInfo viewport_info; | 629 SendAccessibilityViewportInfo(); |
630 viewport_info.scroll.x = 0; | |
631 viewport_info.scroll.y = -top_toolbar_height_ * device_scale_; | |
632 viewport_info.offset = available_area_.point(); | |
633 viewport_info.zoom = zoom_ * device_scale_; | |
634 pp::PDF::SetAccessibilityViewportInfo(GetPluginInstance(), &viewport_info); | |
635 | 630 |
636 // Schedule loading the first page. | 631 // Schedule loading the first page. |
637 pp::CompletionCallback callback = timer_factory_.NewCallback( | 632 pp::CompletionCallback callback = timer_factory_.NewCallback( |
638 &OutOfProcessInstance::SendNextAccessibilityPage); | 633 &OutOfProcessInstance::SendNextAccessibilityPage); |
639 pp::Module::Get()->core()->CallOnMainThread(kAccessibilityPageDelayMs, | 634 pp::Module::Get()->core()->CallOnMainThread(kAccessibilityPageDelayMs, |
640 callback, 0); | 635 callback, 0); |
641 } | 636 } |
642 | 637 |
643 void OutOfProcessInstance::SendNextAccessibilityPage(int32_t page_index) { | 638 void OutOfProcessInstance::SendNextAccessibilityPage(int32_t page_index) { |
644 int page_count = engine_->GetNumberOfPages(); | 639 int page_count = engine_->GetNumberOfPages(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &page_info, | 689 pp::PDF::SetAccessibilityPageInfo(GetPluginInstance(), &page_info, |
695 text_runs.data(), chars.data()); | 690 text_runs.data(), chars.data()); |
696 | 691 |
697 // Schedule loading the next page. | 692 // Schedule loading the next page. |
698 pp::CompletionCallback callback = timer_factory_.NewCallback( | 693 pp::CompletionCallback callback = timer_factory_.NewCallback( |
699 &OutOfProcessInstance::SendNextAccessibilityPage); | 694 &OutOfProcessInstance::SendNextAccessibilityPage); |
700 pp::Module::Get()->core()->CallOnMainThread(kAccessibilityPageDelayMs, | 695 pp::Module::Get()->core()->CallOnMainThread(kAccessibilityPageDelayMs, |
701 callback, page_index + 1); | 696 callback, page_index + 1); |
702 } | 697 } |
703 | 698 |
| 699 void OutOfProcessInstance::SendAccessibilityViewportInfo() { |
| 700 PP_PrivateAccessibilityViewportInfo viewport_info; |
| 701 viewport_info.scroll.x = 0; |
| 702 viewport_info.scroll.y = -top_toolbar_height_ * device_scale_; |
| 703 viewport_info.offset = available_area_.point(); |
| 704 viewport_info.zoom = zoom_ * device_scale_; |
| 705 pp::PDF::SetAccessibilityViewportInfo(GetPluginInstance(), &viewport_info); |
| 706 } |
| 707 |
704 pp::Var OutOfProcessInstance::GetLinkAtPosition( | 708 pp::Var OutOfProcessInstance::GetLinkAtPosition( |
705 const pp::Point& point) { | 709 const pp::Point& point) { |
706 pp::Point offset_point(point); | 710 pp::Point offset_point(point); |
707 ScalePoint(device_scale_, &offset_point); | 711 ScalePoint(device_scale_, &offset_point); |
708 offset_point.set_x(offset_point.x() - available_area_.x()); | 712 offset_point.set_x(offset_point.x() - available_area_.x()); |
709 return engine_->GetLinkAtPosition(offset_point); | 713 return engine_->GetLinkAtPosition(offset_point); |
710 } | 714 } |
711 | 715 |
712 uint32_t OutOfProcessInstance::QuerySupportedPrintOutputFormats() { | 716 uint32_t OutOfProcessInstance::QuerySupportedPrintOutputFormats() { |
713 return engine_->QuerySupportedPrintOutputFormats(); | 717 return engine_->QuerySupportedPrintOutputFormats(); |
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1411 if (bottom_of_document < available_area_.height()) | 1415 if (bottom_of_document < available_area_.height()) |
1412 available_area_.set_height(bottom_of_document); | 1416 available_area_.set_height(bottom_of_document); |
1413 | 1417 |
1414 CalculateBackgroundParts(); | 1418 CalculateBackgroundParts(); |
1415 engine_->PageOffsetUpdated(available_area_.point()); | 1419 engine_->PageOffsetUpdated(available_area_.point()); |
1416 engine_->PluginSizeUpdated(available_area_.size()); | 1420 engine_->PluginSizeUpdated(available_area_.size()); |
1417 | 1421 |
1418 if (document_size_.IsEmpty()) | 1422 if (document_size_.IsEmpty()) |
1419 return; | 1423 return; |
1420 paint_manager_.InvalidateRect(pp::Rect(pp::Point(), plugin_size_)); | 1424 paint_manager_.InvalidateRect(pp::Rect(pp::Point(), plugin_size_)); |
| 1425 |
| 1426 if (accessibility_state_ == ACCESSIBILITY_STATE_LOADED) |
| 1427 SendAccessibilityViewportInfo(); |
1421 } | 1428 } |
1422 | 1429 |
1423 void OutOfProcessInstance::LoadUrl(const std::string& url) { | 1430 void OutOfProcessInstance::LoadUrl(const std::string& url) { |
1424 LoadUrlInternal(url, &embed_loader_, &OutOfProcessInstance::DidOpen); | 1431 LoadUrlInternal(url, &embed_loader_, &OutOfProcessInstance::DidOpen); |
1425 } | 1432 } |
1426 | 1433 |
1427 void OutOfProcessInstance::LoadPreviewUrl(const std::string& url) { | 1434 void OutOfProcessInstance::LoadPreviewUrl(const std::string& url) { |
1428 LoadUrlInternal(url, &embed_preview_loader_, | 1435 LoadUrlInternal(url, &embed_preview_loader_, |
1429 &OutOfProcessInstance::DidOpenPreview); | 1436 &OutOfProcessInstance::DidOpenPreview); |
1430 } | 1437 } |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1527 const pp::FloatPoint& scroll_offset) { | 1534 const pp::FloatPoint& scroll_offset) { |
1528 float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); | 1535 float max_x = document_size_.width() * zoom_ - plugin_dip_size_.width(); |
1529 float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f); | 1536 float x = std::max(std::min(scroll_offset.x(), max_x), 0.0f); |
1530 float min_y = -top_toolbar_height_; | 1537 float min_y = -top_toolbar_height_; |
1531 float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); | 1538 float max_y = document_size_.height() * zoom_ - plugin_dip_size_.height(); |
1532 float y = std::max(std::min(scroll_offset.y(), max_y), min_y); | 1539 float y = std::max(std::min(scroll_offset.y(), max_y), min_y); |
1533 return pp::FloatPoint(x, y); | 1540 return pp::FloatPoint(x, y); |
1534 } | 1541 } |
1535 | 1542 |
1536 } // namespace chrome_pdf | 1543 } // namespace chrome_pdf |
OLD | NEW |