diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-17 00:13:55 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-17 00:13:55 +0000 |
commit | 6273e2e7892702061d535025f7144a005ea2fc5d (patch) | |
tree | aca15ef39f2c4b2436b70535452b08100a1a082c /chrome/renderer/plugin_channel_host.cc | |
parent | 439b88b1071539c011f3cadb9ba0bc86c6cafb98 (diff) | |
download | chromium_src-6273e2e7892702061d535025f7144a005ea2fc5d.zip chromium_src-6273e2e7892702061d535025f7144a005ea2fc5d.tar.gz chromium_src-6273e2e7892702061d535025f7144a005ea2fc5d.tar.bz2 |
Prevent Plugin Channel Host from dropping reply messages while plugins are disabled; do not create plugins while plugin messages are being dropped.
Review URL: http://codereview.chromium.org/69021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13905 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/plugin_channel_host.cc')
-rw-r--r-- | chrome/renderer/plugin_channel_host.cc | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/chrome/renderer/plugin_channel_host.cc b/chrome/renderer/plugin_channel_host.cc index 3759de1..b206f0e 100644 --- a/chrome/renderer/plugin_channel_host.cc +++ b/chrome/renderer/plugin_channel_host.cc @@ -26,26 +26,36 @@ class IsListeningFilter : public IPC::ChannelProxy::MessageFilter { }; bool IsListeningFilter::OnMessageReceived(const IPC::Message& message) { - bool handled = true; - if (!IsListeningFilter::is_listening_) { - // reply to synchronous messages with an error (so they don't block while - // we're not listening) - if (message.is_sync()) { - IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); - reply->set_reply_error(); - channel_->Send(reply); - } - handled = true; - } else { - handled = false; + if (IsListeningFilter::is_listening_) { + // Proceed with normal operation. + return false; } - return handled; + + // Always process message reply to prevent renderer from hanging on sync + // messages. + if (message.is_reply() || message.is_reply_error()) { + return false; + } + + // Reply to synchronous messages with an error (so they don't block while + // we're not listening). + if (message.is_sync()) { + IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); + reply->set_reply_error(); + channel_->Send(reply); + } + return true; } // static bool IsListeningFilter::is_listening_ = true; // static +bool PluginChannelHost::IsListening() { + return IsListeningFilter::is_listening_; +} + +// static void PluginChannelHost::SetListening(bool flag) { IsListeningFilter::is_listening_ = flag; } |