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/plugin/webplugin_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/plugin/webplugin_proxy.cc')
-rw-r--r-- | chrome/plugin/webplugin_proxy.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/chrome/plugin/webplugin_proxy.cc b/chrome/plugin/webplugin_proxy.cc index fc061ce..6aee645 100644 --- a/chrome/plugin/webplugin_proxy.cc +++ b/chrome/plugin/webplugin_proxy.cc @@ -287,8 +287,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; } @@ -653,6 +655,10 @@ void WebPluginProxy::InitiateHTTPRangeRequest(const char* url, notify_needed, notify_data)); } +void WebPluginProxy::SetDeferResourceLoading(int resource_id, bool defer) { + Send(new PluginHostMsg_DeferResourceLoading(route_id_, resource_id, defer)); +} + void WebPluginProxy::OnPaint(const gfx::Rect& damaged_rect) { child_process_logging::ScopedActiveURLSetter url_setter(page_url_); |