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

Unified Diff: content/renderer/pepper/pepper_plugin_delegate_impl.cc

Issue 14371021: Implementation of URLLoader using PluginResource/ResourceHost. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase, track src/webkit gypi changes. Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/pepper/pepper_plugin_delegate_impl.cc
diff --git a/content/renderer/pepper/pepper_plugin_delegate_impl.cc b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
index 110e1bcf70e21b12c9b2b81d88ae4ae087c0a186..a3625b83d99b50f5c656a68f2bfc88cb451e1469 100644
--- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
@@ -46,12 +46,14 @@
#include "content/renderer/pepper/pepper_file_system_host.h"
#include "content/renderer/pepper/pepper_hung_plugin_filter.h"
#include "content/renderer/pepper/pepper_in_process_resource_creation.h"
+#include "content/renderer/pepper/pepper_in_process_router.h"
#include "content/renderer/pepper/pepper_platform_audio_input_impl.h"
#include "content/renderer/pepper/pepper_platform_audio_output_impl.h"
#include "content/renderer/pepper/pepper_platform_context_3d_impl.h"
#include "content/renderer/pepper/pepper_platform_image_2d_impl.h"
#include "content/renderer/pepper/pepper_platform_video_capture_impl.h"
#include "content/renderer/pepper/pepper_proxy_channel_delegate_impl.h"
+#include "content/renderer/pepper/pepper_url_loader_host.h"
#include "content/renderer/pepper/renderer_ppapi_host_impl.h"
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/render_view_impl.h"
@@ -67,11 +69,16 @@
#include "ppapi/host/ppapi_host.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/proxy/url_loader_resource.h"
+#include "ppapi/shared_impl/api_id.h"
#include "ppapi/shared_impl/file_path.h"
#include "ppapi/shared_impl/platform_file.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/ppapi_permissions.h"
#include "ppapi/shared_impl/ppapi_preferences.h"
#include "ppapi/shared_impl/ppb_device_ref_shared.h"
+#include "ppapi/shared_impl/ppp_instance_combined.h"
+#include "ppapi/shared_impl/resource_tracker.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_tcp_server_socket_private_api.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
@@ -91,6 +98,7 @@
#include "webkit/plugins/ppapi/ppb_tcp_server_socket_private_impl.h"
#include "webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h"
#include "webkit/plugins/ppapi/resource_helper.h"
+#include "webkit/plugins/ppapi/url_response_info_util.h"
#include "webkit/plugins/webplugininfo.h"
using WebKit::WebView;
@@ -1335,6 +1343,64 @@ void PepperPluginDelegateImpl::SaveURLAs(const GURL& url) {
render_view_->routing_id(), url, referrer));
}
+void PepperPluginDelegateImpl::HandleDocumentLoad(
+ webkit::ppapi::PluginInstance* instance,
+ const WebKit::WebURLResponse& response) {
+ DCHECK(!instance->document_loader());
+
+ PP_Instance pp_instance = instance->pp_instance();
+ RendererPpapiHostImpl* host_impl = static_cast<RendererPpapiHostImpl*>(
+ instance->module()->GetEmbedderState());
+
+ // Create a loader resource host for this load. Note that we have to set
+ // the document_loader before issuing the in-process
+ // PPP_Instance.HandleDocumentLoad call below, since this may reentrantly
+ // call into the instance and expect it to be valid.
+ PepperURLLoaderHost* loader_host =
+ new PepperURLLoaderHost(host_impl, true, pp_instance, 0);
+ instance->set_document_loader(loader_host);
+ loader_host->didReceiveResponse(NULL, response);
+
+ // This host will be pending until the resource object attaches to it.
+ int pending_host_id = host_impl->GetPpapiHost()->AddPendingResourceHost(
+ scoped_ptr<ppapi::host::ResourceHost>(loader_host));
+ DCHECK(pending_host_id);
+ ppapi::URLResponseInfoData data =
+ webkit::ppapi::DataFromWebURLResponse(pp_instance, response);
+
+ if (host_impl->in_process_router()) {
+ // Running in-process, we can just create the resource and call the
+ // PPP_Instance function directly.
+ scoped_refptr<ppapi::proxy::URLLoaderResource> loader_resource(
+ new ppapi::proxy::URLLoaderResource(
+ host_impl->in_process_router()->GetPluginConnection(),
+ pp_instance, pending_host_id, data));
+
+ PP_Resource loader_pp_resource = loader_resource->GetReference();
+ if (!instance->instance_interface()->HandleDocumentLoad(
+ instance->pp_instance(), loader_pp_resource))
+ loader_resource->Close();
+ // We don't pass a ref into the plugin, if it wants one, it will have taken
+ // an additional one.
+ ppapi::PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(
+ loader_pp_resource);
+
+ // Danger! If the plugin doesn't take a ref in HandleDocumentLoad, the
+ // resource host will be destroyed as soon as our scoped_refptr for the
+ // resource goes out of scope.
+ //
+ // Null it out so people don't accidentally add code below that uses it.
+ loader_host = NULL;
+ } else {
+ // Running out-of-process. Initiate an IPC call to notify the plugin
+ // process.
+ ppapi::proxy::HostDispatcher* dispatcher =
+ ppapi::proxy::HostDispatcher::GetForInstance(pp_instance);
+ dispatcher->Send(new PpapiMsg_PPPInstance_HandleDocumentLoad(
+ ppapi::API_ID_PPP_INSTANCE, pp_instance, pending_host_id, data));
+ }
+}
+
base::SharedMemory* PepperPluginDelegateImpl::CreateAnonymousSharedMemory(
size_t size) {
return RenderThread::Get()->HostAllocateSharedMemoryBuffer(size).release();
« no previous file with comments | « content/renderer/pepper/pepper_plugin_delegate_impl.h ('k') | content/renderer/pepper/pepper_url_loader_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698