| Index: content/browser/browser_plugin/browser_plugin_guest.cc
|
| diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| index f01c9f11abe66b3d2d38ca73fccbd46e1be97531..22696314621b4af82d931e56373010603b803114 100644
|
| --- a/content/browser/browser_plugin/browser_plugin_guest.cc
|
| +++ b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| @@ -9,9 +9,12 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/pickle.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "cc/surfaces/surface.h"
|
| +#include "cc/surfaces/surface_manager.h"
|
| #include "content/browser/browser_plugin/browser_plugin_embedder.h"
|
| #include "content/browser/browser_thread_impl.h"
|
| #include "content/browser/child_process_security_policy_impl.h"
|
| +#include "content/browser/compositor/surface_utils.h"
|
| #include "content/browser/frame_host/render_frame_host_impl.h"
|
| #include "content/browser/frame_host/render_widget_host_view_guest.h"
|
| #include "content/browser/loader/resource_dispatcher_host_impl.h"
|
| @@ -24,7 +27,6 @@
|
| #include "content/common/browser_plugin/browser_plugin_messages.h"
|
| #include "content/common/content_constants_internal.h"
|
| #include "content/common/drag_messages.h"
|
| -#include "content/common/frame_messages.h"
|
| #include "content/common/host_shared_bitmap_manager.h"
|
| #include "content/common/input_messages.h"
|
| #include "content/common/view_messages.h"
|
| @@ -40,6 +42,7 @@
|
|
|
| #if defined(OS_MACOSX)
|
| #include "content/browser/browser_plugin/browser_plugin_popup_menu_helper_mac.h"
|
| +#include "content/common/frame_messages.h"
|
| #endif
|
|
|
| namespace content {
|
| @@ -242,6 +245,8 @@ bool BrowserPluginGuest::OnMessageReceivedFromEmbedder(
|
| IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetVisibility, OnSetVisibility)
|
| IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_UnlockMouse_ACK, OnUnlockMouseAck)
|
| IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_UpdateGeometry, OnUpdateGeometry)
|
| + IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SatisfySequence, OnSatisfySequence)
|
| + IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_RequireSequence, OnRequireSequence)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| @@ -360,6 +365,19 @@ void BrowserPluginGuest::PointerLockPermissionResponse(bool allow) {
|
| new BrowserPluginMsg_SetMouseLock(browser_plugin_instance_id(), allow));
|
| }
|
|
|
| +void BrowserPluginGuest::UpdateGuestSizeIfNecessary(
|
| + const gfx::Size& frame_size, float scale_factor) {
|
| + gfx::Size view_size(
|
| + gfx::ToFlooredSize(gfx::ScaleSize(frame_size, 1.0f / scale_factor)));
|
| +
|
| + if (last_seen_view_size_ != view_size) {
|
| + delegate_->GuestSizeChanged(view_size);
|
| + last_seen_view_size_ = view_size;
|
| + }
|
| +}
|
| +
|
| +// TODO(wjmaclean): Remove this once any remaining users of this pathway
|
| +// are gone.
|
| void BrowserPluginGuest::SwapCompositorFrame(
|
| uint32 output_surface_id,
|
| int host_process_id,
|
| @@ -367,14 +385,8 @@ void BrowserPluginGuest::SwapCompositorFrame(
|
| scoped_ptr<cc::CompositorFrame> frame) {
|
| cc::RenderPass* root_pass =
|
| frame->delegated_frame_data->render_pass_list.back();
|
| - gfx::Size view_size(gfx::ToFlooredSize(gfx::ScaleSize(
|
| - root_pass->output_rect.size(),
|
| - 1.0f / frame->metadata.device_scale_factor)));
|
| -
|
| - if (last_seen_view_size_ != view_size) {
|
| - delegate_->GuestSizeChanged(view_size);
|
| - last_seen_view_size_ = view_size;
|
| - }
|
| + UpdateGuestSizeIfNecessary(root_pass->output_rect.size(),
|
| + frame->metadata.device_scale_factor);
|
|
|
| last_pending_frame_.reset(new FrameMsg_CompositorFrameSwapped_Params());
|
| frame->AssignTo(&last_pending_frame_->frame);
|
| @@ -387,6 +399,38 @@ void BrowserPluginGuest::SwapCompositorFrame(
|
| browser_plugin_instance_id(), *last_pending_frame_));
|
| }
|
|
|
| +void BrowserPluginGuest::SetChildFrameSurface(
|
| + const cc::SurfaceId& surface_id,
|
| + const gfx::Size& frame_size,
|
| + float scale_factor,
|
| + const cc::SurfaceSequence& sequence) {
|
| + SendMessageToEmbedder(new BrowserPluginMsg_SetChildFrameSurface(
|
| + browser_plugin_instance_id(), surface_id, frame_size, scale_factor,
|
| + sequence));
|
| +}
|
| +
|
| +void BrowserPluginGuest::OnSatisfySequence(
|
| + int instance_id,
|
| + const cc::SurfaceSequence& sequence) {
|
| + std::vector<uint32_t> sequences;
|
| + sequences.push_back(sequence.sequence);
|
| + cc::SurfaceManager* manager = GetSurfaceManager();
|
| + manager->DidSatisfySequences(sequence.id_namespace, &sequences);
|
| +}
|
| +
|
| +void BrowserPluginGuest::OnRequireSequence(
|
| + int instance_id,
|
| + const cc::SurfaceId& id,
|
| + const cc::SurfaceSequence& sequence) {
|
| + cc::SurfaceManager* manager = GetSurfaceManager();
|
| + cc::Surface* surface = manager->GetSurfaceForId(id);
|
| + if (!surface) {
|
| + LOG(ERROR) << "Attempting to require callback on nonexistent surface";
|
| + return;
|
| + }
|
| + surface->AddDestructionDependency(sequence);
|
| +}
|
| +
|
| void BrowserPluginGuest::SetContentsOpaque(bool opaque) {
|
| SendMessageToEmbedder(
|
| new BrowserPluginMsg_SetContentsOpaque(
|
|
|