Also pass "webContents" in "login" event
This commit is contained in:
parent
131531219e
commit
4eac6b31b1
4 changed files with 32 additions and 3 deletions
|
@ -244,6 +244,7 @@ void App::OnSelectCertificate(
|
||||||
void App::OnLogin(LoginHandler* login_handler) {
|
void App::OnLogin(LoginHandler* login_handler) {
|
||||||
bool prevent_default = Emit(
|
bool prevent_default = Emit(
|
||||||
"login", login_handler->request(), login_handler->auth_info(),
|
"login", login_handler->request(), login_handler->auth_info(),
|
||||||
|
api::WebContents::CreateFrom(isolate(), login_handler->GetWebContents()),
|
||||||
base::Bind(&PassLoginInformation, make_scoped_refptr(login_handler)));
|
base::Bind(&PassLoginInformation, make_scoped_refptr(login_handler)));
|
||||||
|
|
||||||
// Default behavior is to alwasy cancel the auth.
|
// Default behavior is to alwasy cancel the auth.
|
||||||
|
|
|
@ -6,7 +6,10 @@
|
||||||
|
|
||||||
#include "atom/browser/browser.h"
|
#include "atom/browser/browser.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
|
#include "content/public/browser/render_frame_host.h"
|
||||||
#include "content/public/browser/resource_dispatcher_host.h"
|
#include "content/public/browser/resource_dispatcher_host.h"
|
||||||
|
#include "content/public/browser/resource_request_info.h"
|
||||||
|
#include "content/public/browser/web_contents.h"
|
||||||
#include "net/base/auth.h"
|
#include "net/base/auth.h"
|
||||||
#include "net/url_request/url_request.h"
|
#include "net/url_request/url_request.h"
|
||||||
|
|
||||||
|
@ -27,7 +30,12 @@ void ResetLoginHandlerForRequest(net::URLRequest* request) {
|
||||||
|
|
||||||
LoginHandler::LoginHandler(net::AuthChallengeInfo* auth_info,
|
LoginHandler::LoginHandler(net::AuthChallengeInfo* auth_info,
|
||||||
net::URLRequest* request)
|
net::URLRequest* request)
|
||||||
: auth_info_(auth_info), request_(request) {
|
: auth_info_(auth_info),
|
||||||
|
request_(request),
|
||||||
|
render_process_host_id_(0),
|
||||||
|
render_frame_id_(0) {
|
||||||
|
content::ResourceRequestInfo::ForRequest(request_)->GetAssociatedRenderFrame(
|
||||||
|
&render_process_host_id_, &render_frame_id_);
|
||||||
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
||||||
base::Bind(&Browser::RequestLogin,
|
base::Bind(&Browser::RequestLogin,
|
||||||
base::Unretained(Browser::Get()),
|
base::Unretained(Browser::Get()),
|
||||||
|
@ -37,6 +45,14 @@ LoginHandler::LoginHandler(net::AuthChallengeInfo* auth_info,
|
||||||
LoginHandler::~LoginHandler() {
|
LoginHandler::~LoginHandler() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
content::WebContents* LoginHandler::GetWebContents() const {
|
||||||
|
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||||
|
|
||||||
|
content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
|
||||||
|
render_process_host_id_, render_frame_id_);
|
||||||
|
return content::WebContents::FromRenderFrameHost(rfh);
|
||||||
|
}
|
||||||
|
|
||||||
void LoginHandler::Login(const base::string16& username,
|
void LoginHandler::Login(const base::string16& username,
|
||||||
const base::string16& password) {
|
const base::string16& password) {
|
||||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
#include "base/strings/string16.h"
|
#include "base/strings/string16.h"
|
||||||
#include "content/public/browser/resource_dispatcher_host_login_delegate.h"
|
#include "content/public/browser/resource_dispatcher_host_login_delegate.h"
|
||||||
|
|
||||||
|
namespace content {
|
||||||
|
class WebContents;
|
||||||
|
}
|
||||||
|
|
||||||
namespace net {
|
namespace net {
|
||||||
class AuthChallengeInfo;
|
class AuthChallengeInfo;
|
||||||
class URLRequest;
|
class URLRequest;
|
||||||
|
@ -20,6 +24,10 @@ class LoginHandler : public content::ResourceDispatcherHostLoginDelegate {
|
||||||
public:
|
public:
|
||||||
LoginHandler(net::AuthChallengeInfo* auth_info, net::URLRequest* request);
|
LoginHandler(net::AuthChallengeInfo* auth_info, net::URLRequest* request);
|
||||||
|
|
||||||
|
// Returns the WebContents associated with the request, must be called on UI
|
||||||
|
// thread.
|
||||||
|
content::WebContents* GetWebContents() const;
|
||||||
|
|
||||||
// The auth is cancelled, must be called on UI thread.
|
// The auth is cancelled, must be called on UI thread.
|
||||||
void CancelAuth();
|
void CancelAuth();
|
||||||
|
|
||||||
|
@ -47,6 +55,10 @@ class LoginHandler : public content::ResourceDispatcherHostLoginDelegate {
|
||||||
// This should only be accessed on the IO loop.
|
// This should only be accessed on the IO loop.
|
||||||
net::URLRequest* request_;
|
net::URLRequest* request_;
|
||||||
|
|
||||||
|
// Cached from the net::URLRequest, in case it goes NULL on us.
|
||||||
|
int render_process_host_id_;
|
||||||
|
int render_frame_id_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(LoginHandler);
|
DISALLOW_COPY_AND_ASSIGN(LoginHandler);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ v8::Local<v8::Value> Converter<const net::URLRequest*>::ToV8(
|
||||||
dict.Set("url", val->url().spec());
|
dict.Set("url", val->url().spec());
|
||||||
dict.Set("referrer", val->referrer());
|
dict.Set("referrer", val->referrer());
|
||||||
return mate::ConvertToV8(isolate, dict);
|
return mate::ConvertToV8(isolate, dict);
|
||||||
};
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
v8::Local<v8::Value> Converter<const net::AuthChallengeInfo*>::ToV8(
|
v8::Local<v8::Value> Converter<const net::AuthChallengeInfo*>::ToV8(
|
||||||
|
@ -29,6 +29,6 @@ v8::Local<v8::Value> Converter<const net::AuthChallengeInfo*>::ToV8(
|
||||||
dict.Set("port", static_cast<uint32_t>(val->challenger.port()));
|
dict.Set("port", static_cast<uint32_t>(val->challenger.port()));
|
||||||
dict.Set("realm", val->realm);
|
dict.Set("realm", val->realm);
|
||||||
return mate::ConvertToV8(isolate, dict);
|
return mate::ConvertToV8(isolate, dict);
|
||||||
};
|
}
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
Loading…
Reference in a new issue