OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/message_box_flags.h" | 7 #include "app/message_box_flags.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
(...skipping 2503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2514 reply.SendSuccess(NULL); | 2514 reply.SendSuccess(NULL); |
2515 } | 2515 } |
2516 | 2516 |
2517 // Sample json input: { "command": "GetDownloadsInfo" } | 2517 // Sample json input: { "command": "GetDownloadsInfo" } |
2518 // Refer chrome/test/pyautolib/download_info.py for sample json output. | 2518 // Refer chrome/test/pyautolib/download_info.py for sample json output. |
2519 void TestingAutomationProvider::GetDownloadsInfo(Browser* browser, | 2519 void TestingAutomationProvider::GetDownloadsInfo(Browser* browser, |
2520 DictionaryValue* args, | 2520 DictionaryValue* args, |
2521 IPC::Message* reply_message) { | 2521 IPC::Message* reply_message) { |
2522 AutomationJSONReply reply(this, reply_message); | 2522 AutomationJSONReply reply(this, reply_message); |
2523 | 2523 |
2524 if (!profile_->HasCreatedDownloadManager()) { | 2524 if (!browser->profile()->HasCreatedDownloadManager()) { |
2525 reply.SendError("no download manager"); | 2525 reply.SendError("no download manager"); |
2526 return; | 2526 return; |
2527 } | 2527 } |
2528 | 2528 |
2529 scoped_ptr<DictionaryValue> return_value(new DictionaryValue); | 2529 scoped_ptr<DictionaryValue> return_value(new DictionaryValue); |
2530 std::vector<DownloadItem*> downloads; | 2530 std::vector<DownloadItem*> downloads; |
2531 profile_->GetDownloadManager()->GetAllDownloads(FilePath(), &downloads); | 2531 browser->profile()->GetDownloadManager()-> |
| 2532 GetAllDownloads(FilePath(), &downloads); |
2532 | 2533 |
2533 ListValue* list_of_downloads = new ListValue; | 2534 ListValue* list_of_downloads = new ListValue; |
2534 for (std::vector<DownloadItem*>::iterator it = downloads.begin(); | 2535 for (std::vector<DownloadItem*>::iterator it = downloads.begin(); |
2535 it != downloads.end(); | 2536 it != downloads.end(); |
2536 it++) { // Fill info about each download item. | 2537 it++) { // Fill info about each download item. |
2537 list_of_downloads->Append(GetDictionaryFromDownloadItem(*it)); | 2538 list_of_downloads->Append(GetDictionaryFromDownloadItem(*it)); |
2538 } | 2539 } |
2539 return_value->Set("downloads", list_of_downloads); | 2540 return_value->Set("downloads", list_of_downloads); |
2540 reply.SendSuccess(return_value.get()); | 2541 reply.SendSuccess(return_value.get()); |
2541 // All value objects allocated above are owned by |return_value| | 2542 // All value objects allocated above are owned by |return_value| |
2542 // and get freed by it. | 2543 // and get freed by it. |
2543 } | 2544 } |
2544 | 2545 |
2545 void TestingAutomationProvider::WaitForDownloadsToComplete( | 2546 void TestingAutomationProvider::WaitForDownloadsToComplete( |
2546 Browser* browser, | 2547 Browser* browser, |
2547 DictionaryValue* args, | 2548 DictionaryValue* args, |
2548 IPC::Message* reply_message) { | 2549 IPC::Message* reply_message) { |
2549 | 2550 |
2550 // Look for a quick return. | 2551 // Look for a quick return. |
2551 if (!profile_->HasCreatedDownloadManager()) { | 2552 if (!browser->profile()->HasCreatedDownloadManager()) { |
2552 // No download manager. | 2553 // No download manager. |
2553 AutomationJSONReply(this, reply_message).SendSuccess(NULL); | 2554 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
2554 return; | 2555 return; |
2555 } | 2556 } |
2556 std::vector<DownloadItem*> downloads; | 2557 std::vector<DownloadItem*> downloads; |
2557 profile_->GetDownloadManager()->GetCurrentDownloads(FilePath(), &downloads); | 2558 browser->profile()->GetDownloadManager()-> |
| 2559 GetCurrentDownloads(FilePath(), &downloads); |
2558 if (downloads.empty()) { | 2560 if (downloads.empty()) { |
2559 AutomationJSONReply(this, reply_message).SendSuccess(NULL); | 2561 AutomationJSONReply(this, reply_message).SendSuccess(NULL); |
2560 return; | 2562 return; |
2561 } | 2563 } |
2562 | |
2563 // The observer owns itself. When the last observed item pings, it | 2564 // The observer owns itself. When the last observed item pings, it |
2564 // deletes itself. | 2565 // deletes itself. |
2565 AutomationProviderDownloadItemObserver* item_observer = | 2566 AutomationProviderDownloadItemObserver* item_observer = |
2566 new AutomationProviderDownloadItemObserver( | 2567 new AutomationProviderDownloadItemObserver( |
2567 this, reply_message, downloads.size()); | 2568 this, reply_message, downloads.size()); |
2568 for (std::vector<DownloadItem*>::iterator i = downloads.begin(); | 2569 for (std::vector<DownloadItem*>::iterator i = downloads.begin(); |
2569 i != downloads.end(); | 2570 i != downloads.end(); |
2570 i++) { | 2571 i++) { |
2571 (*i)->AddObserver(item_observer); | 2572 (*i)->AddObserver(item_observer); |
2572 } | 2573 } |
(...skipping 22 matching lines...) Expand all Loading... |
2595 | 2596 |
2596 // See PerformActionOnDownload() in chrome/test/pyautolib/pyauto.py for sample | 2597 // See PerformActionOnDownload() in chrome/test/pyautolib/pyauto.py for sample |
2597 // json input and output. | 2598 // json input and output. |
2598 void TestingAutomationProvider::PerformActionOnDownload( | 2599 void TestingAutomationProvider::PerformActionOnDownload( |
2599 Browser* browser, | 2600 Browser* browser, |
2600 DictionaryValue* args, | 2601 DictionaryValue* args, |
2601 IPC::Message* reply_message) { | 2602 IPC::Message* reply_message) { |
2602 int id; | 2603 int id; |
2603 std::string action; | 2604 std::string action; |
2604 | 2605 |
2605 if (!profile_->HasCreatedDownloadManager()) { | 2606 if (!browser->profile()->HasCreatedDownloadManager()) { |
2606 AutomationJSONReply(this, reply_message).SendError("No download manager."); | 2607 AutomationJSONReply(this, reply_message).SendError("No download manager."); |
2607 return; | 2608 return; |
2608 } | 2609 } |
2609 if (!args->GetInteger("id", &id) || !args->GetString("action", &action)) { | 2610 if (!args->GetInteger("id", &id) || !args->GetString("action", &action)) { |
2610 AutomationJSONReply(this, reply_message).SendError( | 2611 AutomationJSONReply(this, reply_message).SendError( |
2611 "Must include int id and string action."); | 2612 "Must include int id and string action."); |
2612 return; | 2613 return; |
2613 } | 2614 } |
2614 | 2615 |
2615 DownloadManager* download_manager = profile_->GetDownloadManager(); | 2616 DownloadManager* download_manager = browser->profile()->GetDownloadManager(); |
2616 DownloadItem* selected_item = GetDownloadItemFromId(id, download_manager); | 2617 DownloadItem* selected_item = GetDownloadItemFromId(id, download_manager); |
2617 if (!selected_item) { | 2618 if (!selected_item) { |
2618 AutomationJSONReply(this, reply_message).SendError( | 2619 AutomationJSONReply(this, reply_message).SendError( |
2619 StringPrintf("No download with an id of %d\n", id)); | 2620 StringPrintf("No download with an id of %d\n", id)); |
2620 return; | 2621 return; |
2621 } | 2622 } |
2622 | 2623 |
2623 if (action == "open") { | 2624 if (action == "open") { |
2624 selected_item->AddObserver( | 2625 selected_item->AddObserver( |
2625 new AutomationProviderDownloadUpdatedObserver( | 2626 new AutomationProviderDownloadUpdatedObserver( |
(...skipping 1891 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4517 // If you change this, update Observer for NotificationType::SESSION_END | 4518 // If you change this, update Observer for NotificationType::SESSION_END |
4518 // below. | 4519 // below. |
4519 MessageLoop::current()->PostTask(FROM_HERE, | 4520 MessageLoop::current()->PostTask(FROM_HERE, |
4520 NewRunnableMethod(this, &TestingAutomationProvider::OnRemoveProvider)); | 4521 NewRunnableMethod(this, &TestingAutomationProvider::OnRemoveProvider)); |
4521 } | 4522 } |
4522 } | 4523 } |
4523 | 4524 |
4524 void TestingAutomationProvider::OnRemoveProvider() { | 4525 void TestingAutomationProvider::OnRemoveProvider() { |
4525 AutomationProviderList::GetInstance()->RemoveProvider(this); | 4526 AutomationProviderList::GetInstance()->RemoveProvider(this); |
4526 } | 4527 } |
OLD | NEW |