summaryrefslogtreecommitdiffstats
path: root/content/browser/plugin_process_host.cc
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-12 19:04:04 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-12 19:04:04 +0000
commit661f8c4e2a4def96d0c1964a92c9a73e8f4b60bc (patch)
treeb51465ef928b9d0644bcde5eb4cabd40721778ca /content/browser/plugin_process_host.cc
parente3c580aaf78abbf990e49a60389f50477c98348e (diff)
downloadchromium_src-661f8c4e2a4def96d0c1964a92c9a73e8f4b60bc.zip
chromium_src-661f8c4e2a4def96d0c1964a92c9a73e8f4b60bc.tar.gz
chromium_src-661f8c4e2a4def96d0c1964a92c9a73e8f4b60bc.tar.bz2
Cancel plugin channel requests when the renderer goes away.
Logic: - Profile shutdown kills all renderer processes - When the RMF detects the channel closing, it kills off any plugin channel requests from: * PluginService (which needs to check the PluginServiceFilter on the FILE thread) * PluginProcessHost (which may need to wait for the channel to get established) - RMF uses the new OnPluginProcessHostFound() to cancel at the PluginService or PluginProcessHost BUG=94704 TEST=New PluginService test, no known manual test Review URL: http://codereview.chromium.org/7867031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100733 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/plugin_process_host.cc')
-rw-r--r--content/browser/plugin_process_host.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/content/browser/plugin_process_host.cc b/content/browser/plugin_process_host.cc
index 23516c7..973be60 100644
--- a/content/browser/plugin_process_host.cc
+++ b/content/browser/plugin_process_host.cc
@@ -364,6 +364,18 @@ void PluginProcessHost::OpenChannelToPlugin(Client* client) {
RequestPluginChannel(client);
}
+void PluginProcessHost::CancelRequest(Client* client) {
+ std::vector<Client*>::iterator it = pending_requests_.begin();
+ while (it != pending_requests_.end()) {
+ if (client == *it) {
+ pending_requests_.erase(it);
+ return;
+ }
+ ++it;
+ }
+ DCHECK(it != pending_requests_.end());
+}
+
void PluginProcessHost::RequestPluginChannel(Client* client) {
// We can't send any sync messages from the browser because it might lead to
// a hang. However this async messages must be answered right away by the