From ce2ea963b9f1da94fbbd167d907704d7417756e6 Mon Sep 17 00:00:00 2001 From: Robo Date: Mon, 1 Feb 2016 19:03:23 +0530 Subject: [PATCH] session: api to clear host resolver cache --- atom/browser/api/atom_api_session.cc | 25 +++++++++++++++++++++++++ atom/browser/api/atom_api_session.h | 1 + docs/api/session.md | 6 ++++++ 3 files changed, 32 insertions(+) diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index b903240..e5c5198 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -36,6 +36,7 @@ #include "native_mate/object_template_builder.h" #include "net/base/load_flags.h" #include "net/disk_cache/disk_cache.h" +#include "net/dns/host_cache.h" #include "net/proxy/proxy_service.h" #include "net/proxy/proxy_config_service_fixed.h" #include "net/url_request/url_request_context.h" @@ -271,6 +272,19 @@ void SetProxyInIO(net::URLRequestContextGetter* getter, RunCallbackInUI(callback); } +void ClearHostResolverCacheInIO( + const scoped_refptr& context_getter, + const base::Closure& callback) { + auto request_context = context_getter->GetURLRequestContext(); + auto cache = request_context->host_resolver()->GetHostCache(); + if (cache) { + cache->clear(); + DCHECK_EQ(0u, cache->size()); + if (!callback.is_null()) + RunCallbackInUI(callback); + } +} + } // namespace Session::Session(AtomBrowserContext* browser_context) @@ -411,6 +425,16 @@ void Session::SetPermissionRequestHandler(v8::Local val, permission_manager->SetPermissionRequestHandler(handler); } +void Session::ClearHostResolverCache(mate::Arguments* args) { + base::Closure callback; + args->GetNext(&callback); + + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, + base::Bind(&ClearHostResolverCacheInIO, + make_scoped_refptr(browser_context_->GetRequestContext()), + callback)); +} + v8::Local Session::Cookies(v8::Isolate* isolate) { if (cookies_.IsEmpty()) { auto handle = atom::api::Cookies::Create(isolate, browser_context()); @@ -464,6 +488,7 @@ void Session::BuildPrototype(v8::Isolate* isolate, .SetMethod("setCertificateVerifyProc", &Session::SetCertVerifyProc) .SetMethod("setPermissionRequestHandler", &Session::SetPermissionRequestHandler) + .SetMethod("clearHostResolverCache", &Session::ClearHostResolverCache) .SetProperty("cookies", &Session::Cookies) .SetProperty("webRequest", &Session::WebRequest); } diff --git a/atom/browser/api/atom_api_session.h b/atom/browser/api/atom_api_session.h index efcafbf..02d8ba5 100644 --- a/atom/browser/api/atom_api_session.h +++ b/atom/browser/api/atom_api_session.h @@ -78,6 +78,7 @@ class Session: public mate::TrackableObject, void SetCertVerifyProc(v8::Local proc, mate::Arguments* args); void SetPermissionRequestHandler(v8::Local val, mate::Arguments* args); + void ClearHostResolverCache(mate::Arguments* args); v8::Local Cookies(v8::Isolate* isolate); v8::Local WebRequest(v8::Isolate* isolate); diff --git a/docs/api/session.md b/docs/api/session.md index 8b0fa4e..ded94a1 100644 --- a/docs/api/session.md +++ b/docs/api/session.md @@ -313,6 +313,12 @@ session.fromPartition(partition).setPermissionRequestHandler(function(webContent }); ``` +#### `ses.clearHostResolverCache([callback])` + +* `callback` Function (optional) - Called when operation is done. + +Clears the host resolver cache. + #### `ses.webRequest` The `webRequest` API set allows to intercept and modify contents of a request at -- 2.7.4