Index: chrome/browser/automation/testing_automation_provider.cc |
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc |
index adb651d306947ec37467e07d185592bd1c8bb85b..a66418db532133aa3cc37b4a059066314118876c 100644 |
--- a/chrome/browser/automation/testing_automation_provider.cc |
+++ b/chrome/browser/automation/testing_automation_provider.cc |
@@ -404,14 +404,8 @@ bool TestingAutomationProvider::OnMessageReceived( |
IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_OpenNewBrowserWindowOfType, |
OpenNewBrowserWindowOfType) |
IPC_MESSAGE_HANDLER(AutomationMsg_WindowForBrowser, GetWindowForBrowser) |
- IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WaitForTabToBeRestored, |
- WaitForTabToBeRestored) |
- IPC_MESSAGE_HANDLER(AutomationMsg_GetSecurityState, GetSecurityState) |
- IPC_MESSAGE_HANDLER(AutomationMsg_GetPageType, GetPageType) |
IPC_MESSAGE_HANDLER(AutomationMsg_GetMetricEventDuration, |
GetMetricEventDuration) |
- IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_ActionOnSSLBlockingPage, |
- ActionOnSSLBlockingPage) |
IPC_MESSAGE_HANDLER(AutomationMsg_BringBrowserToFront, BringBrowserToFront) |
IPC_MESSAGE_HANDLER(AutomationMsg_FindWindowVisibility, |
GetFindWindowVisibility) |
@@ -1247,61 +1241,6 @@ void TestingAutomationProvider::GetWindowForBrowser(int browser_handle, |
} |
} |
-void TestingAutomationProvider::WaitForTabToBeRestored( |
- int tab_handle, |
- IPC::Message* reply_message) { |
- if (tab_tracker_->ContainsHandle(tab_handle)) { |
- NavigationController* tab = tab_tracker_->GetResource(tab_handle); |
- restore_tracker_.reset( |
- new NavigationControllerRestoredObserver(this, tab, reply_message)); |
- } else { |
- AutomationMsg_WaitForTabToBeRestored::WriteReplyParams( |
- reply_message, false); |
- Send(reply_message); |
- } |
-} |
- |
-void TestingAutomationProvider::GetSecurityState( |
- int handle, |
- bool* success, |
- content::SecurityStyle* security_style, |
- net::CertStatus* ssl_cert_status, |
- int* insecure_content_status) { |
- if (tab_tracker_->ContainsHandle(handle)) { |
- NavigationController* tab = tab_tracker_->GetResource(handle); |
- NavigationEntry* entry = tab->GetActiveEntry(); |
- *success = true; |
- *security_style = entry->GetSSL().security_style; |
- *ssl_cert_status = entry->GetSSL().cert_status; |
- *insecure_content_status = entry->GetSSL().content_status; |
- } else { |
- *success = false; |
- *security_style = content::SECURITY_STYLE_UNKNOWN; |
- *ssl_cert_status = 0; |
- *insecure_content_status = 0; |
- } |
-} |
- |
-void TestingAutomationProvider::GetPageType( |
- int handle, |
- bool* success, |
- content::PageType* page_type) { |
- if (tab_tracker_->ContainsHandle(handle)) { |
- NavigationController* tab = tab_tracker_->GetResource(handle); |
- NavigationEntry* entry = tab->GetActiveEntry(); |
- *page_type = entry->GetPageType(); |
- *success = true; |
- // In order to return the proper result when an interstitial is shown and |
- // no navigation entry were created for it we need to ask the WebContents. |
- if (*page_type == content::PAGE_TYPE_NORMAL && |
- tab->GetWebContents()->ShowingInterstitialPage()) |
- *page_type = content::PAGE_TYPE_INTERSTITIAL; |
- } else { |
- *success = false; |
- *page_type = content::PAGE_TYPE_NORMAL; |
- } |
-} |
- |
void TestingAutomationProvider::GetMetricEventDuration( |
const std::string& event_name, |
int* duration_ms) { |
@@ -1309,38 +1248,6 @@ void TestingAutomationProvider::GetMetricEventDuration( |
event_name); |
} |
-void TestingAutomationProvider::ActionOnSSLBlockingPage( |
- int handle, |
- bool proceed, |
- IPC::Message* reply_message) { |
- if (tab_tracker_->ContainsHandle(handle)) { |
- NavigationController* tab = tab_tracker_->GetResource(handle); |
- NavigationEntry* entry = tab->GetActiveEntry(); |
- if (entry->GetPageType() == content::PAGE_TYPE_INTERSTITIAL) { |
- WebContents* web_contents = tab->GetWebContents(); |
- InterstitialPage* ssl_blocking_page = |
- InterstitialPage::GetInterstitialPage(web_contents); |
- if (ssl_blocking_page) { |
- if (proceed) { |
- new NavigationNotificationObserver(tab, this, reply_message, 1, |
- false, false); |
- ssl_blocking_page->Proceed(); |
- return; |
- } |
- ssl_blocking_page->DontProceed(); |
- AutomationMsg_ActionOnSSLBlockingPage::WriteReplyParams( |
- reply_message, AUTOMATION_MSG_NAVIGATION_SUCCESS); |
- Send(reply_message); |
- return; |
- } |
- } |
- } |
- // We failed. |
- AutomationMsg_ActionOnSSLBlockingPage::WriteReplyParams( |
- reply_message, AUTOMATION_MSG_NAVIGATION_ERROR); |
- Send(reply_message); |
-} |
- |
void TestingAutomationProvider::BringBrowserToFront(int browser_handle, |
bool* success) { |
*success = false; |
@@ -1746,6 +1653,10 @@ void TestingAutomationProvider::BuildJSONHandlerMaps() { |
&TestingAutomationProvider::GetAppModalDialogMessage; |
handler_map_["AcceptOrDismissAppModalDialog"] = |
&TestingAutomationProvider::AcceptOrDismissAppModalDialog; |
+ handler_map_["ActionOnSSLBlockingPage"] = |
+ &TestingAutomationProvider::ActionOnSSLBlockingPage; |
+ handler_map_["GetSecurityState"] = |
+ &TestingAutomationProvider::GetSecurityState; |
handler_map_["GetChromeDriverAutomationVersion"] = |
&TestingAutomationProvider::GetChromeDriverAutomationVersion; |
handler_map_["IsPageActionVisible"] = |
@@ -2131,7 +2042,8 @@ void TestingAutomationProvider::SendJSONRequest(Browser* browser, |
(this->*handler_map_[command])(dict_value.get(), reply_message); |
// Command has no handler. |
} else { |
- error_string = "Unknown command. Options: "; |
+ error_string = StringPrintf("Unknown command '%s'. Options: ", |
+ command.c_str()); |
for (std::map<std::string, JsonHandler>::const_iterator it = |
handler_map_.begin(); it != handler_map_.end(); ++it) { |
error_string += it->first + ", "; |
@@ -4495,6 +4407,61 @@ void TestingAutomationProvider::TriggerBrowserActionById( |
} |
} |
+void TestingAutomationProvider::ActionOnSSLBlockingPage( |
+ DictionaryValue* args, |
+ IPC::Message* reply_message) { |
+ WebContents* web_contents; |
+ bool proceed; |
+ std::string error; |
+ if (!GetTabFromJSONArgs(args, &web_contents, &error)) { |
+ AutomationJSONReply(this, reply_message).SendError(error); |
+ return; |
+ } |
+ if (!args->GetBoolean("proceed", &proceed)) { |
+ AutomationJSONReply(this, reply_message).SendError( |
+ "'proceed' is missing or invalid"); |
+ return; |
+ } |
+ NavigationController& controller = web_contents->GetController(); |
+ NavigationEntry* entry = controller.GetActiveEntry(); |
+ if (entry->GetPageType() == content::PAGE_TYPE_INTERSTITIAL) { |
+ InterstitialPage* ssl_blocking_page = |
+ InterstitialPage::GetInterstitialPage(web_contents); |
+ if (ssl_blocking_page) { |
+ if (proceed) { |
+ new NavigationNotificationObserver(&controller, this, reply_message, 1, |
+ false, true); |
+ ssl_blocking_page->Proceed(); |
+ return; |
+ } |
+ ssl_blocking_page->DontProceed(); |
+ AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
+ return; |
+ } |
+ } |
+ AutomationJSONReply(this, reply_message).SendError(error); |
+} |
+ |
+void TestingAutomationProvider::GetSecurityState(DictionaryValue* args, |
+ IPC::Message* reply_message) { |
+ AutomationJSONReply reply(this, reply_message); |
+ WebContents* web_contents; |
+ std::string error; |
+ if (!GetTabFromJSONArgs(args, &web_contents, &error)) { |
+ reply.SendError(error); |
+ return; |
+ } |
+ NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); |
+ DictionaryValue dict; |
+ dict.SetInteger("security_style", |
+ static_cast<int>(entry->GetSSL().security_style)); |
+ dict.SetInteger("ssl_cert_status", |
+ static_cast<int>(entry->GetSSL().cert_status)); |
+ dict.SetInteger("insecure_content_status", |
+ static_cast<int>(entry->GetSSL().content_status)); |
+ reply.SendSuccess(&dict); |
+} |
+ |
// Sample json input: { "command": "UpdateExtensionsNow" } |
// Sample json output: {} |
void TestingAutomationProvider::UpdateExtensionsNow( |
@@ -6095,6 +6062,19 @@ void TestingAutomationProvider::WaitForAllViewsToStopLoading( |
this, reply_message, profile()->GetExtensionProcessManager()); |
} |
+void TestingAutomationProvider::WaitForTabToBeRestored( |
+ DictionaryValue* args, |
+ IPC::Message* reply_message) { |
+ WebContents* web_contents; |
+ std::string error; |
+ if (!GetTabFromJSONArgs(args, &web_contents, &error)) { |
+ AutomationJSONReply(this, reply_message).SendError(error); |
+ return; |
+ } |
+ NavigationController& controller = web_contents->GetController(); |
+ new NavigationControllerRestoredObserver(this, &controller, reply_message); |
+} |
+ |
void TestingAutomationProvider::GetPolicyDefinitionList( |
DictionaryValue* args, |
IPC::Message* reply_message) { |
@@ -6245,9 +6225,13 @@ void TestingAutomationProvider::NavigateToURL( |
.SendError("'navigation_count' missing or invalid"); |
return; |
} |
- new NavigationNotificationObserver( |
- &web_contents->GetController(), this, reply_message, |
- navigation_count, false, true); |
+ if (navigation_count > 0) { |
+ new NavigationNotificationObserver( |
+ &web_contents->GetController(), this, reply_message, |
+ navigation_count, false, true); |
+ } else { |
+ AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
+ } |
OpenURLParams params( |
GURL(url), content::Referrer(), CURRENT_TAB, |
content::PageTransitionFromInt( |
@@ -6950,13 +6934,19 @@ void TestingAutomationProvider::CloseTabJSON( |
Browser* browser; |
WebContents* tab; |
std::string error; |
+ bool wait_until_closed = false; // ChromeDriver does not use this. |
+ args->GetBoolean("wait_until_closed", &wait_until_closed); |
// Close tabs synchronously. |
if (GetBrowserAndTabFromJSONArgs(args, &browser, &tab, &error)) { |
+ if (wait_until_closed) { |
+ new TabClosedNotificationObserver(this, wait_until_closed, reply_message, |
+ true); |
+ } |
chrome::CloseWebContents(browser, tab); |
- reply.SendSuccess(NULL); |
+ if (!wait_until_closed) |
+ reply.SendSuccess(NULL); |
return; |
} |
- |
// Close other types of views asynchronously. |
RenderViewHost* view; |
if (!GetRenderViewFromJSONArgs(args, profile(), &view, &error)) { |