diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-12 19:04:04 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-12 19:04:04 +0000 |
commit | 661f8c4e2a4def96d0c1964a92c9a73e8f4b60bc (patch) | |
tree | b51465ef928b9d0644bcde5eb4cabd40721778ca /content/browser/plugin_process_host.cc | |
parent | e3c580aaf78abbf990e49a60389f50477c98348e (diff) | |
download | chromium_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.cc | 12 |
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 |