summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser.cc
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-28 22:32:21 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-28 22:32:21 +0000
commit12636df0dcf36c769c8a5940d6a0c0b6b6a6647c (patch)
tree5ff7eccca7457afe24c47a277286c834108e825c /chrome/browser/browser.cc
parentca3f22c070a6b61a3ec40ace07244890bbdd6ebe (diff)
downloadchromium_src-12636df0dcf36c769c8a5940d6a0c0b6b6a6647c.zip
chromium_src-12636df0dcf36c769c8a5940d6a0c0b6b6a6647c.tar.gz
chromium_src-12636df0dcf36c769c8a5940d6a0c0b6b6a6647c.tar.bz2
Fix deadlock when plugin puts an alert and right afterwards the browser process makes a win32 call that ends up waiting on the plugin. Since the plugin thread is blocked, the Windows message doesn't get dispatched and the browser ui thread deadlocks. The message from the renderer would make the plugin run a nested message loop but it doesn't get run on the browser ui thread since it's blocked. The fix is to set the event that runs nested message loop in the renderer process.
BUG=23147 TEST=ui tests already cover nested message loops and plugins. This particular scenario is hard to write a test case for because it's a race condition involving the browser. Review URL: http://codereview.chromium.org/243018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27421 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r--chrome/browser/browser.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index 8baf8dc..a2e2b243 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -632,7 +632,7 @@ TabContents* Browser::AddRestoredTab(
bool select,
bool pin) {
TabContents* new_tab = new TabContents(profile(), NULL,
- MSG_ROUTING_NONE, NULL, tabstrip_model_.GetSelectedTabContents());
+ MSG_ROUTING_NONE, tabstrip_model_.GetSelectedTabContents());
new_tab->controller().RestoreFromState(navigations, selected_navigation);
bool really_pin =
@@ -654,7 +654,7 @@ void Browser::ReplaceRestoredTab(
const std::vector<TabNavigation>& navigations,
int selected_navigation) {
TabContents* replacement = new TabContents(profile(), NULL,
- MSG_ROUTING_NONE, NULL, tabstrip_model_.GetSelectedTabContents());
+ MSG_ROUTING_NONE, tabstrip_model_.GetSelectedTabContents());
replacement->controller().RestoreFromState(navigations, selected_navigation);
tabstrip_model_.ReplaceNavigationControllerAt(
@@ -1565,7 +1565,7 @@ TabContents* Browser::CreateTabContentsForURL(
PageTransition::Type transition, bool defer_load,
SiteInstance* instance) const {
TabContents* contents = new TabContents(profile, instance,
- MSG_ROUTING_NONE, NULL, tabstrip_model_.GetSelectedTabContents());
+ MSG_ROUTING_NONE, tabstrip_model_.GetSelectedTabContents());
if (!defer_load) {
// Load the initial URL before adding the new tab contents to the tab strip
@@ -2581,7 +2581,7 @@ TabContents* Browser::BuildRestoredTab(
// Create a NavigationController. This constructor creates the appropriate
// set of TabContents.
TabContents* new_tab = new TabContents(profile_, NULL,
- MSG_ROUTING_NONE, NULL, tabstrip_model_.GetSelectedTabContents());
+ MSG_ROUTING_NONE, tabstrip_model_.GetSelectedTabContents());
new_tab->controller().RestoreFromState(navigations, selected_navigation);
return new_tab;
} else {