Skip to content

Commit 84cea1b

Browse files
committed
Merge pull request electron#3789 from atom/template-web-request
Cleanup the webRequest and cookies code
2 parents 98ba1a2 + 10cad5d commit 84cea1b

15 files changed

+954
-850
lines changed

atom/browser/api/atom_api_cookies.cc

Lines changed: 125 additions & 233 deletions
Large diffs are not rendered by default.

atom/browser/api/atom_api_cookies.h

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,7 @@ namespace content {
2020
class BrowserContext;
2121
}
2222

23-
namespace mate {
24-
class Dictionary;
25-
}
26-
2723
namespace net {
28-
class CookieStore;
2924
class URLRequestContextGetter;
3025
}
3126

@@ -35,9 +30,13 @@ namespace api {
3530

3631
class Cookies : public mate::TrackableObject<Cookies> {
3732
public:
38-
// node.js style callback function(error, result)
39-
typedef base::Callback<void(v8::Local<v8::Value>, v8::Local<v8::Value>)>
40-
CookiesCallback;
33+
enum Error {
34+
SUCCESS,
35+
FAILED,
36+
};
37+
38+
using GetCallback = base::Callback<void(Error, const net::CookieList&)>;
39+
using SetCallback = base::Callback<void(Error)>;
4140

4241
static mate::Handle<Cookies> Create(v8::Isolate* isolate,
4342
content::BrowserContext* browser_context);
@@ -50,34 +49,12 @@ class Cookies : public mate::TrackableObject<Cookies> {
5049
explicit Cookies(content::BrowserContext* browser_context);
5150
~Cookies();
5251

53-
void Get(const base::DictionaryValue& options,
54-
const CookiesCallback& callback);
55-
void Remove(const mate::Dictionary& details,
56-
const CookiesCallback& callback);
57-
void Set(const base::DictionaryValue& details,
58-
const CookiesCallback& callback);
59-
60-
void GetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> filter,
61-
const CookiesCallback& callback);
62-
void OnGetCookies(scoped_ptr<base::DictionaryValue> filter,
63-
const CookiesCallback& callback,
64-
const net::CookieList& cookie_list);
65-
66-
void RemoveCookiesOnIOThread(const GURL& url,
67-
const std::string& name,
68-
const CookiesCallback& callback);
69-
void OnRemoveCookies(const CookiesCallback& callback);
70-
71-
void SetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> details,
72-
const GURL& url,
73-
const CookiesCallback& callback);
74-
void OnSetCookies(const CookiesCallback& callback,
75-
bool set_success);
52+
void Get(const base::DictionaryValue& filter, const GetCallback& callback);
53+
void Remove(const GURL& url, const std::string& name,
54+
const base::Closure& callback);
55+
void Set(const base::DictionaryValue& details, const SetCallback& callback);
7656

7757
private:
78-
// Must be called on IO thread.
79-
net::CookieStore* GetCookieStore();
80-
8158
net::URLRequestContextGetter* request_context_getter_;
8259

8360
DISALLOW_COPY_AND_ASSIGN(Cookies);

atom/browser/api/atom_api_web_contents.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "atom/browser/api/atom_api_web_contents.h"
66

77
#include <set>
8+
#include <string>
89

910
#include "atom/browser/api/atom_api_session.h"
1011
#include "atom/browser/api/atom_api_window.h"

atom/browser/api/atom_api_web_request.cc

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
#include "atom/browser/api/atom_api_web_request.h"
66

7+
#include <string>
8+
79
#include "atom/browser/atom_browser_context.h"
810
#include "atom/browser/net/atom_network_delegate.h"
911
#include "atom/common/native_mate_converters/callback.h"
@@ -15,6 +17,21 @@
1517

1618
using content::BrowserThread;
1719

20+
namespace mate {
21+
22+
template<>
23+
struct Converter<extensions::URLPattern> {
24+
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
25+
extensions::URLPattern* out) {
26+
std::string pattern;
27+
if (!ConvertFromV8(isolate, val, &pattern))
28+
return false;
29+
return out->Parse(pattern) == extensions::URLPattern::PARSE_SUCCESS;
30+
}
31+
};
32+
33+
} // namespace mate
34+
1835
namespace atom {
1936

2037
namespace api {
@@ -26,23 +43,38 @@ WebRequest::WebRequest(AtomBrowserContext* browser_context)
2643
WebRequest::~WebRequest() {
2744
}
2845

29-
template<AtomNetworkDelegate::EventTypes type>
30-
void WebRequest::SetListener(mate::Arguments* args) {
31-
DCHECK_CURRENTLY_ON(BrowserThread::UI);
46+
template<AtomNetworkDelegate::SimpleEvent type>
47+
void WebRequest::SetSimpleListener(mate::Arguments* args) {
48+
SetListener<AtomNetworkDelegate::SimpleListener>(
49+
&AtomNetworkDelegate::SetSimpleListenerInIO, type, args);
50+
}
3251

33-
scoped_ptr<base::DictionaryValue> filter(new base::DictionaryValue());
34-
args->GetNext(filter.get());
35-
AtomNetworkDelegate::Listener callback;
36-
if (!args->GetNext(&callback)) {
37-
args->ThrowError("Must pass null or a function");
52+
template<AtomNetworkDelegate::ResponseEvent type>
53+
void WebRequest::SetResponseListener(mate::Arguments* args) {
54+
SetListener<AtomNetworkDelegate::ResponseListener>(
55+
&AtomNetworkDelegate::SetResponseListenerInIO, type, args);
56+
}
57+
58+
template<typename Listener, typename Method, typename Event>
59+
void WebRequest::SetListener(Method method, Event type, mate::Arguments* args) {
60+
// { urls }.
61+
URLPatterns patterns;
62+
mate::Dictionary dict;
63+
args->GetNext(&dict) && dict.Get("urls", &patterns);
64+
65+
// Function or null.
66+
v8::Local<v8::Value> value;
67+
Listener listener;
68+
if (!args->GetNext(&listener) &&
69+
!(args->GetNext(&value) && value->IsNull())) {
70+
args->ThrowError("Must pass null or a Function");
3871
return;
3972
}
4073

4174
auto delegate = browser_context_->network_delegate();
4275
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
43-
base::Bind(&AtomNetworkDelegate::SetListenerInIO,
44-
base::Unretained(delegate),
45-
type, base::Passed(&filter), callback));
76+
base::Bind(method, base::Unretained(delegate), type,
77+
patterns, listener));
4678
}
4779

4880
// static
@@ -57,28 +89,28 @@ void WebRequest::BuildPrototype(v8::Isolate* isolate,
5789
v8::Local<v8::ObjectTemplate> prototype) {
5890
mate::ObjectTemplateBuilder(isolate, prototype)
5991
.SetMethod("onBeforeRequest",
60-
&WebRequest::SetListener<
92+
&WebRequest::SetResponseListener<
6193
AtomNetworkDelegate::kOnBeforeRequest>)
6294
.SetMethod("onBeforeSendHeaders",
63-
&WebRequest::SetListener<
95+
&WebRequest::SetResponseListener<
6496
AtomNetworkDelegate::kOnBeforeSendHeaders>)
65-
.SetMethod("onSendHeaders",
66-
&WebRequest::SetListener<
67-
AtomNetworkDelegate::kOnSendHeaders>)
6897
.SetMethod("onHeadersReceived",
69-
&WebRequest::SetListener<
98+
&WebRequest::SetResponseListener<
7099
AtomNetworkDelegate::kOnHeadersReceived>)
100+
.SetMethod("onSendHeaders",
101+
&WebRequest::SetSimpleListener<
102+
AtomNetworkDelegate::kOnSendHeaders>)
71103
.SetMethod("onBeforeRedirect",
72-
&WebRequest::SetListener<
104+
&WebRequest::SetSimpleListener<
73105
AtomNetworkDelegate::kOnBeforeRedirect>)
74106
.SetMethod("onResponseStarted",
75-
&WebRequest::SetListener<
107+
&WebRequest::SetSimpleListener<
76108
AtomNetworkDelegate::kOnResponseStarted>)
77109
.SetMethod("onCompleted",
78-
&WebRequest::SetListener<
110+
&WebRequest::SetSimpleListener<
79111
AtomNetworkDelegate::kOnCompleted>)
80112
.SetMethod("onErrorOccurred",
81-
&WebRequest::SetListener<
113+
&WebRequest::SetSimpleListener<
82114
AtomNetworkDelegate::kOnErrorOccurred>);
83115
}
84116

atom/browser/api/atom_api_web_request.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
#ifndef ATOM_BROWSER_API_ATOM_API_WEB_REQUEST_H_
66
#define ATOM_BROWSER_API_ATOM_API_WEB_REQUEST_H_
77

8-
#include <string>
9-
108
#include "atom/browser/api/trackable_object.h"
119
#include "atom/browser/net/atom_network_delegate.h"
1210
#include "native_mate/arguments.h"
@@ -31,8 +29,13 @@ class WebRequest : public mate::TrackableObject<WebRequest> {
3129
explicit WebRequest(AtomBrowserContext* browser_context);
3230
~WebRequest();
3331

34-
template<AtomNetworkDelegate::EventTypes Event>
35-
void SetListener(mate::Arguments* args);
32+
// C++ can not distinguish overloaded member function.
33+
template<AtomNetworkDelegate::SimpleEvent type>
34+
void SetSimpleListener(mate::Arguments* args);
35+
template<AtomNetworkDelegate::ResponseEvent type>
36+
void SetResponseListener(mate::Arguments* args);
37+
template<typename Listener, typename Method, typename Event>
38+
void SetListener(Method method, Event type, mate::Arguments* args);
3639

3740
private:
3841
scoped_refptr<AtomBrowserContext> browser_context_;

atom/browser/api/lib/session.coffee

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ PERSIST_PERFIX = 'persist:'
66

77
# Returns the Session from |partition| string.
88
exports.fromPartition = (partition='') ->
9+
return exports.defaultSession if partition is ''
910
if partition.startsWith PERSIST_PERFIX
1011
bindings.fromPartition partition.substr(PERSIST_PERFIX.length), false
1112
else
@@ -14,7 +15,7 @@ exports.fromPartition = (partition='') ->
1415
# Returns the default session.
1516
Object.defineProperty exports, 'defaultSession',
1617
enumerable: true
17-
get: -> exports.fromPartition 'persist:'
18+
get: -> bindings.fromPartition '', false
1819

1920
wrapSession = (session) ->
2021
# session is an EventEmitter.

0 commit comments

Comments
 (0)