diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-04 07:06:39 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-04 07:06:39 +0000 |
commit | e15e9c49957bb309877d90442353328e1b53a0a6 (patch) | |
tree | 97701d9822f030b5939c1738441eb5e9683262c8 /chrome/renderer/webplugin_delegate_proxy.cc | |
parent | d2817019145d7806d400ae70bf9fb4b5681905c8 (diff) | |
download | chromium_src-e15e9c49957bb309877d90442353328e1b53a0a6.zip chromium_src-e15e9c49957bb309877d90442353328e1b53a0a6.tar.gz chromium_src-e15e9c49957bb309877d90442353328e1b53a0a6.tar.bz2 |
Another attempt at landing this patch.
The reliability tests regressions caused by this patch have been addressed by the upstream bug fix https://bugs.webkit.org/show_bug.cgi?id=27769
The IPCs for carrying data requested by plugins have been changed from synchronous IPCs to asynchronous IPCs.
This fixes bug http://code.google.com/p/chromium/issues/detail?id=14323,
where the Flash plugin would not render content on the page if these IPCs were processed while the plugin waited for sync calls like NPN_Evaluate to return.
This CL also fixes the following bugs, which were crashes in reliability test runs when this patch was landed last time.
http://code.google.com/p/chromium/issues/detail?id=18058
http://code.google.com/p/chromium/issues/detail?id=18059
The crash happens because of NPP_Write calls issued to the plugin while it is waiting for an NPN_Invoke call to return in the context of NPP_NewStream. Inspecting the safari plugin implementation revealed that they defer the resource load before calling the plugin and restore it on return.
We emulate this behavior via an IPC sent from the plugin which serves as an acknowledgement.
Test=covered by UI tests.
Bug=14323,18058,18059
Review URL: http://codereview.chromium.org/159746
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22369 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/webplugin_delegate_proxy.cc')
-rw-r--r-- | chrome/renderer/webplugin_delegate_proxy.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/chrome/renderer/webplugin_delegate_proxy.cc b/chrome/renderer/webplugin_delegate_proxy.cc index f4eddc4..53d50be 100644 --- a/chrome/renderer/webplugin_delegate_proxy.cc +++ b/chrome/renderer/webplugin_delegate_proxy.cc @@ -100,8 +100,7 @@ class ResourceClientProxy : public WebPluginResourceClient { const std::string& headers, uint32 expected_length, uint32 last_modified, - bool request_is_seekable, - bool* cancel) { + bool request_is_seekable) { DCHECK(channel_ != NULL); PluginMsg_DidReceiveResponseParams params; params.id = resource_id_; @@ -113,8 +112,7 @@ class ResourceClientProxy : public WebPluginResourceClient { // Grab a reference on the underlying channel so it does not get // deleted from under us. scoped_refptr<PluginChannelHost> channel_ref(channel_); - channel_->Send(new PluginMsg_DidReceiveResponse(instance_id_, params, - cancel)); + channel_->Send(new PluginMsg_DidReceiveResponse(instance_id_, params)); } void DidReceiveData(const char* buffer, int length, int data_offset) { @@ -381,6 +379,8 @@ void WebPluginDelegateProxy::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(PluginHostMsg_CancelDocumentLoad, OnCancelDocumentLoad) IPC_MESSAGE_HANDLER(PluginHostMsg_InitiateHTTPRangeRequest, OnInitiateHTTPRangeRequest) + IPC_MESSAGE_HANDLER(PluginHostMsg_DeferResourceLoading, + OnDeferResourceLoading) IPC_MESSAGE_UNHANDLED_ERROR() IPC_END_MESSAGE_MAP() } @@ -985,3 +985,8 @@ void WebPluginDelegateProxy::OnInitiateHTTPRangeRequest( existing_stream, notify_needed, notify_data); } + +void WebPluginDelegateProxy::OnDeferResourceLoading(int resource_id, + bool defer) { + plugin_->SetDeferResourceLoading(resource_id, defer); +} |