Index: chrome/browser/ui/webui/downloads_dom_handler_browsertest.cc |
diff --git a/chrome/browser/ui/webui/downloads_dom_handler_browsertest.cc b/chrome/browser/ui/webui/downloads_dom_handler_browsertest.cc |
index 4d8c060da6811fbce7aa8acad53d01147835b51f..ed0193ad2e0edae0512bddc1477766232af98f4d 100644 |
--- a/chrome/browser/ui/webui/downloads_dom_handler_browsertest.cc |
+++ b/chrome/browser/ui/webui/downloads_dom_handler_browsertest.cc |
@@ -7,6 +7,7 @@ |
#include "base/json/json_reader.h" |
#include "base/prefs/pref_service.h" |
#include "base/values.h" |
+#include "chrome/browser/download/download_item_model.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/webui/downloads_dom_handler.h" |
@@ -85,6 +86,8 @@ class MockDownloadsDOMHandler : public DownloadsDOMHandler { |
void set_manager(content::DownloadManager* manager) { manager_ = manager; } |
+ using DownloadsDOMHandler::FinalizeRemovals; |
+ |
protected: |
content::WebContents* GetWebUIWebContents() override { return NULL; } |
@@ -247,6 +250,7 @@ IN_PROC_BROWSER_TEST_F(DownloadsDOMHandlerTest, ClearAllSkipsInProgress) { |
testing::SetArgPointee<0>(items)); |
mock_handler_->HandleClearAll(NULL); |
+ EXPECT_TRUE(DownloadItemModel(&item).ShouldShowInShelf()); |
} |
// Tests that DownloadsDOMHandler detects new downloads and relays them to the |
@@ -270,6 +274,34 @@ IN_PROC_BROWSER_TEST_F(DownloadsDOMHandlerTest, DownloadsRelayed) { |
EXPECT_EQ(0, static_cast<int>(mock_handler_->downloads_list()->GetSize())); |
} |
+// Tests that DownloadsDOMHandler actually calls DownloadItem::Remove() when |
+// it's closed (and removals can no longer be undone). |
+IN_PROC_BROWSER_TEST_F(DownloadsDOMHandlerTest, RemoveCalledOnPageClose) { |
+ content::MockDownloadManager manager; |
+ mock_handler_->set_manager(&manager); |
+ |
+ content::MockDownloadItem item; |
+ EXPECT_CALL(item, GetId()).WillRepeatedly(testing::Return(1)); |
+ EXPECT_CALL(item, GetState()).WillRepeatedly( |
+ testing::Return(content::DownloadItem::COMPLETE)); |
+ |
+ DownloadItemModel model(&item); |
+ EXPECT_TRUE(model.ShouldShowInShelf()); |
+ |
+ EXPECT_CALL(manager, GetDownload(1)).WillRepeatedly(testing::Return(&item)); |
+ |
+ base::ListValue remove; |
+ remove.AppendString("1"); |
+ EXPECT_CALL(item, UpdateObservers()).Times(1); |
+ mock_handler_->HandleRemove(&remove); |
+ EXPECT_FALSE(model.ShouldShowInShelf()); |
+ |
+ EXPECT_CALL(item, Remove()).Times(1); |
+ // Call |mock_handler_->FinalizeRemovals()| instead of |mock_handler_.reset()| |
+ // because the vtable is affected during destruction and the fake manager |
+ // rigging doesn't work. |
+ mock_handler_->FinalizeRemovals(); |
+} |
// TODO(benjhayden): Test the extension downloads filter for both |
// mock_handler_.downloads_list() and mock_handler_.download_updated(). |