diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-24 18:05:27 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-24 18:05:27 +0000 |
commit | a0e4a8a69ee10f4ee7de10bb1f34efeab059a1d0 (patch) | |
tree | bf8f9ab81bdd584b778cc04ed01a88ec05c4ab67 /chrome | |
parent | a327880c479b9ac5c5d742f9a9b15219ad260e3d (diff) | |
download | chromium_src-a0e4a8a69ee10f4ee7de10bb1f34efeab059a1d0.zip chromium_src-a0e4a8a69ee10f4ee7de10bb1f34efeab059a1d0.tar.gz chromium_src-a0e4a8a69ee10f4ee7de10bb1f34efeab059a1d0.tar.bz2 |
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.
Test=covered by UI tests.
Bug=14323
Review URL: http://codereview.chromium.org/159296
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21548 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/common/plugin_messages_internal.h | 21 | ||||
-rw-r--r-- | chrome/plugin/webplugin_delegate_stub.cc | 6 | ||||
-rw-r--r-- | chrome/plugin/webplugin_delegate_stub.h | 3 | ||||
-rw-r--r-- | chrome/plugin/webplugin_proxy.cc | 4 | ||||
-rw-r--r-- | chrome/renderer/webplugin_delegate_proxy.cc | 6 |
5 files changed, 18 insertions, 22 deletions
diff --git a/chrome/common/plugin_messages_internal.h b/chrome/common/plugin_messages_internal.h index 18152d9..5138d5a 100644 --- a/chrome/common/plugin_messages_internal.h +++ b/chrome/common/plugin_messages_internal.h @@ -183,20 +183,19 @@ IPC_BEGIN_MESSAGES(Plugin) int /* id */, GURL /* url */) - IPC_SYNC_MESSAGE_ROUTED1_1(PluginMsg_DidReceiveResponse, - PluginMsg_DidReceiveResponseParams, - bool /* cancel */) + IPC_MESSAGE_ROUTED1(PluginMsg_DidReceiveResponse, + PluginMsg_DidReceiveResponseParams) - IPC_SYNC_MESSAGE_ROUTED3_0(PluginMsg_DidReceiveData, - int /* id */, - std::vector<char> /* buffer */, - int /* data_offset */) + IPC_MESSAGE_ROUTED3(PluginMsg_DidReceiveData, + int /* id */, + std::vector<char> /* buffer */, + int /* data_offset */) - IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_DidFinishLoading, - int /* id */) + IPC_MESSAGE_ROUTED1(PluginMsg_DidFinishLoading, + int /* id */) - IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_DidFail, - int /* id */) + IPC_MESSAGE_ROUTED1(PluginMsg_DidFail, + int /* id */) IPC_MESSAGE_ROUTED5(PluginMsg_SendJavaScriptStream, std::string /* url */, diff --git a/chrome/plugin/webplugin_delegate_stub.cc b/chrome/plugin/webplugin_delegate_stub.cc index a8a42b0..655a619 100644 --- a/chrome/plugin/webplugin_delegate_stub.cc +++ b/chrome/plugin/webplugin_delegate_stub.cc @@ -173,8 +173,7 @@ void WebPluginDelegateStub::OnWillSendRequest(int id, const GURL& url) { } void WebPluginDelegateStub::OnDidReceiveResponse( - const PluginMsg_DidReceiveResponseParams& params, bool* cancel) { - *cancel = false; + const PluginMsg_DidReceiveResponseParams& params) { WebPluginResourceClient* client = webplugin_->GetResourceClient(params.id); if (!client) return; @@ -183,8 +182,7 @@ void WebPluginDelegateStub::OnDidReceiveResponse( params.headers, params.expected_length, params.last_modified, - params.request_is_seekable, - cancel); + params.request_is_seekable); } void WebPluginDelegateStub::OnDidReceiveData(int id, diff --git a/chrome/plugin/webplugin_delegate_stub.h b/chrome/plugin/webplugin_delegate_stub.h index 2def46c..519a648 100644 --- a/chrome/plugin/webplugin_delegate_stub.h +++ b/chrome/plugin/webplugin_delegate_stub.h @@ -52,8 +52,7 @@ class WebPluginDelegateStub : public IPC::Channel::Listener, void OnInit(const PluginMsg_Init_Params& params, bool* result); void OnWillSendRequest(int id, const GURL& url); - void OnDidReceiveResponse(const PluginMsg_DidReceiveResponseParams& params, - bool* cancel); + void OnDidReceiveResponse(const PluginMsg_DidReceiveResponseParams& params); void OnDidReceiveData(int id, const std::vector<char>& buffer, int data_offset); void OnDidFinishLoading(int id); diff --git a/chrome/plugin/webplugin_proxy.cc b/chrome/plugin/webplugin_proxy.cc index 67919e8..3d34674 100644 --- a/chrome/plugin/webplugin_proxy.cc +++ b/chrome/plugin/webplugin_proxy.cc @@ -239,8 +239,10 @@ WebPluginProxy* WebPluginProxy::FromCPBrowsingContext( WebPluginResourceClient* WebPluginProxy::GetResourceClient(int id) { ResourceClientMap::iterator iterator = resource_clients_.find(id); + // The IPC messages which deal with streams are now asynchronous. It is + // now possible to receive stream messages from the renderer for streams + // which may have been cancelled by the plugin. if (iterator == resource_clients_.end()) { - NOTREACHED(); return NULL; } diff --git a/chrome/renderer/webplugin_delegate_proxy.cc b/chrome/renderer/webplugin_delegate_proxy.cc index ba7b197..4b87f7e 100644 --- a/chrome/renderer/webplugin_delegate_proxy.cc +++ b/chrome/renderer/webplugin_delegate_proxy.cc @@ -99,8 +99,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_; @@ -112,8 +111,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) { |