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

Side by Side Diff: webkit/plugins/ppapi/ppapi_plugin_instance.cc

Issue 16290005: Move Pepper to using mailboxes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 7 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 container_->scrollRect(dx, dy, rect); 566 container_->scrollRect(dx, dy, rect);
567 } else { 567 } else {
568 // Can't do optimized scrolling since there could be other elements on top 568 // Can't do optimized scrolling since there could be other elements on top
569 // of us or the view renders via the accelerated compositor which is 569 // of us or the view renders via the accelerated compositor which is
570 // incompatible with the move and backfill scrolling model. 570 // incompatible with the move and backfill scrolling model.
571 InvalidateRect(rect); 571 InvalidateRect(rect);
572 } 572 }
573 } 573 }
574 } 574 }
575 575
576 unsigned PluginInstance::GetBackingTextureId() {
577 if (bound_graphics_3d_.get())
578 return bound_graphics_3d_->GetBackingTextureId();
579
580 return 0;
581 }
582
583 void PluginInstance::CommitBackingTexture() { 576 void PluginInstance::CommitBackingTexture() {
584 if (texture_layer_.get()) 577 if (texture_layer_.get())
585 texture_layer_->SetNeedsDisplay(); 578 texture_layer_->SetNeedsDisplay();
586 } 579 }
587 580
588 void PluginInstance::InstanceCrashed() { 581 void PluginInstance::InstanceCrashed() {
589 // Force free all resources and vars. 582 // Force free all resources and vars.
590 HostGlobals::Get()->InstanceCrashed(pp_instance()); 583 HostGlobals::Get()->InstanceCrashed(pp_instance());
591 584
592 // Free any associated graphics. 585 // Free any associated graphics.
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
1576 bool is_mouselock_pending = TrackedCallback::IsPending(lock_mouse_callback_); 1569 bool is_mouselock_pending = TrackedCallback::IsPending(lock_mouse_callback_);
1577 1570
1578 if (flash_fullscreen == flash_fullscreen_) { 1571 if (flash_fullscreen == flash_fullscreen_) {
1579 // Manually clear callback when fullscreen fails with mouselock pending. 1572 // Manually clear callback when fullscreen fails with mouselock pending.
1580 if (!flash_fullscreen && is_mouselock_pending) 1573 if (!flash_fullscreen && is_mouselock_pending)
1581 lock_mouse_callback_->Run(PP_ERROR_FAILED); 1574 lock_mouse_callback_->Run(PP_ERROR_FAILED);
1582 return; 1575 return;
1583 } 1576 }
1584 1577
1585 PPB_Graphics3D_Impl* graphics_3d = bound_graphics_3d_.get(); 1578 PPB_Graphics3D_Impl* graphics_3d = bound_graphics_3d_.get();
1586 if (graphics_3d) { 1579 if (graphics_3d)
1587 if (flash_fullscreen) {
1588 fullscreen_container_->ReparentContext(graphics_3d->platform_context());
1589 } else {
1590 delegate_->ReparentContext(graphics_3d->platform_context());
1591 }
1592 UpdateLayer(); 1580 UpdateLayer();
1593 }
1594 1581
1595 bool old_plugin_focus = PluginHasFocus(); 1582 bool old_plugin_focus = PluginHasFocus();
1596 flash_fullscreen_ = flash_fullscreen; 1583 flash_fullscreen_ = flash_fullscreen;
1597 if (is_mouselock_pending && !delegate()->IsMouseLocked(this)) { 1584 if (is_mouselock_pending && !delegate()->IsMouseLocked(this)) {
1598 if (!IsProcessingUserGesture() && 1585 if (!IsProcessingUserGesture() &&
1599 !module_->permissions().HasPermission( 1586 !module_->permissions().HasPermission(
1600 ::ppapi::PERMISSION_BYPASS_USER_GESTURE)) { 1587 ::ppapi::PERMISSION_BYPASS_USER_GESTURE)) {
1601 lock_mouse_callback_->Run(PP_ERROR_NO_USER_GESTURE); 1588 lock_mouse_callback_->Run(PP_ERROR_NO_USER_GESTURE);
1602 } else { 1589 } else {
1603 // Open a user gesture here so the Webkit user gesture checks will succeed 1590 // Open a user gesture here so the Webkit user gesture checks will succeed
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 if (!frame) 1659 if (!frame)
1673 return false; 1660 return false;
1674 WebView* view = frame->view(); 1661 WebView* view = frame->view();
1675 if (!view) 1662 if (!view)
1676 return false; 1663 return false;
1677 1664
1678 return view->isAcceleratedCompositingActive(); 1665 return view->isAcceleratedCompositingActive();
1679 } 1666 }
1680 1667
1681 PluginDelegate::PlatformContext3D* PluginInstance::CreateContext3D() { 1668 PluginDelegate::PlatformContext3D* PluginInstance::CreateContext3D() {
1682 if (fullscreen_container_) 1669 return delegate_->CreateContext3D();
1683 return fullscreen_container_->CreateContext3D();
1684 else
1685 return delegate_->CreateContext3D();
1686 } 1670 }
1687 1671
1688 bool PluginInstance::PrintPDFOutput(PP_Resource print_output, 1672 bool PluginInstance::PrintPDFOutput(PP_Resource print_output,
1689 WebKit::WebCanvas* canvas) { 1673 WebKit::WebCanvas* canvas) {
1690 #if defined(ENABLE_PRINTING) 1674 #if defined(ENABLE_PRINTING)
1691 ::ppapi::thunk::EnterResourceNoLock<PPB_Buffer_API> enter(print_output, true); 1675 ::ppapi::thunk::EnterResourceNoLock<PPB_Buffer_API> enter(print_output, true);
1692 if (enter.failed()) 1676 if (enter.failed())
1693 return false; 1677 return false;
1694 1678
1695 BufferAutoMapper mapper(enter.object()); 1679 BufferAutoMapper mapper(enter.object());
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1774 return ret; 1758 return ret;
1775 #else // defined(ENABLE_PRINTING) 1759 #else // defined(ENABLE_PRINTING)
1776 return false; 1760 return false;
1777 #endif 1761 #endif
1778 } 1762 }
1779 1763
1780 PluginDelegate::PlatformGraphics2D* PluginInstance::GetBoundGraphics2D() const { 1764 PluginDelegate::PlatformGraphics2D* PluginInstance::GetBoundGraphics2D() const {
1781 return bound_graphics_2d_platform_; 1765 return bound_graphics_2d_platform_;
1782 } 1766 }
1783 1767
1768 static void IgnoreCallback(unsigned, bool) {}
1769
1784 void PluginInstance::UpdateLayer() { 1770 void PluginInstance::UpdateLayer() {
1785 if (!container_) 1771 if (!container_)
1786 return; 1772 return;
1787 1773
1788 bool want_layer = GetBackingTextureId(); 1774 gpu::Mailbox mailbox;
1775 if (bound_graphics_3d_) {
1776 PluginDelegate::PlatformContext3D* context =
1777 bound_graphics_3d_->platform_context();
1778 context->GetBackingMailbox(&mailbox);
1779 }
1780 bool want_layer = !mailbox.IsZero();
1789 1781
1790 if (want_layer == !!texture_layer_.get() && 1782 if (want_layer == !!texture_layer_.get() &&
1791 layer_bound_to_fullscreen_ == !!fullscreen_container_) 1783 layer_bound_to_fullscreen_ == !!fullscreen_container_)
1792 return; 1784 return;
1793 1785
1794 if (texture_layer_.get()) { 1786 if (texture_layer_.get()) {
1795 texture_layer_->ClearClient();
1796 if (!layer_bound_to_fullscreen_) 1787 if (!layer_bound_to_fullscreen_)
1797 container_->setWebLayer(NULL); 1788 container_->setWebLayer(NULL);
1798 else if (fullscreen_container_) 1789 else if (fullscreen_container_)
1799 fullscreen_container_->SetLayer(NULL); 1790 fullscreen_container_->SetLayer(NULL);
1800 web_layer_.reset(); 1791 web_layer_.reset();
1801 texture_layer_ = NULL; 1792 texture_layer_ = NULL;
1802 } 1793 }
1803 if (want_layer) { 1794 if (want_layer) {
1804 DCHECK(bound_graphics_3d_.get()); 1795 DCHECK(bound_graphics_3d_.get());
1805 texture_layer_ = cc::TextureLayer::Create(this); 1796 texture_layer_ = cc::TextureLayer::CreateForMailbox(NULL);
1806 web_layer_.reset(new webkit::WebLayerImpl(texture_layer_)); 1797 web_layer_.reset(new webkit::WebLayerImpl(texture_layer_));
1807 if (fullscreen_container_) { 1798 if (fullscreen_container_) {
1808 fullscreen_container_->SetLayer(web_layer_.get()); 1799 fullscreen_container_->SetLayer(web_layer_.get());
1809 // Ignore transparency in fullscreen, since that's what Flash always 1800 // Ignore transparency in fullscreen, since that's what Flash always
1810 // wants to do, and that lets it not recreate a context if 1801 // wants to do, and that lets it not recreate a context if
1811 // wmode=transparent was specified. 1802 // wmode=transparent was specified.
1812 texture_layer_->SetContentsOpaque(true); 1803 texture_layer_->SetContentsOpaque(true);
1813 } else { 1804 } else {
1814 container_->setWebLayer(web_layer_.get()); 1805 container_->setWebLayer(web_layer_.get());
1815 texture_layer_->SetContentsOpaque(bound_graphics_3d_->IsOpaque()); 1806 texture_layer_->SetContentsOpaque(bound_graphics_3d_->IsOpaque());
1816 } 1807 }
1808 texture_layer_->SetTextureMailbox(
1809 cc::TextureMailbox(mailbox, base::Bind(&IgnoreCallback), 0));
1817 } 1810 }
1818 layer_bound_to_fullscreen_ = !!fullscreen_container_; 1811 layer_bound_to_fullscreen_ = !!fullscreen_container_;
1819 } 1812 }
1820 1813
1821 void PluginInstance::AddPluginObject(PluginObject* plugin_object) { 1814 void PluginInstance::AddPluginObject(PluginObject* plugin_object) {
1822 DCHECK(live_plugin_objects_.find(plugin_object) == 1815 DCHECK(live_plugin_objects_.find(plugin_object) ==
1823 live_plugin_objects_.end()); 1816 live_plugin_objects_.end());
1824 live_plugin_objects_.insert(plugin_object); 1817 live_plugin_objects_.insert(plugin_object);
1825 } 1818 }
1826 1819
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
2171 const PP_DecryptedFrameInfo* frame_info) { 2164 const PP_DecryptedFrameInfo* frame_info) {
2172 content_decryptor_delegate_->DeliverFrame(decrypted_frame, frame_info); 2165 content_decryptor_delegate_->DeliverFrame(decrypted_frame, frame_info);
2173 } 2166 }
2174 2167
2175 void PluginInstance::DeliverSamples(PP_Instance instance, 2168 void PluginInstance::DeliverSamples(PP_Instance instance,
2176 PP_Resource audio_frames, 2169 PP_Resource audio_frames,
2177 const PP_DecryptedBlockInfo* block_info) { 2170 const PP_DecryptedBlockInfo* block_info) {
2178 content_decryptor_delegate_->DeliverSamples(audio_frames, block_info); 2171 content_decryptor_delegate_->DeliverSamples(audio_frames, block_info);
2179 } 2172 }
2180 2173
2181 unsigned PluginInstance::PrepareTexture(cc::ResourceUpdateQueue* queue) {
2182 return GetBackingTextureId();
2183 }
2184
2185 WebKit::WebGraphicsContext3D* PluginInstance::Context3d() {
2186 DCHECK(bound_graphics_3d_.get());
2187 DCHECK(bound_graphics_3d_->platform_context());
2188 return bound_graphics_3d_->platform_context()->GetParentContext();
2189 }
2190
2191 bool PluginInstance::PrepareTextureMailbox(cc::TextureMailbox* mailbox) {
2192 return false;
2193 }
2194
2195 void PluginInstance::NumberOfFindResultsChanged(PP_Instance instance, 2174 void PluginInstance::NumberOfFindResultsChanged(PP_Instance instance,
2196 int32_t total, 2175 int32_t total,
2197 PP_Bool final_result) { 2176 PP_Bool final_result) {
2198 DCHECK_NE(find_identifier_, -1); 2177 DCHECK_NE(find_identifier_, -1);
2199 delegate_->NumberOfFindResultsChanged(find_identifier_, total, 2178 delegate_->NumberOfFindResultsChanged(find_identifier_, total,
2200 PP_ToBool(final_result)); 2179 PP_ToBool(final_result));
2201 } 2180 }
2202 2181
2203 void PluginInstance::SelectedFindResultChanged(PP_Instance instance, 2182 void PluginInstance::SelectedFindResultChanged(PP_Instance instance,
2204 int32_t index) { 2183 int32_t index) {
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
2613 screen_size_for_fullscreen_ = gfx::Size(); 2592 screen_size_for_fullscreen_ = gfx::Size();
2614 WebElement element = container_->element(); 2593 WebElement element = container_->element();
2615 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); 2594 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_);
2616 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); 2595 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_);
2617 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); 2596 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_);
2618 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); 2597 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_);
2619 } 2598 }
2620 2599
2621 } // namespace ppapi 2600 } // namespace ppapi
2622 } // namespace webkit 2601 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | webkit/plugins/ppapi/ppb_graphics_3d_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698