Pass weak pointers when posting tasks to other threads.
This commit is contained in:
parent
0b01e49cd3
commit
8464fb4f64
1 changed files with 14 additions and 6 deletions
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "browser/api/atom_api_protocol.h"
|
#include "browser/api/atom_api_protocol.h"
|
||||||
|
|
||||||
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "browser/atom_browser_context.h"
|
#include "browser/atom_browser_context.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "net/url_request/url_request_context.h"
|
#include "net/url_request/url_request_context.h"
|
||||||
|
@ -39,7 +40,9 @@ class AdapterRequestJob : public net::URLRequestJob {
|
||||||
public:
|
public:
|
||||||
AdapterRequestJob(net::URLRequest* request,
|
AdapterRequestJob(net::URLRequest* request,
|
||||||
net::NetworkDelegate* network_delegate)
|
net::NetworkDelegate* network_delegate)
|
||||||
: URLRequestJob(request, network_delegate) {}
|
: URLRequestJob(request, network_delegate),
|
||||||
|
weak_factory_(this) {
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Start() OVERRIDE {
|
virtual void Start() OVERRIDE {
|
||||||
|
@ -47,7 +50,8 @@ class AdapterRequestJob : public net::URLRequestJob {
|
||||||
content::BrowserThread::PostTask(
|
content::BrowserThread::PostTask(
|
||||||
content::BrowserThread::UI,
|
content::BrowserThread::UI,
|
||||||
FROM_HERE,
|
FROM_HERE,
|
||||||
base::Bind(&AdapterRequestJob::GetJobTypeInUI, base::Unretained(this)));
|
base::Bind(&AdapterRequestJob::GetJobTypeInUI,
|
||||||
|
weak_factory_.GetWeakPtr()));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Kill() OVERRIDE {
|
virtual void Kill() OVERRIDE {
|
||||||
|
@ -112,10 +116,10 @@ class AdapterRequestJob : public net::URLRequestJob {
|
||||||
// Determine the type of the job we are going to create.
|
// Determine the type of the job we are going to create.
|
||||||
if (result->IsString()) {
|
if (result->IsString()) {
|
||||||
type_ = STRING_JOB;
|
type_ = STRING_JOB;
|
||||||
string_ = *v8::String::Utf8Value(result);
|
data_ = *v8::String::Utf8Value(result);
|
||||||
} else {
|
} else {
|
||||||
type_ = ERROR_JOB;
|
type_ = ERROR_JOB;
|
||||||
error_code_ = ERR_NOT_IMPLEMENTED;
|
error_code_ = net::ERR_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go back to the IO thread.
|
// Go back to the IO thread.
|
||||||
|
@ -123,7 +127,7 @@ class AdapterRequestJob : public net::URLRequestJob {
|
||||||
content::BrowserThread::IO,
|
content::BrowserThread::IO,
|
||||||
FROM_HERE,
|
FROM_HERE,
|
||||||
base::Bind(&AdapterRequestJob::CreateJobAndStart,
|
base::Bind(&AdapterRequestJob::CreateJobAndStart,
|
||||||
base::Unretained(this)));
|
weak_factory_.GetWeakPtr()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateJobAndStart() {
|
void CreateJobAndStart() {
|
||||||
|
@ -137,8 +141,12 @@ class AdapterRequestJob : public net::URLRequestJob {
|
||||||
|
|
||||||
JOB_TYPE type_;
|
JOB_TYPE type_;
|
||||||
int error_code_;
|
int error_code_;
|
||||||
std::string string_;
|
|
||||||
base::FilePath file_path_;
|
base::FilePath file_path_;
|
||||||
|
std::string mime_type_;
|
||||||
|
std::string charset_;
|
||||||
|
std::string data_;
|
||||||
|
|
||||||
|
base::WeakPtrFactory<AdapterRequestJob> weak_factory_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AdapterRequestJob);
|
DISALLOW_COPY_AND_ASSIGN(AdapterRequestJob);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue