Also emit "login" on WebContents
authorCheng Zhao <zcbenz@gmail.com>
Wed, 28 Oct 2015 13:00:39 +0000 (21:00 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Wed, 28 Oct 2015 13:00:39 +0000 (21:00 +0800)
atom/browser/api/atom_api_app.cc

index 5380d52..21a553e 100644 (file)
@@ -242,12 +242,26 @@ void App::OnSelectCertificate(
 }
 
 void App::OnLogin(LoginHandler* login_handler) {
-  bool prevent_default = Emit(
-      "login", login_handler->request(), login_handler->auth_info(),
-      api::WebContents::CreateFrom(isolate(), login_handler->GetWebContents()),
+  // Convert the args explicitly since they will be passed for twice.
+  v8::Locker locker(isolate());
+  v8::HandleScope handle_scope(isolate());
+  auto web_contents =
+      WebContents::CreateFrom(isolate(), login_handler->GetWebContents());
+  auto request = mate::ConvertToV8(isolate(), login_handler->request());
+  auto auth_info = mate::ConvertToV8(isolate(), login_handler->auth_info());
+  auto callback = mate::ConvertToV8(
+      isolate(),
       base::Bind(&PassLoginInformation, make_scoped_refptr(login_handler)));
 
-  // Default behavior is to alwasy cancel the auth.
+  bool prevent_default =
+      Emit("login", web_contents, request, auth_info, callback);
+
+  // Also pass it to WebContents.
+  if (!prevent_default)
+    prevent_default =
+        web_contents->Emit("login", request, auth_info, callback);
+
+  // Default behavior is to always cancel the auth.
   if (!prevent_default)
     login_handler->CancelAuth();
 }