| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/auto_reset.h" | 5 #include "base/auto_reset.h" |
| 6 #include "base/files/scoped_temp_dir.h" | 6 #include "base/files/scoped_temp_dir.h" |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/history/download_row.h" | 10 #include "chrome/browser/history/download_row.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 | 47 |
| 48 // A |DownloadsDOMHandler| that doesn't use a real WebUI object, but is real in | 48 // A |DownloadsDOMHandler| that doesn't use a real WebUI object, but is real in |
| 49 // all other respects. | 49 // all other respects. |
| 50 class MockDownloadsDOMHandler : public DownloadsDOMHandler { | 50 class MockDownloadsDOMHandler : public DownloadsDOMHandler { |
| 51 public: | 51 public: |
| 52 explicit MockDownloadsDOMHandler(content::DownloadManager* dlm) | 52 explicit MockDownloadsDOMHandler(content::DownloadManager* dlm) |
| 53 : DownloadsDOMHandler(dlm), | 53 : DownloadsDOMHandler(dlm), |
| 54 waiting_list_(false), | 54 waiting_list_(false), |
| 55 waiting_updated_(false) { | 55 waiting_updated_(false) { |
| 56 } | 56 } |
| 57 virtual ~MockDownloadsDOMHandler() {} | 57 ~MockDownloadsDOMHandler() override {} |
| 58 | 58 |
| 59 base::ListValue* downloads_list() { return downloads_list_.get(); } | 59 base::ListValue* downloads_list() { return downloads_list_.get(); } |
| 60 base::ListValue* download_updated() { return download_updated_.get(); } | 60 base::ListValue* download_updated() { return download_updated_.get(); } |
| 61 | 61 |
| 62 void WaitForDownloadsList() { | 62 void WaitForDownloadsList() { |
| 63 if (downloads_list_.get()) | 63 if (downloads_list_.get()) |
| 64 return; | 64 return; |
| 65 base::AutoReset<bool> reset_waiting(&waiting_list_, true); | 65 base::AutoReset<bool> reset_waiting(&waiting_list_, true); |
| 66 content::RunMessageLoop(); | 66 content::RunMessageLoop(); |
| 67 } | 67 } |
| 68 | 68 |
| 69 void WaitForDownloadUpdated() { | 69 void WaitForDownloadUpdated() { |
| 70 if (download_updated_.get()) | 70 if (download_updated_.get()) |
| 71 return; | 71 return; |
| 72 base::AutoReset<bool> reset_waiting(&waiting_updated_, true); | 72 base::AutoReset<bool> reset_waiting(&waiting_updated_, true); |
| 73 content::RunMessageLoop(); | 73 content::RunMessageLoop(); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void ForceSendCurrentDownloads() { | 76 void ForceSendCurrentDownloads() { |
| 77 ScheduleSendCurrentDownloads(); | 77 ScheduleSendCurrentDownloads(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void reset_downloads_list() { downloads_list_.reset(); } | 80 void reset_downloads_list() { downloads_list_.reset(); } |
| 81 void reset_download_updated() { download_updated_.reset(); } | 81 void reset_download_updated() { download_updated_.reset(); } |
| 82 | 82 |
| 83 protected: | 83 protected: |
| 84 virtual content::WebContents* GetWebUIWebContents() override { | 84 content::WebContents* GetWebUIWebContents() override { return NULL; } |
| 85 return NULL; | |
| 86 } | |
| 87 | 85 |
| 88 virtual void CallDownloadsList(const base::ListValue& downloads) override { | 86 void CallDownloadsList(const base::ListValue& downloads) override { |
| 89 downloads_list_.reset(downloads.DeepCopy()); | 87 downloads_list_.reset(downloads.DeepCopy()); |
| 90 if (waiting_list_) { | 88 if (waiting_list_) { |
| 91 content::BrowserThread::PostTask(content::BrowserThread::UI, | 89 content::BrowserThread::PostTask(content::BrowserThread::UI, |
| 92 FROM_HERE, | 90 FROM_HERE, |
| 93 base::MessageLoop::QuitClosure()); | 91 base::MessageLoop::QuitClosure()); |
| 94 } | 92 } |
| 95 } | 93 } |
| 96 | 94 |
| 97 virtual void CallDownloadUpdated(const base::ListValue& download) override { | 95 void CallDownloadUpdated(const base::ListValue& download) override { |
| 98 download_updated_.reset(download.DeepCopy()); | 96 download_updated_.reset(download.DeepCopy()); |
| 99 if (waiting_updated_) { | 97 if (waiting_updated_) { |
| 100 content::BrowserThread::PostTask(content::BrowserThread::UI, | 98 content::BrowserThread::PostTask(content::BrowserThread::UI, |
| 101 FROM_HERE, | 99 FROM_HERE, |
| 102 base::MessageLoop::QuitClosure()); | 100 base::MessageLoop::QuitClosure()); |
| 103 } | 101 } |
| 104 } | 102 } |
| 105 | 103 |
| 106 private: | 104 private: |
| 107 scoped_ptr<base::ListValue> downloads_list_; | 105 scoped_ptr<base::ListValue> downloads_list_; |
| 108 scoped_ptr<base::ListValue> download_updated_; | 106 scoped_ptr<base::ListValue> download_updated_; |
| 109 bool waiting_list_; | 107 bool waiting_list_; |
| 110 bool waiting_updated_; | 108 bool waiting_updated_; |
| 111 | 109 |
| 112 DISALLOW_COPY_AND_ASSIGN(MockDownloadsDOMHandler); | 110 DISALLOW_COPY_AND_ASSIGN(MockDownloadsDOMHandler); |
| 113 }; | 111 }; |
| 114 | 112 |
| 115 } // namespace | 113 } // namespace |
| 116 | 114 |
| 117 class DownloadsDOMHandlerTest : public InProcessBrowserTest { | 115 class DownloadsDOMHandlerTest : public InProcessBrowserTest { |
| 118 public: | 116 public: |
| 119 DownloadsDOMHandlerTest() {} | 117 DownloadsDOMHandlerTest() {} |
| 120 | 118 |
| 121 virtual ~DownloadsDOMHandlerTest() {} | 119 virtual ~DownloadsDOMHandlerTest() {} |
| 122 | 120 |
| 123 virtual void SetUpOnMainThread() override { | 121 void SetUpOnMainThread() override { |
| 124 mock_handler_.reset(new MockDownloadsDOMHandler(download_manager())); | 122 mock_handler_.reset(new MockDownloadsDOMHandler(download_manager())); |
| 125 CHECK(downloads_directory_.CreateUniqueTempDir()); | 123 CHECK(downloads_directory_.CreateUniqueTempDir()); |
| 126 browser()->profile()->GetPrefs()->SetFilePath( | 124 browser()->profile()->GetPrefs()->SetFilePath( |
| 127 prefs::kDownloadDefaultDirectory, | 125 prefs::kDownloadDefaultDirectory, |
| 128 downloads_directory_.path()); | 126 downloads_directory_.path()); |
| 129 CHECK(test_server()->Start()); | 127 CHECK(test_server()->Start()); |
| 130 } | 128 } |
| 131 | 129 |
| 132 content::DownloadManager* download_manager() { | 130 content::DownloadManager* download_manager() { |
| 133 return content::BrowserContext::GetDownloadManager(browser()->profile()); | 131 return content::BrowserContext::GetDownloadManager(browser()->profile()); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 // TODO(benjhayden): Test incognito, both downloads_list() and that on-record | 248 // TODO(benjhayden): Test incognito, both downloads_list() and that on-record |
| 251 // calls can't access off-record items. | 249 // calls can't access off-record items. |
| 252 | 250 |
| 253 // TODO(benjhayden): Test that bad download ids incoming from the javascript are | 251 // TODO(benjhayden): Test that bad download ids incoming from the javascript are |
| 254 // dropped on the floor. | 252 // dropped on the floor. |
| 255 | 253 |
| 256 // TODO(benjhayden): Test that IsTemporary() downloads are not shown. | 254 // TODO(benjhayden): Test that IsTemporary() downloads are not shown. |
| 257 | 255 |
| 258 // TODO(benjhayden): Test that RemoveObserver is called on all download items, | 256 // TODO(benjhayden): Test that RemoveObserver is called on all download items, |
| 259 // including items that crossed IsTemporary() and back. | 257 // including items that crossed IsTemporary() and back. |
| OLD | NEW |