| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 06a494659e503aeb72aacffb75f2a527750710ec..3b6168cddee92ccb377b964e3f29174cb45010d6 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -54,6 +54,7 @@
|
| #include "content/public/renderer/navigation_state.h"
|
| #include "content/public/renderer/render_view_observer.h"
|
| #include "content/public/renderer/render_view_visitor.h"
|
| +#include "content/renderer/browser_plugin/guest_to_embedder_channel.h"
|
| #include "content/renderer/device_orientation_dispatcher.h"
|
| #include "content/renderer/devtools_agent.h"
|
| #include "content/renderer/dom_automation_controller.h"
|
| @@ -77,8 +78,8 @@
|
| #include "content/renderer/notification_provider.h"
|
| #include "content/renderer/p2p/socket_dispatcher.h"
|
| #include "content/renderer/plugin_channel_host.h"
|
| +#include "content/renderer/browser_plugin/browser_plugin.h"
|
| #include "content/renderer/browser_plugin/browser_plugin_constants.h"
|
| -#include "content/renderer/browser_plugin/browser_plugin_placeholder.h"
|
| #include "content/renderer/render_process.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| #include "content/renderer/render_widget_fullscreen_pepper.h"
|
| @@ -453,7 +454,7 @@ RenderViewImpl::RenderViewImpl(
|
| bool swapped_out,
|
| int32 next_page_id,
|
| const WebKit::WebScreenInfo& screen_info,
|
| - bool guest,
|
| + content::GuestToEmbedderChannel* guest_to_embedder_channel,
|
| AccessibilityMode accessibility_mode)
|
| : RenderWidget(WebKit::WebPopupTypeNone, screen_info, swapped_out),
|
| webkit_preferences_(webkit_prefs),
|
| @@ -494,7 +495,9 @@ RenderViewImpl::RenderViewImpl(
|
| #if defined(OS_WIN)
|
| focused_plugin_id_(-1),
|
| #endif
|
| - guest_(guest),
|
| + guest_to_embedder_channel_(guest_to_embedder_channel),
|
| + guest_pp_instance_(0),
|
| + guest_uninitialized_context_(NULL),
|
| accessibility_mode_(accessibility_mode),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)) {
|
| routing_id_ = routing_id;
|
| @@ -532,7 +535,7 @@ RenderViewImpl::RenderViewImpl(
|
|
|
| // If this is a popup, we must wait for the CreatingNew_ACK message before
|
| // completing initialization. Otherwise, we can finish it now.
|
| - if (opener_id_ == MSG_ROUTING_NONE) {
|
| + if (!guest_to_embedder_channel && opener_id_ == MSG_ROUTING_NONE) {
|
| did_show_ = true;
|
| CompleteInit(parent_hwnd);
|
| }
|
| @@ -670,7 +673,7 @@ RenderViewImpl* RenderViewImpl::Create(
|
| bool swapped_out,
|
| int32 next_page_id,
|
| const WebKit::WebScreenInfo& screen_info,
|
| - bool guest,
|
| + content::GuestToEmbedderChannel* guest_to_embedder_channel,
|
| AccessibilityMode accessibility_mode) {
|
| DCHECK(routing_id != MSG_ROUTING_NONE);
|
| return new RenderViewImpl(
|
| @@ -687,7 +690,7 @@ RenderViewImpl* RenderViewImpl::Create(
|
| swapped_out,
|
| next_page_id,
|
| screen_info,
|
| - guest,
|
| + guest_to_embedder_channel,
|
| accessibility_mode);
|
| }
|
|
|
| @@ -1557,7 +1560,7 @@ WebView* RenderViewImpl::createView(
|
| false,
|
| 1,
|
| screen_info_,
|
| - guest_,
|
| + guest_to_embedder_channel_,
|
| accessibility_mode_);
|
| view->opened_by_user_gesture_ = params.user_gesture;
|
|
|
| @@ -1614,6 +1617,18 @@ WebGraphicsContext3D* RenderViewImpl::createGraphicsContext3D(
|
| const WebGraphicsContext3D::Attributes& attributes) {
|
| if (!webview())
|
| return NULL;
|
| +
|
| + if (guest_to_embedder_channel()) {
|
| + WebGraphicsContext3DCommandBufferImpl* context =
|
| + guest_to_embedder_channel()->CreateWebGraphicsContext3D(
|
| + this, attributes, false);
|
| + if (!guest_pp_instance()) {
|
| + guest_uninitialized_context_ = context;
|
| + guest_attributes_ = attributes;
|
| + }
|
| + return context;
|
| + }
|
| +
|
| // The WebGraphicsContext3DInProcessImpl code path is used for
|
| // layout tests (though not through this code) as well as for
|
| // debugging and bringing up new ports.
|
| @@ -2136,14 +2151,10 @@ void RenderViewImpl::didActivateCompositor(int input_handler_identifier) {
|
|
|
| WebPlugin* RenderViewImpl::createPlugin(WebFrame* frame,
|
| const WebPluginParams& params) {
|
| - // The browser plugin is a special kind of pepper plugin
|
| - // that loads asynchronously. We first create a placeholder here.
|
| - // When a guest is ready to be displayed, we swap out the placeholder
|
| - // with the guest.
|
| const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| if (command_line.HasSwitch(switches::kEnableBrowserPlugin) &&
|
| UTF16ToASCII(params.mimeType) == kBrowserPluginMimeType)
|
| - return BrowserPluginPlaceholder::Create(this, frame, params);
|
| + return BrowserPlugin::Create(this, frame, params);
|
|
|
| WebPlugin* plugin = NULL;
|
| if (content::GetContentClient()->renderer()->OverrideCreatePlugin(
|
| @@ -3638,6 +3649,30 @@ bool RenderViewImpl::IsEditableNode(const WebKit::WebNode& node) const {
|
| return is_editable_node;
|
| }
|
|
|
| +void RenderViewImpl::GuestReady(PP_Instance instance) {
|
| + guest_pp_instance_ = instance;
|
| + if (guest_uninitialized_context_) {
|
| + bool success = guest_to_embedder_channel()->CreateGraphicsContext(
|
| + guest_uninitialized_context_,
|
| + guest_attributes_,
|
| + false,
|
| + this);
|
| + DCHECK(success);
|
| + }
|
| + CompleteInit(host_window_);
|
| +}
|
| +
|
| +webkit::ppapi::WebPluginImpl* RenderViewImpl::CreateBrowserPlugin(
|
| + const IPC::ChannelHandle& channel_handle,
|
| + int guest_process_id,
|
| + const WebKit::WebPluginParams& params) {
|
| + scoped_refptr<webkit::ppapi::PluginModule> pepper_module(
|
| + pepper_delegate_.CreateBrowserPluginModule(channel_handle,
|
| + guest_process_id));
|
| + return new webkit::ppapi::WebPluginImpl(
|
| + pepper_module.get(), params, pepper_delegate_.AsWeakPtr());
|
| +}
|
| +
|
| WebKit::WebPlugin* RenderViewImpl::CreatePlugin(
|
| WebKit::WebFrame* frame,
|
| const webkit::WebPluginInfo& info,
|
| @@ -4726,6 +4761,8 @@ void RenderViewImpl::WillInitiatePaint() {
|
| void RenderViewImpl::DidInitiatePaint() {
|
| // Notify the pepper plugins that we've painted, and are waiting to flush.
|
| pepper_delegate_.ViewInitiatedPaint();
|
| + if (guest_to_embedder_channel())
|
| + guest_to_embedder_channel()->IssueSwapBuffers(guest_graphics_resource());
|
| }
|
|
|
| void RenderViewImpl::DidFlushPaint() {
|
|
|