summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation/testing_automation_provider.cc
diff options
context:
space:
mode:
authorstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-16 22:10:32 +0000
committerstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-16 22:10:32 +0000
commit120655dce0bc56e15d64bc0d075f05e703dcf2cd (patch)
tree656ffe5fb4bedb72d8ceb7414f6a3b8d947bce4a /chrome/browser/automation/testing_automation_provider.cc
parent5fdc1f1f719d861693f9c6107202ac9b0287c09b (diff)
downloadchromium_src-120655dce0bc56e15d64bc0d075f05e703dcf2cd.zip
chromium_src-120655dce0bc56e15d64bc0d075f05e703dcf2cd.tar.gz
chromium_src-120655dce0bc56e15d64bc0d075f05e703dcf2cd.tar.bz2
Cleanup AutomationProviderList to fix shutdown crashes on ChromeOS auto tests
There is a circular relationship between BrowserProcessImpl and AutomationProvider. To clean this up and eliminate a shutdown crash: 1. Eliminate the AutomationProviderList singleton instance; it is already clearly owned by BrowserProcessImpl 2. Eliminate the calls to g_browser_process->Add/ReleaseModule in AutomationProvider since BrowserProcessImpl already owns AutomationProviderList (which owns any AutomationProvider instances). This could possibly have side effects if AutomationProvider attempts to access the message loop after the last call to BrowserProcessImpl::ReleaseModule exits the message loop, but that shouldn't be happening. BUG=96030 TEST=./run_remote_tests.sh --remote=localhost --ssh_port 9222 --use_emerged suite_Smoke and ensure no crashes occur in ~AutomationProvider Review URL: http://codereview.chromium.org/7790031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101582 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation/testing_automation_provider.cc')
-rw-r--r--chrome/browser/automation/testing_automation_provider.cc27
1 files changed, 18 insertions, 9 deletions
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index c3d2fd9..b60f01c 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -782,14 +782,21 @@ void TestingAutomationProvider::ExecuteBrowserCommandAsync(int handle,
int command,
bool* success) {
*success = false;
- if (browser_tracker_->ContainsHandle(handle)) {
- Browser* browser = browser_tracker_->GetResource(handle);
- if (browser->command_updater()->SupportsCommand(command) &&
- browser->command_updater()->IsCommandEnabled(command)) {
- browser->ExecuteCommand(command);
- *success = true;
- }
+ if (!browser_tracker_->ContainsHandle(handle)) {
+ LOG(WARNING) << "Browser tracker does not contain handle: " << handle;
+ return;
}
+ Browser* browser = browser_tracker_->GetResource(handle);
+ if (!browser->command_updater()->SupportsCommand(command)) {
+ LOG(WARNING) << "Browser does not support command: " << command;
+ return;
+ }
+ if (!browser->command_updater()->IsCommandEnabled(command)) {
+ LOG(WARNING) << "Browser command not enabled: " << command;
+ return;
+ }
+ browser->ExecuteCommand(command);
+ *success = true;
}
void TestingAutomationProvider::ExecuteBrowserCommand(
@@ -6190,7 +6197,8 @@ void TestingAutomationProvider::CreateNewAutomationProvider(
return;
}
provider->SetExpectedTabCount(0);
- g_browser_process->InitAutomationProviderList()->AddProvider(provider);
+ DCHECK(g_browser_process);
+ g_browser_process->GetAutomationProviderList()->AddProvider(provider);
reply.SendSuccess(NULL);
}
@@ -6346,5 +6354,6 @@ void TestingAutomationProvider::OnRedirectQueryComplete(
}
void TestingAutomationProvider::OnRemoveProvider() {
- AutomationProviderList::GetInstance()->RemoveProvider(this);
+ if (g_browser_process)
+ g_browser_process->GetAutomationProviderList()->RemoveProvider(this);
}