Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4224)

Unified Diff: chrome/browser/extensions/api/downloads/downloads_api.cc

Issue 10542038: Rewrite DownloadsApiTest in C++. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/downloads/downloads_api.cc
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index ea28deb0d027ea02f13bf8ead0db165a13c52ad8..ca56cf97a2c19244abe07a594b8cc8319c72c700 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -37,9 +37,11 @@
#include "chrome/browser/renderer_host/chrome_render_message_filter.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/webui/web_ui_util.h"
+#include "chrome/common/chrome_notification_types.h"
#include "content/public/browser/download_interrupt_reasons.h"
#include "content/public/browser/download_item.h"
#include "content/public/browser/download_save_info.h"
+#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/resource_context.h"
@@ -913,29 +915,19 @@ void DownloadsGetFileIconFunction::OnIconURLExtracted(const std::string& url) {
SendResponse(error_.empty());
}
-ExtensionDownloadsEventRouter::ExtensionDownloadsEventRouter(Profile* profile)
+ExtensionDownloadsEventRouter::ExtensionDownloadsEventRouter(
+ Profile* profile,
+ DownloadManager* manager)
: profile_(profile),
- manager_(NULL) {
+ manager_(manager) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(profile_);
- // Register a callback with the DownloadService for this profile to be called
- // when it creates the DownloadManager, or now if the manager already exists.
- DownloadServiceFactory::GetForProfile(profile)->OnManagerCreated(base::Bind(
- &ExtensionDownloadsEventRouter::Init, base::Unretained(this)));
-}
-
-// The only public methods on this class are ModelChanged() and
-// ManagerGoingDown(), and they are only called by DownloadManager, so
-// there's no way for any methods on this class to be called before
-// DownloadService calls Init() via the OnManagerCreated Callback above.
-void ExtensionDownloadsEventRouter::Init(DownloadManager* manager) {
- DCHECK(manager_ == NULL);
- manager_ = manager;
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(manager_);
manager_->AddObserver(this);
}
ExtensionDownloadsEventRouter::~ExtensionDownloadsEventRouter() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (manager_ != NULL)
manager_->RemoveObserver(this);
for (ItemMap::const_iterator iter = downloads_.begin();
@@ -958,8 +950,7 @@ ExtensionDownloadsEventRouter::OnChangedStat::~OnChangedStat() {
}
void ExtensionDownloadsEventRouter::OnDownloadUpdated(DownloadItem* item) {
- if (!profile_)
- return;
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
int download_id = item->GetId();
if (item->GetState() == DownloadItem::REMOVING) {
// The REMOVING state indicates that this item is being erased.
@@ -1025,11 +1016,10 @@ void ExtensionDownloadsEventRouter::OnDownloadUpdated(DownloadItem* item) {
}
void ExtensionDownloadsEventRouter::OnDownloadOpened(DownloadItem* item) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
void ExtensionDownloadsEventRouter::ModelChanged(DownloadManager* manager) {
- if (!profile_)
- return;
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(manager_ == manager);
typedef std::set<int> DownloadIdSet;
@@ -1084,15 +1074,14 @@ void ExtensionDownloadsEventRouter::ModelChanged(DownloadManager* manager) {
void ExtensionDownloadsEventRouter::ManagerGoingDown(
DownloadManager* manager) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
manager_->RemoveObserver(this);
manager_ = NULL;
- profile_ = NULL;
}
void ExtensionDownloadsEventRouter::DispatchEvent(
const char* event_name, base::Value* arg) {
- if (!profile_ || !profile_->GetExtensionEventRouter())
- return;
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
base::ListValue args;
args.Append(arg);
std::string json_args;
@@ -1102,4 +1091,12 @@ void ExtensionDownloadsEventRouter::DispatchEvent(
json_args,
profile_,
GURL());
+
+ DownloadsNotificationSource notification_source;
+ notification_source.event_name = event_name;
+ notification_source.profile = profile_;
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_EXTENSION_DOWNLOADS_EVENT,
+ content::Source<DownloadsNotificationSource>(&notification_source),
+ content::Details<std::string>(&json_args));
}

Powered by Google App Engine
This is Rietveld 408576698