OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/automation/testing_automation_provider.h" | 5 #include "chrome/browser/automation/testing_automation_provider.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 2223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2234 // Ownership remains with "values" variable. | 2234 // Ownership remains with "values" variable. |
2235 dict_value = static_cast<DictionaryValue*>(values.get()); | 2235 dict_value = static_cast<DictionaryValue*>(values.get()); |
2236 if (!dict_value->GetStringASCII(std::string("command"), &command)) { | 2236 if (!dict_value->GetStringASCII(std::string("command"), &command)) { |
2237 AutomationJSONReply(this, reply_message) | 2237 AutomationJSONReply(this, reply_message) |
2238 .SendError("no command key in dict or not a string command"); | 2238 .SendError("no command key in dict or not a string command"); |
2239 return; | 2239 return; |
2240 } | 2240 } |
2241 | 2241 |
2242 // Map json commands to their handlers. | 2242 // Map json commands to their handlers. |
2243 std::map<std::string, JsonHandler> handler_map; | 2243 std::map<std::string, JsonHandler> handler_map; |
2244 handler_map["WaitForAllTabsToStopLoading"] = | 2244 handler_map["WaitForAllTabsToStopLoading"] = |
dennis_jeffrey
2011/12/06 00:49:08
Do you think it's worthwhile to change the name of
kkania
2011/12/12 17:10:06
This isn't used on the python side yet, just C++.
| |
2245 &TestingAutomationProvider::WaitForAllTabsToStopLoading; | 2245 &TestingAutomationProvider::WaitForAllViewsToStopLoading; |
2246 handler_map["GetIndicesFromTab"] = | 2246 handler_map["GetIndicesFromTab"] = |
2247 &TestingAutomationProvider::GetIndicesFromTab; | 2247 &TestingAutomationProvider::GetIndicesFromTab; |
2248 handler_map["NavigateToURL"] = | 2248 handler_map["NavigateToURL"] = |
2249 &TestingAutomationProvider::NavigateToURL; | 2249 &TestingAutomationProvider::NavigateToURL; |
2250 handler_map["GetLocalStatePrefsInfo"] = | 2250 handler_map["GetLocalStatePrefsInfo"] = |
2251 &TestingAutomationProvider::GetLocalStatePrefsInfo; | 2251 &TestingAutomationProvider::GetLocalStatePrefsInfo; |
2252 handler_map["SetLocalStatePrefs"] = | 2252 handler_map["SetLocalStatePrefs"] = |
2253 &TestingAutomationProvider::SetLocalStatePrefs; | 2253 &TestingAutomationProvider::SetLocalStatePrefs; |
2254 handler_map["ExecuteJavascript"] = | 2254 handler_map["ExecuteJavascript"] = |
2255 &TestingAutomationProvider::ExecuteJavascriptJSON; | 2255 &TestingAutomationProvider::ExecuteJavascriptJSON; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2300 handler_map["ActivateTab"] = | 2300 handler_map["ActivateTab"] = |
2301 &TestingAutomationProvider::ActivateTabJSON; | 2301 &TestingAutomationProvider::ActivateTabJSON; |
2302 handler_map["GetAppModalDialogMessage"] = | 2302 handler_map["GetAppModalDialogMessage"] = |
2303 &TestingAutomationProvider::GetAppModalDialogMessage; | 2303 &TestingAutomationProvider::GetAppModalDialogMessage; |
2304 handler_map["AcceptOrDismissAppModalDialog"] = | 2304 handler_map["AcceptOrDismissAppModalDialog"] = |
2305 &TestingAutomationProvider::AcceptOrDismissAppModalDialog; | 2305 &TestingAutomationProvider::AcceptOrDismissAppModalDialog; |
2306 handler_map["GetChromeDriverAutomationVersion"] = | 2306 handler_map["GetChromeDriverAutomationVersion"] = |
2307 &TestingAutomationProvider::GetChromeDriverAutomationVersion; | 2307 &TestingAutomationProvider::GetChromeDriverAutomationVersion; |
2308 handler_map["UpdateExtensionsNow"] = | 2308 handler_map["UpdateExtensionsNow"] = |
2309 &TestingAutomationProvider::UpdateExtensionsNow; | 2309 &TestingAutomationProvider::UpdateExtensionsNow; |
2310 handler_map["IsPageActionVisible"] = | |
2311 &TestingAutomationProvider::IsPageActionVisible; | |
2310 handler_map["CreateNewAutomationProvider"] = | 2312 handler_map["CreateNewAutomationProvider"] = |
2311 &TestingAutomationProvider::CreateNewAutomationProvider; | 2313 &TestingAutomationProvider::CreateNewAutomationProvider; |
2312 handler_map["GetBrowserInfo"] = | 2314 handler_map["GetBrowserInfo"] = |
2313 &TestingAutomationProvider::GetBrowserInfo; | 2315 &TestingAutomationProvider::GetBrowserInfo; |
2314 handler_map["OpenNewBrowserWindowWithNewProfile"] = | 2316 handler_map["OpenNewBrowserWindowWithNewProfile"] = |
2315 &TestingAutomationProvider::OpenNewBrowserWindowWithNewProfile; | 2317 &TestingAutomationProvider::OpenNewBrowserWindowWithNewProfile; |
2316 handler_map["GetMultiProfileInfo"] = | 2318 handler_map["GetMultiProfileInfo"] = |
2317 &TestingAutomationProvider::GetMultiProfileInfo; | 2319 &TestingAutomationProvider::GetMultiProfileInfo; |
2318 handler_map["GetProcessInfo"] = | 2320 handler_map["GetProcessInfo"] = |
2319 &TestingAutomationProvider::GetProcessInfo; | 2321 &TestingAutomationProvider::GetProcessInfo; |
(...skipping 2101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4421 return_value->Set("extensions", extensions_values); | 4423 return_value->Set("extensions", extensions_values); |
4422 reply.SendSuccess(return_value.get()); | 4424 reply.SendSuccess(return_value.get()); |
4423 } | 4425 } |
4424 | 4426 |
4425 // See UninstallExtensionById() in chrome/test/pyautolib/pyauto.py for sample | 4427 // See UninstallExtensionById() in chrome/test/pyautolib/pyauto.py for sample |
4426 // json input. | 4428 // json input. |
4427 // Sample json output: {} | 4429 // Sample json output: {} |
4428 void TestingAutomationProvider::UninstallExtensionById( | 4430 void TestingAutomationProvider::UninstallExtensionById( |
4429 DictionaryValue* args, | 4431 DictionaryValue* args, |
4430 IPC::Message* reply_message) { | 4432 IPC::Message* reply_message) { |
4431 std::string id; | 4433 const Extension* extension; |
4432 if (!args->GetString("id", &id)) { | 4434 std::string error; |
4433 AutomationJSONReply(this, reply_message).SendError( | 4435 if (!GetExtensionFromJSONArgs(args, "id", profile(), &extension, &error)) { |
4434 "Must include string id."); | 4436 AutomationJSONReply(this, reply_message).SendError(error); |
4435 return; | 4437 return; |
4436 } | 4438 } |
4437 ExtensionService* service = profile()->GetExtensionService(); | 4439 ExtensionService* service = profile()->GetExtensionService(); |
4438 if (!service) { | 4440 if (!service) { |
4439 AutomationJSONReply(this, reply_message).SendError( | 4441 AutomationJSONReply(this, reply_message).SendError( |
4440 "No extensions service."); | 4442 "No extensions service."); |
4441 return; | 4443 return; |
4442 } | 4444 } |
4443 | 4445 |
4444 if (!service->GetExtensionById(id, true) && | |
4445 !service->GetTerminatedExtension(id)) { | |
4446 // The extension ID does not correspond to any extension, whether crashed | |
4447 // or not. | |
4448 AutomationJSONReply(this, reply_message).SendError(base::StringPrintf( | |
4449 "Extension does not exist: %s.", id.c_str())); | |
4450 return; | |
4451 } | |
4452 | |
4453 // Wait for a notification indicating that the extension with the given ID | 4446 // Wait for a notification indicating that the extension with the given ID |
4454 // has been uninstalled. This observer will delete itself. | 4447 // has been uninstalled. This observer will delete itself. |
4455 new ExtensionUninstallObserver(this, reply_message, id); | 4448 new ExtensionUninstallObserver(this, reply_message, extension->id()); |
4456 service->UninstallExtension(id, false, NULL); | 4449 service->UninstallExtension(extension->id(), false, NULL); |
4457 } | 4450 } |
4458 | 4451 |
4459 // See SetExtensionStateById() in chrome/test/pyautolib/pyauto.py | 4452 // See SetExtensionStateById() in chrome/test/pyautolib/pyauto.py |
4460 // for sample json input. | 4453 // for sample json input. |
4461 void TestingAutomationProvider::SetExtensionStateById( | 4454 void TestingAutomationProvider::SetExtensionStateById( |
4462 DictionaryValue* args, | 4455 DictionaryValue* args, |
4463 IPC::Message* reply_message) { | 4456 IPC::Message* reply_message) { |
4464 std::string id; | 4457 const Extension* extension; |
4465 if (!args->GetString("id", &id)) { | 4458 std::string error; |
4466 AutomationJSONReply(this, reply_message) | 4459 if (!GetExtensionFromJSONArgs(args, "id", profile(), &extension, &error)) { |
4467 .SendError("Missing or invalid key: id"); | 4460 AutomationJSONReply(this, reply_message).SendError(error); |
4468 return; | 4461 return; |
4469 } | 4462 } |
4470 | 4463 |
4471 bool enable; | 4464 bool enable; |
4472 if (!args->GetBoolean("enable", &enable)) { | 4465 if (!args->GetBoolean("enable", &enable)) { |
4473 AutomationJSONReply(this, reply_message) | 4466 AutomationJSONReply(this, reply_message) |
4474 .SendError("Missing or invalid key: enable"); | 4467 .SendError("Missing or invalid key: enable"); |
4475 return; | 4468 return; |
4476 } | 4469 } |
4477 | 4470 |
(...skipping 12 matching lines...) Expand all Loading... | |
4490 } | 4483 } |
4491 | 4484 |
4492 ExtensionService* service = profile()->GetExtensionService(); | 4485 ExtensionService* service = profile()->GetExtensionService(); |
4493 ExtensionProcessManager* manager = profile()->GetExtensionProcessManager(); | 4486 ExtensionProcessManager* manager = profile()->GetExtensionProcessManager(); |
4494 if (!service) { | 4487 if (!service) { |
4495 AutomationJSONReply(this, reply_message) | 4488 AutomationJSONReply(this, reply_message) |
4496 .SendError("No extensions service or process manager."); | 4489 .SendError("No extensions service or process manager."); |
4497 return; | 4490 return; |
4498 } | 4491 } |
4499 | 4492 |
4500 if (!service->GetExtensionById(id, true) && | 4493 service->SetIsIncognitoEnabled(extension->id(), allow_in_incognito); |
4501 !service->GetTerminatedExtension(id)) { | |
4502 // The extension ID does not correspond to any extension, whether crashed | |
4503 // or not. | |
4504 AutomationJSONReply(this, reply_message).SendError( | |
4505 base::StringPrintf("Extension does not exist: %s.", id.c_str())); | |
4506 return; | |
4507 } | |
4508 | |
4509 service->SetIsIncognitoEnabled(id, allow_in_incognito); | |
4510 | 4494 |
4511 if (enable) { | 4495 if (enable) { |
4512 if (!service->IsExtensionEnabled(id)) { | 4496 if (!service->IsExtensionEnabled(extension->id())) { |
4513 new ExtensionReadyNotificationObserver( | 4497 new ExtensionReadyNotificationObserver( |
4514 manager, | 4498 manager, |
4515 service, | 4499 service, |
4516 this, | 4500 this, |
4517 reply_message); | 4501 reply_message); |
4518 service->EnableExtension(id); | 4502 service->EnableExtension(extension->id()); |
4519 } else { | 4503 } else { |
4520 AutomationJSONReply(this, reply_message).SendSuccess(NULL); | 4504 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
4521 } | 4505 } |
4522 } else { | 4506 } else { |
4523 service->DisableExtension(id); | 4507 service->DisableExtension(extension->id()); |
4524 AutomationJSONReply(this, reply_message).SendSuccess(NULL); | 4508 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
4525 } | 4509 } |
4526 } | 4510 } |
4527 | 4511 |
4528 // See TriggerPageActionById() in chrome/test/pyautolib/pyauto.py | 4512 // See TriggerPageActionById() in chrome/test/pyautolib/pyauto.py |
4529 // for sample json input. | 4513 // for sample json input. |
4530 void TestingAutomationProvider::TriggerPageActionById( | 4514 void TestingAutomationProvider::TriggerPageActionById( |
4531 DictionaryValue* args, | 4515 DictionaryValue* args, |
4532 IPC::Message* reply_message) { | 4516 IPC::Message* reply_message) { |
4533 AutomationJSONReply reply(this, reply_message); | |
4534 | |
4535 std::string error; | 4517 std::string error; |
4536 Browser* browser; | 4518 Browser* browser; |
4537 if (!GetBrowserFromJSONArgs(args, &browser, &error)) { | 4519 TabContents* tab; |
4538 reply.SendError(error); | 4520 if (!GetBrowserAndTabFromJSONArgs(args, &browser, &tab, &error)) { |
4521 AutomationJSONReply(this, reply_message).SendError(error); | |
4539 return; | 4522 return; |
4540 } | 4523 } |
4541 std::string id; | 4524 const Extension* extension; |
4542 if (!args->GetString("id", &id)) { | 4525 if (!GetEnabledExtensionFromJSONArgs( |
4543 reply.SendError("Missing or invalid key: id"); | 4526 args, "id", profile(), &extension, &error)) { |
4527 AutomationJSONReply(this, reply_message).SendError(error); | |
4528 return; | |
4529 } | |
4530 ExtensionAction* page_action = extension->page_action(); | |
4531 if (!page_action) { | |
4532 AutomationJSONReply(this, reply_message).SendError( | |
4533 "Extension doesn't have any page action."); | |
4544 return; | 4534 return; |
4545 } | 4535 } |
4546 | 4536 |
4547 ExtensionService* service = browser->profile()->GetExtensionService(); | 4537 bool pressed = false; |
4548 if (!service) { | 4538 LocationBarTesting* loc_bar = |
4549 reply.SendError("No extensions service."); | 4539 browser->window()->GetLocationBar()->GetLocationBarForTesting(); |
4550 return; | 4540 size_t page_action_visible_count = |
4541 static_cast<size_t>(loc_bar->PageActionVisibleCount()); | |
4542 for (size_t i = 0; i < page_action_visible_count; ++i) { | |
4543 if (loc_bar->GetVisiblePageAction(i) == page_action) { | |
4544 loc_bar->TestPageActionPressed(i); | |
4545 pressed = true; | |
4546 break; | |
4547 } | |
4551 } | 4548 } |
4552 if (!service->GetInstalledExtension(id)) { | 4549 if (!pressed) { |
4553 // The extension ID does not correspond to any extension, whether crashed | 4550 AutomationJSONReply(this, reply_message).SendError( |
4554 // or not. | 4551 "Extension's page action is not visible."); |
4555 reply.SendError(base::StringPrintf("Extension %s is not installed.", | |
4556 id.c_str())); | |
4557 return; | |
4558 } | |
4559 const Extension* extension = service->GetExtensionById(id, false); | |
4560 if (!extension) { | |
4561 reply.SendError("Extension is disabled or has crashed."); | |
4562 return; | 4552 return; |
4563 } | 4553 } |
4564 | 4554 |
4565 if (ExtensionAction* page_action = extension->page_action()) { | 4555 if (page_action->HasPopup(ExtensionTabUtil::GetTabId(tab))) { |
4566 LocationBarTesting* loc_bar = | 4556 new ExtensionPopupObserver( |
4567 browser->window()->GetLocationBar()->GetLocationBarForTesting(); | 4557 this, reply_message, extension->id()); |
dennis_jeffrey
2011/12/06 00:49:08
maybe add a comment to explicitly say that this ob
kkania
2011/12/12 17:10:06
Done.
| |
4568 size_t page_action_visible_count = | |
4569 static_cast<size_t>(loc_bar->PageActionVisibleCount()); | |
4570 for (size_t i = 0; i < page_action_visible_count; ++i) { | |
4571 if (loc_bar->GetVisiblePageAction(i) == page_action) { | |
4572 loc_bar->TestPageActionPressed(i); | |
4573 reply.SendSuccess(NULL); | |
4574 return; | |
4575 } | |
4576 } | |
4577 reply.SendError("Extension doesn't have any visible page action icon."); | |
4578 } else { | 4558 } else { |
4579 reply.SendError("Extension doesn't have any page action."); | 4559 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
4580 } | 4560 } |
4581 } | 4561 } |
4582 | 4562 |
4583 // See TriggerBrowserActionById() in chrome/test/pyautolib/pyauto.py | 4563 // See TriggerBrowserActionById() in chrome/test/pyautolib/pyauto.py |
4584 // for sample json input. | 4564 // for sample json input. |
4585 void TestingAutomationProvider::TriggerBrowserActionById( | 4565 void TestingAutomationProvider::TriggerBrowserActionById( |
4586 DictionaryValue* args, | 4566 DictionaryValue* args, |
4587 IPC::Message* reply_message) { | 4567 IPC::Message* reply_message) { |
4588 AutomationJSONReply reply(this, reply_message); | |
4589 | |
4590 std::string error; | 4568 std::string error; |
4591 Browser* browser; | 4569 Browser* browser; |
4592 if (!GetBrowserFromJSONArgs(args, &browser, &error)) { | 4570 TabContents* tab; |
4593 reply.SendError(error); | 4571 if (!GetBrowserAndTabFromJSONArgs(args, &browser, &tab, &error)) { |
4572 AutomationJSONReply(this, reply_message).SendError(error); | |
4594 return; | 4573 return; |
4595 } | 4574 } |
4596 std::string id; | 4575 const Extension* extension; |
4597 if (!args->GetString("id", &id)) { | 4576 if (!GetEnabledExtensionFromJSONArgs( |
4598 reply.SendError("Missing or invalid key: id"); | 4577 args, "id", profile(), &extension, &error)) { |
4578 AutomationJSONReply(this, reply_message).SendError(error); | |
4579 return; | |
4580 } | |
4581 ExtensionAction* action = extension->browser_action(); | |
4582 if (!action) { | |
4583 AutomationJSONReply(this, reply_message).SendError( | |
4584 "Extension doesn't have any browser action."); | |
4599 return; | 4585 return; |
4600 } | 4586 } |
4601 | 4587 |
4602 ExtensionService* service = browser->profile()->GetExtensionService(); | 4588 BrowserActionTestUtil browser_actions(browser); |
4603 if (!service) { | 4589 int num_browser_actions = browser_actions.NumberOfBrowserActions(); |
4604 reply.SendError("No extensions service."); | 4590 int action_index = -1; |
4591 #if defined(TOOLKIT_VIEWS) | |
4592 for (int i = 0; i < num_browser_actions; ++i) { | |
4593 if (extension->id() == browser_actions.GetExtensionId(i)) { | |
4594 action_index = i; | |
4595 break; | |
4596 } | |
4597 } | |
4598 #else | |
4599 // TODO: Implement the platform-specific GetExtensionId() in | |
dennis_jeffrey
2011/12/06 00:49:08
username for the TODO?
kkania
2011/12/12 17:10:06
Frank originally put this here, but I'm willing to
| |
4600 // BrowserActionTestUtil. | |
4601 if (num_browser_actions != 1) { | |
4602 AutomationJSONReply(this, reply_message).SendError(StringPrintf( | |
4603 "Found %d browser actions. Only one browser action must be active.", | |
4604 num_browser_actions)); | |
4605 return; | 4605 return; |
4606 } | 4606 } |
4607 if (!service->GetInstalledExtension(id)) { | 4607 // This extension has a browser action, and there's only one action, so this |
4608 // The extension ID does not correspond to any extension, whether crashed | 4608 // must be the first one. |
4609 // or not. | 4609 action_index = 0; |
4610 reply.SendError(base::StringPrintf("Extension %s is not installed.", | 4610 #endif |
4611 id.c_str())); | 4611 if (action_index == -1) { |
4612 AutomationJSONReply(this, reply_message).SendError( | |
4613 "Extension's browser action is not visible."); | |
4612 return; | 4614 return; |
4613 } | 4615 } |
4614 const Extension* extension = service->GetExtensionById(id, false); | 4616 browser_actions.Press(action_index); |
4615 if (!extension) { | |
4616 reply.SendError("Extension is disabled or has crashed."); | |
4617 return; | |
4618 } | |
4619 | 4617 |
4620 if (extension->browser_action()) { | 4618 if (action->HasPopup(ExtensionTabUtil::GetTabId(tab))) { |
4621 BrowserActionTestUtil browser_actions(browser); | 4619 new ExtensionPopupObserver( |
4622 int num_browser_actions = browser_actions.NumberOfBrowserActions(); | 4620 this, reply_message, extension->id()); |
dennis_jeffrey
2011/12/06 00:49:08
maybe add a comment to explicitly say that this ob
kkania
2011/12/12 17:10:06
Done.
| |
4623 // TODO: Implement the platform-specific GetExtensionId() in | |
4624 // BrowserActionTestUtil. | |
4625 if (num_browser_actions != 1) { | |
4626 reply.SendError(StringPrintf( | |
4627 "Found %d browser actions. Only one browser action must be active.", | |
4628 num_browser_actions)); | |
4629 return; | |
4630 } | |
4631 browser_actions.Press(0); | |
4632 reply.SendSuccess(NULL); | |
4633 return; | |
4634 } else { | 4621 } else { |
4635 reply.SendError("Extension doesn't have any browser action."); | 4622 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
4636 return; | |
4637 } | 4623 } |
4638 } | 4624 } |
4639 | 4625 |
4640 // Sample json input: | 4626 // Sample json input: |
4641 // { "command": "GetAutofillProfile" } | 4627 // { "command": "GetAutofillProfile" } |
4642 // Refer to GetAutofillProfile() in chrome/test/pyautolib/pyauto.py for sample | 4628 // Refer to GetAutofillProfile() in chrome/test/pyautolib/pyauto.py for sample |
4643 // json output. | 4629 // json output. |
4644 void TestingAutomationProvider::GetAutofillProfile( | 4630 void TestingAutomationProvider::GetAutofillProfile( |
4645 Browser* browser, | 4631 Browser* browser, |
4646 DictionaryValue* args, | 4632 DictionaryValue* args, |
(...skipping 1224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5871 } else { | 5857 } else { |
5872 reply.SendError( | 5858 reply.SendError( |
5873 StringPrintf("Unexpected launch type '%s'.", launch_type_str.c_str())); | 5859 StringPrintf("Unexpected launch type '%s'.", launch_type_str.c_str())); |
5874 return; | 5860 return; |
5875 } | 5861 } |
5876 | 5862 |
5877 service->extension_prefs()->SetLaunchType(extension->id(), launch_type); | 5863 service->extension_prefs()->SetLaunchType(extension->id(), launch_type); |
5878 reply.SendSuccess(NULL); | 5864 reply.SendSuccess(NULL); |
5879 } | 5865 } |
5880 | 5866 |
5881 void TestingAutomationProvider::WaitForAllTabsToStopLoading( | 5867 void TestingAutomationProvider::WaitForAllViewsToStopLoading( |
5882 DictionaryValue* args, | 5868 DictionaryValue* args, |
5883 IPC::Message* reply_message) { | 5869 IPC::Message* reply_message) { |
5884 if (AppModalDialogQueue::GetInstance()->HasActiveDialog()) { | 5870 if (AppModalDialogQueue::GetInstance()->HasActiveDialog()) { |
5885 AutomationJSONReply(this, reply_message).SendSuccess(NULL); | 5871 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
5886 return; | 5872 return; |
5887 } | 5873 } |
5888 | 5874 |
5889 // This class will send the message immediately if no tab is loading. | 5875 // This class will send the message immediately if no tab is loading. |
5890 new AllTabsStoppedLoadingObserver(this, reply_message); | 5876 new AllViewsStoppedLoadingObserver( |
5877 this, reply_message, profile()->GetExtensionProcessManager()); | |
5891 } | 5878 } |
5892 | 5879 |
5893 void TestingAutomationProvider::SetPolicies( | 5880 void TestingAutomationProvider::SetPolicies( |
5894 DictionaryValue* args, | 5881 DictionaryValue* args, |
5895 IPC::Message* reply_message) { | 5882 IPC::Message* reply_message) { |
5896 scoped_ptr<AutomationJSONReply> reply( | 5883 scoped_ptr<AutomationJSONReply> reply( |
5897 new AutomationJSONReply(this, reply_message)); | 5884 new AutomationJSONReply(this, reply_message)); |
5898 | 5885 |
5899 #if !defined(ENABLE_CONFIGURATION_POLICY) || defined(OFFICIAL_BUILD) | 5886 #if !defined(ENABLE_CONFIGURATION_POLICY) || defined(OFFICIAL_BUILD) |
5900 reply->SendError("Configuration Policy disabled"); | 5887 reply->SendError("Configuration Policy disabled"); |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6289 profile()->GetExtensionProcessManager(); | 6276 profile()->GetExtensionProcessManager(); |
6290 ExtensionProcessManager::const_iterator iter; | 6277 ExtensionProcessManager::const_iterator iter; |
6291 for (iter = extension_mgr->begin(); iter != extension_mgr->end(); | 6278 for (iter = extension_mgr->begin(); iter != extension_mgr->end(); |
6292 ++iter) { | 6279 ++iter) { |
6293 ExtensionHost* host = *iter; | 6280 ExtensionHost* host = *iter; |
6294 DictionaryValue* dict = new DictionaryValue(); | 6281 DictionaryValue* dict = new DictionaryValue(); |
6295 AutomationId id = automation_util::GetIdForExtensionView(host); | 6282 AutomationId id = automation_util::GetIdForExtensionView(host); |
6296 if (!id.is_valid()) | 6283 if (!id.is_valid()) |
6297 continue; | 6284 continue; |
6298 dict->Set("auto_id", id.ToValue()); | 6285 dict->Set("auto_id", id.ToValue()); |
6299 dict->Set("extension_id", automation_util::GetIdForExtension( | 6286 dict->SetString("extension_id", host->extension_id()); |
6300 host->extension()).ToValue()); | |
6301 view_list->Append(dict); | 6287 view_list->Append(dict); |
6302 } | 6288 } |
6303 DictionaryValue dict; | 6289 DictionaryValue dict; |
6304 dict.Set("views", view_list); | 6290 dict.Set("views", view_list); |
6305 AutomationJSONReply(this, reply_message).SendSuccess(&dict); | 6291 AutomationJSONReply(this, reply_message).SendSuccess(&dict); |
6306 } | 6292 } |
6307 | 6293 |
6308 void TestingAutomationProvider::IsTabIdValid( | 6294 void TestingAutomationProvider::IsTabIdValid( |
6309 DictionaryValue* args, IPC::Message* reply_message) { | 6295 DictionaryValue* args, IPC::Message* reply_message) { |
6310 AutomationJSONReply reply(this, reply_message); | 6296 AutomationJSONReply reply(this, reply_message); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6404 return; | 6390 return; |
6405 } | 6391 } |
6406 | 6392 |
6407 // Create a new observer that waits until the extensions have been fully | 6393 // Create a new observer that waits until the extensions have been fully |
6408 // updated (we should not send the reply until after all extensions have | 6394 // updated (we should not send the reply until after all extensions have |
6409 // been updated). This observer will delete itself. | 6395 // been updated). This observer will delete itself. |
6410 new ExtensionsUpdatedObserver(manager, this, reply_message); | 6396 new ExtensionsUpdatedObserver(manager, this, reply_message); |
6411 updater->CheckNow(); | 6397 updater->CheckNow(); |
6412 } | 6398 } |
6413 | 6399 |
6400 void TestingAutomationProvider::IsPageActionVisible( | |
6401 base::DictionaryValue* args, | |
6402 IPC::Message* reply_message) { | |
6403 AutomationJSONReply reply(this, reply_message); | |
6404 | |
6405 TabContents* tab; | |
6406 std::string error; | |
6407 if (!GetTabFromJSONArgs(args, &tab, &error)) { | |
6408 reply.SendError(error); | |
6409 return; | |
6410 } | |
6411 const Extension* extension; | |
6412 if (!GetEnabledExtensionFromJSONArgs( | |
6413 args, "extension_id", profile(), &extension, &error)) { | |
6414 reply.SendError(error); | |
6415 return; | |
6416 } | |
6417 ExtensionAction* page_action = extension->page_action(); | |
6418 if (!page_action) { | |
6419 reply.SendError("Extension doesn't have any page action"); | |
6420 return; | |
6421 } | |
6422 Browser* browser = automation_util::GetBrowserForTab(tab); | |
6423 if (!browser) { | |
6424 reply.SendError("Tab does not belong to an open browser"); | |
6425 return; | |
6426 } | |
6427 | |
6428 bool is_visible = false; | |
6429 LocationBarTesting* loc_bar = | |
6430 browser->window()->GetLocationBar()->GetLocationBarForTesting(); | |
6431 size_t page_action_visible_count = | |
6432 static_cast<size_t>(loc_bar->PageActionVisibleCount()); | |
6433 for (size_t i = 0; i < page_action_visible_count; ++i) { | |
6434 if (loc_bar->GetVisiblePageAction(i) == page_action) { | |
6435 is_visible = true; | |
6436 break; | |
6437 } | |
6438 } | |
6439 DictionaryValue dict; | |
6440 dict.SetBoolean("is_visible", is_visible); | |
6441 reply.SendSuccess(&dict); | |
6442 } | |
6443 | |
6414 void TestingAutomationProvider::GetChromeDriverAutomationVersion( | 6444 void TestingAutomationProvider::GetChromeDriverAutomationVersion( |
6415 DictionaryValue* args, | 6445 DictionaryValue* args, |
6416 IPC::Message* reply_message) { | 6446 IPC::Message* reply_message) { |
6417 DictionaryValue reply_dict; | 6447 DictionaryValue reply_dict; |
6418 reply_dict.SetInteger("version", automation::kChromeDriverAutomationVersion); | 6448 reply_dict.SetInteger("version", automation::kChromeDriverAutomationVersion); |
6419 AutomationJSONReply(this, reply_message).SendSuccess(&reply_dict); | 6449 AutomationJSONReply(this, reply_message).SendSuccess(&reply_dict); |
6420 } | 6450 } |
6421 | 6451 |
6422 void TestingAutomationProvider::CreateNewAutomationProvider( | 6452 void TestingAutomationProvider::CreateNewAutomationProvider( |
6423 DictionaryValue* args, | 6453 DictionaryValue* args, |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6593 | 6623 |
6594 Send(reply_message_); | 6624 Send(reply_message_); |
6595 redirect_query_ = 0; | 6625 redirect_query_ = 0; |
6596 reply_message_ = NULL; | 6626 reply_message_ = NULL; |
6597 } | 6627 } |
6598 | 6628 |
6599 void TestingAutomationProvider::OnRemoveProvider() { | 6629 void TestingAutomationProvider::OnRemoveProvider() { |
6600 if (g_browser_process) | 6630 if (g_browser_process) |
6601 g_browser_process->GetAutomationProviderList()->RemoveProvider(this); | 6631 g_browser_process->GetAutomationProviderList()->RemoveProvider(this); |
6602 } | 6632 } |
OLD | NEW |