summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/save_page_browsertest.cc
diff options
context:
space:
mode:
authorasanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-13 20:10:41 +0000
committerasanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-13 20:10:41 +0000
commit861b4d0a0b0cf9e5224d004eb99ce768221000ed (patch)
treee9c9b7e92a8ca67ed805e74cf6fd43a9619f9242 /chrome/browser/download/save_page_browsertest.cc
parent163a0dd59f459e0c25067b14e8e0620bb18039f8 (diff)
downloadchromium_src-861b4d0a0b0cf9e5224d004eb99ce768221000ed.zip
chromium_src-861b4d0a0b0cf9e5224d004eb99ce768221000ed.tar.gz
chromium_src-861b4d0a0b0cf9e5224d004eb99ce768221000ed.tar.bz2
[Downloads] Make ChromeDownloadManagerDelegate owned by DownloadService.
Currently ChromeDownloadManagerDelegate is reference counted. Since it also posts long running tasks, this causes it to outlive the associated profile on occasion. Since there are multiple references to Profile/BrowserContext owned objects from within CDMD, this can introduce subtle use-after-free errors. This change is to make CDMD owned by DownloadService so that it doesn't outlive the Profile. BUG=317913 Review URL: https://codereview.chromium.org/69793006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240726 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/download/save_page_browsertest.cc')
-rw-r--r--chrome/browser/download/save_page_browsertest.cc18
1 files changed, 9 insertions, 9 deletions
diff --git a/chrome/browser/download/save_page_browsertest.cc b/chrome/browser/download/save_page_browsertest.cc
index 70636b9..8eb7341 100644
--- a/chrome/browser/download/save_page_browsertest.cc
+++ b/chrome/browser/download/save_page_browsertest.cc
@@ -448,26 +448,28 @@ class DelayingDownloadManagerDelegate : public ChromeDownloadManagerDelegate {
explicit DelayingDownloadManagerDelegate(Profile* profile)
: ChromeDownloadManagerDelegate(profile) {
}
+ virtual ~DelayingDownloadManagerDelegate() {}
+
virtual bool ShouldCompleteDownload(
content::DownloadItem* item,
const base::Closure& user_complete_callback) OVERRIDE {
return false;
}
- protected:
- virtual ~DelayingDownloadManagerDelegate() {}
-
private:
DISALLOW_COPY_AND_ASSIGN(DelayingDownloadManagerDelegate);
};
IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyTabDestroy) {
GURL url = NavigateToMockURL("a");
- DownloadManager* manager(GetDownloadManager());
- scoped_refptr<DelayingDownloadManagerDelegate> delaying_delegate(
+ scoped_ptr<DelayingDownloadManagerDelegate> delaying_delegate(
new DelayingDownloadManagerDelegate(browser()->profile()));
- delaying_delegate->SetNextId(content::DownloadItem::kInvalidId + 1);
- manager->SetDelegate(delaying_delegate.get());
+ delaying_delegate->GetDownloadIdReceiverCallback().Run(
+ content::DownloadItem::kInvalidId + 1);
+ DownloadServiceFactory::GetForBrowserContext(browser()->profile())->
+ SetDownloadManagerDelegateForTesting(
+ delaying_delegate.PassAs<ChromeDownloadManagerDelegate>());
+ DownloadManager* manager(GetDownloadManager());
std::vector<DownloadItem*> downloads;
manager->GetAllDownloads(&downloads);
ASSERT_EQ(0u, downloads.size());
@@ -487,8 +489,6 @@ IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyTabDestroy) {
EXPECT_FALSE(base::PathExists(full_file_name));
EXPECT_FALSE(base::PathExists(dir));
-
- manager->SetDelegate(NULL);
}
// Disabled on Windows due to flakiness. http://crbug.com/162323