Also pass "webContents" in "login" event

This commit is contained in:
Cheng Zhao 2015-10-28 20:21:56 +08:00
parent 131531219e
commit 4eac6b31b1
4 changed files with 32 additions and 3 deletions

View file

@ -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.

View file

@ -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);

View file

@ -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);
}; };

View file

@ -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