Rely on OnDownloadDestroyed to destroy downloadItem

This commit is contained in:
Cheng Zhao 2016-02-02 18:49:43 +08:00
parent f624800881
commit f1f91828ba
3 changed files with 4 additions and 18 deletions

View file

@ -12,7 +12,6 @@
#include "atom/common/native_mate_converters/gurl_converter.h" #include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/node_includes.h" #include "atom/common/node_includes.h"
#include "base/memory/linked_ptr.h" #include "base/memory/linked_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "native_mate/dictionary.h" #include "native_mate/dictionary.h"
#include "net/base/filename_util.h" #include "net/base/filename_util.h"
@ -71,17 +70,6 @@ DownloadItem::DownloadItem(content::DownloadItem* download_item) :
} }
DownloadItem::~DownloadItem() { DownloadItem::~DownloadItem() {
Destroy(download_item_);
}
void DownloadItem::Destroy(content::DownloadItem* item) {
if (item) {
OnDownloadDestroyed(item);
MarkDestroyed();
// Destroy the native class in next tick.
base::MessageLoop::current()->PostTask(FROM_HERE, GetDestroyClosure());
}
} }
void DownloadItem::OnDownloadUpdated(content::DownloadItem* item) { void DownloadItem::OnDownloadUpdated(content::DownloadItem* item) {
@ -93,7 +81,9 @@ void DownloadItem::OnDownloadDestroyed(content::DownloadItem* download_item) {
auto iter = g_download_item_objects.find(download_item->GetId()); auto iter = g_download_item_objects.find(download_item->GetId());
if (iter != g_download_item_objects.end()) if (iter != g_download_item_objects.end())
g_download_item_objects.erase(iter); g_download_item_objects.erase(iter);
download_item_ = nullptr;
// Destroy the wrapper once the download_item is destroyed.
delete this;
} }
int64 DownloadItem::GetReceivedBytes() { int64 DownloadItem::GetReceivedBytes() {

View file

@ -36,8 +36,6 @@ class DownloadItem : public mate::TrackableObject<DownloadItem>,
static void BuildPrototype(v8::Isolate* isolate, static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype); v8::Local<v8::ObjectTemplate> prototype);
void Destroy(content::DownloadItem* download_item);
protected: protected:
explicit DownloadItem(content::DownloadItem* download_item); explicit DownloadItem(content::DownloadItem* download_item);
~DownloadItem(); ~DownloadItem();

View file

@ -306,14 +306,12 @@ void Session::OnDownloadCreated(content::DownloadManager* manager,
auto web_contents = item->GetWebContents(); auto web_contents = item->GetWebContents();
if (SavePageHandler::IsSavePageTypes(item->GetMimeType())) if (SavePageHandler::IsSavePageTypes(item->GetMimeType()))
return; return;
auto download_item_handle = DownloadItem::Create(isolate(), item);
bool prevent_default = Emit( bool prevent_default = Emit(
"will-download", "will-download",
download_item_handle, DownloadItem::Create(isolate(), item),
api::WebContents::CreateFrom(isolate(), web_contents)); api::WebContents::CreateFrom(isolate(), web_contents));
if (prevent_default) { if (prevent_default) {
item->Cancel(true); item->Cancel(true);
download_item_handle->Destroy(item);
item->Remove(); item->Remove();
} }
} }