Add Delegate for AtomBrowserClient
This commit is contained in:
parent
ab54fedc9a
commit
9a0dc3bfd7
7 changed files with 41 additions and 66 deletions
|
@ -154,11 +154,14 @@ void PassLoginInformation(scoped_refptr<LoginHandler> login_handler,
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
App::App() {
|
App::App() {
|
||||||
|
static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(this);
|
||||||
Browser::Get()->AddObserver(this);
|
Browser::Get()->AddObserver(this);
|
||||||
content::GpuDataManager::GetInstance()->AddObserver(this);
|
content::GpuDataManager::GetInstance()->AddObserver(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
App::~App() {
|
App::~App() {
|
||||||
|
static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(
|
||||||
|
nullptr);
|
||||||
Browser::Get()->RemoveObserver(this);
|
Browser::Get()->RemoveObserver(this);
|
||||||
content::GpuDataManager::GetInstance()->RemoveObserver(this);
|
content::GpuDataManager::GetInstance()->RemoveObserver(this);
|
||||||
}
|
}
|
||||||
|
@ -212,27 +215,6 @@ void App::OnFinishLaunching() {
|
||||||
Emit("ready");
|
Emit("ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::OnSelectCertificate(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
net::SSLCertRequestInfo* cert_request_info,
|
|
||||||
scoped_ptr<content::ClientCertificateDelegate> delegate) {
|
|
||||||
std::shared_ptr<content::ClientCertificateDelegate>
|
|
||||||
shared_delegate(delegate.release());
|
|
||||||
bool prevent_default =
|
|
||||||
Emit("select-certificate",
|
|
||||||
api::WebContents::CreateFrom(isolate(), web_contents),
|
|
||||||
cert_request_info->host_and_port.ToString(),
|
|
||||||
cert_request_info->client_certs,
|
|
||||||
base::Bind(&OnClientCertificateSelected,
|
|
||||||
isolate(),
|
|
||||||
shared_delegate));
|
|
||||||
|
|
||||||
// Default to first certificate from the platform store.
|
|
||||||
if (!prevent_default)
|
|
||||||
shared_delegate->ContinueWithCertificate(
|
|
||||||
cert_request_info->client_certs[0].get());
|
|
||||||
}
|
|
||||||
|
|
||||||
void App::OnLogin(LoginHandler* login_handler) {
|
void App::OnLogin(LoginHandler* login_handler) {
|
||||||
// Convert the args explicitly since they will be passed for twice.
|
// Convert the args explicitly since they will be passed for twice.
|
||||||
v8::Locker locker(isolate());
|
v8::Locker locker(isolate());
|
||||||
|
@ -258,6 +240,27 @@ void App::OnLogin(LoginHandler* login_handler) {
|
||||||
login_handler->CancelAuth();
|
login_handler->CancelAuth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void App::SelectClientCertificate(
|
||||||
|
content::WebContents* web_contents,
|
||||||
|
net::SSLCertRequestInfo* cert_request_info,
|
||||||
|
scoped_ptr<content::ClientCertificateDelegate> delegate) {
|
||||||
|
std::shared_ptr<content::ClientCertificateDelegate>
|
||||||
|
shared_delegate(delegate.release());
|
||||||
|
bool prevent_default =
|
||||||
|
Emit("select-certificate",
|
||||||
|
api::WebContents::CreateFrom(isolate(), web_contents),
|
||||||
|
cert_request_info->host_and_port.ToString(),
|
||||||
|
cert_request_info->client_certs,
|
||||||
|
base::Bind(&OnClientCertificateSelected,
|
||||||
|
isolate(),
|
||||||
|
shared_delegate));
|
||||||
|
|
||||||
|
// Default to first certificate from the platform store.
|
||||||
|
if (!prevent_default)
|
||||||
|
shared_delegate->ContinueWithCertificate(
|
||||||
|
cert_request_info->client_certs[0].get());
|
||||||
|
}
|
||||||
|
|
||||||
void App::OnGpuProcessCrashed(base::TerminationStatus exit_code) {
|
void App::OnGpuProcessCrashed(base::TerminationStatus exit_code) {
|
||||||
Emit("gpu-process-crashed");
|
Emit("gpu-process-crashed");
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "atom/browser/api/event_emitter.h"
|
#include "atom/browser/api/event_emitter.h"
|
||||||
|
#include "atom/browser/atom_browser_client.h"
|
||||||
#include "atom/browser/browser_observer.h"
|
#include "atom/browser/browser_observer.h"
|
||||||
#include "atom/common/native_mate_converters/callback.h"
|
#include "atom/common/native_mate_converters/callback.h"
|
||||||
#include "chrome/browser/process_singleton.h"
|
#include "chrome/browser/process_singleton.h"
|
||||||
|
@ -26,7 +27,8 @@ namespace atom {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
class App : public mate::EventEmitter,
|
class App : public AtomBrowserClient::Delegate,
|
||||||
|
public mate::EventEmitter,
|
||||||
public BrowserObserver,
|
public BrowserObserver,
|
||||||
public content::GpuDataManagerObserver {
|
public content::GpuDataManagerObserver {
|
||||||
public:
|
public:
|
||||||
|
@ -46,11 +48,13 @@ class App : public mate::EventEmitter,
|
||||||
void OnActivate(bool has_visible_windows) override;
|
void OnActivate(bool has_visible_windows) override;
|
||||||
void OnWillFinishLaunching() override;
|
void OnWillFinishLaunching() override;
|
||||||
void OnFinishLaunching() override;
|
void OnFinishLaunching() override;
|
||||||
void OnSelectCertificate(
|
void OnLogin(LoginHandler* login_handler) override;
|
||||||
|
|
||||||
|
// content::ContentBrowserClient:
|
||||||
|
void SelectClientCertificate(
|
||||||
content::WebContents* web_contents,
|
content::WebContents* web_contents,
|
||||||
net::SSLCertRequestInfo* cert_request_info,
|
net::SSLCertRequestInfo* cert_request_info,
|
||||||
scoped_ptr<content::ClientCertificateDelegate> delegate) override;
|
scoped_ptr<content::ClientCertificateDelegate> delegate) override;
|
||||||
void OnLogin(LoginHandler* login_handler) override;
|
|
||||||
|
|
||||||
// content::GpuDataManagerObserver:
|
// content::GpuDataManagerObserver:
|
||||||
void OnGpuProcessCrashed(base::TerminationStatus exit_code) override;
|
void OnGpuProcessCrashed(base::TerminationStatus exit_code) override;
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include "atom/browser/atom_quota_permission_context.h"
|
#include "atom/browser/atom_quota_permission_context.h"
|
||||||
#include "atom/browser/atom_resource_dispatcher_host_delegate.h"
|
#include "atom/browser/atom_resource_dispatcher_host_delegate.h"
|
||||||
#include "atom/browser/atom_speech_recognition_manager_delegate.h"
|
#include "atom/browser/atom_speech_recognition_manager_delegate.h"
|
||||||
#include "atom/browser/browser.h"
|
|
||||||
#include "atom/browser/native_window.h"
|
#include "atom/browser/native_window.h"
|
||||||
#include "atom/browser/web_contents_preferences.h"
|
#include "atom/browser/web_contents_preferences.h"
|
||||||
#include "atom/browser/window_list.h"
|
#include "atom/browser/window_list.h"
|
||||||
|
@ -88,7 +87,7 @@ void AtomBrowserClient::SetCustomSchemes(
|
||||||
g_custom_schemes = JoinString(schemes, ',');
|
g_custom_schemes = JoinString(schemes, ',');
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomBrowserClient::AtomBrowserClient() {
|
AtomBrowserClient::AtomBrowserClient() : delegate_(nullptr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomBrowserClient::~AtomBrowserClient() {
|
AtomBrowserClient::~AtomBrowserClient() {
|
||||||
|
@ -222,10 +221,10 @@ void AtomBrowserClient::SelectClientCertificate(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cert_request_info->client_certs.empty())
|
if (!cert_request_info->client_certs.empty() && delegate_) {
|
||||||
Browser::Get()->ClientCertificateSelector(web_contents,
|
delegate_->SelectClientCertificate(
|
||||||
cert_request_info,
|
web_contents, cert_request_info, delegate.Pass());
|
||||||
delegate.Pass());
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomBrowserClient::ResourceDispatcherHostCreated() {
|
void AtomBrowserClient::ResourceDispatcherHostCreated() {
|
||||||
|
|
|
@ -31,6 +31,9 @@ class AtomBrowserClient : public brightray::BrowserClient,
|
||||||
AtomBrowserClient();
|
AtomBrowserClient();
|
||||||
virtual ~AtomBrowserClient();
|
virtual ~AtomBrowserClient();
|
||||||
|
|
||||||
|
using Delegate = content::ContentBrowserClient;
|
||||||
|
void set_delegate(Delegate* delegate) { delegate_ = delegate; }
|
||||||
|
|
||||||
// Don't force renderer process to restart for once.
|
// Don't force renderer process to restart for once.
|
||||||
static void SuppressRendererProcessRestartForOnce();
|
static void SuppressRendererProcessRestartForOnce();
|
||||||
// Custom schemes to be registered to standard.
|
// Custom schemes to be registered to standard.
|
||||||
|
@ -74,6 +77,8 @@ class AtomBrowserClient : public brightray::BrowserClient,
|
||||||
scoped_ptr<AtomResourceDispatcherHostDelegate>
|
scoped_ptr<AtomResourceDispatcherHostDelegate>
|
||||||
resource_dispatcher_host_delegate_;
|
resource_dispatcher_host_delegate_;
|
||||||
|
|
||||||
|
Delegate* delegate_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AtomBrowserClient);
|
DISALLOW_COPY_AND_ASSIGN(AtomBrowserClient);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
#include "atom/browser/native_window.h"
|
#include "atom/browser/native_window.h"
|
||||||
#include "atom/browser/window_list.h"
|
#include "atom/browser/window_list.h"
|
||||||
#include "base/message_loop/message_loop.h"
|
#include "base/message_loop/message_loop.h"
|
||||||
#include "content/public/browser/client_certificate_delegate.h"
|
|
||||||
#include "net/ssl/ssl_cert_request_info.h"
|
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
|
@ -141,17 +139,6 @@ void Browser::DidFinishLaunching() {
|
||||||
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnFinishLaunching());
|
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnFinishLaunching());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Browser::ClientCertificateSelector(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
net::SSLCertRequestInfo* cert_request_info,
|
|
||||||
scoped_ptr<content::ClientCertificateDelegate> delegate) {
|
|
||||||
FOR_EACH_OBSERVER(BrowserObserver,
|
|
||||||
observers_,
|
|
||||||
OnSelectCertificate(web_contents,
|
|
||||||
cert_request_info,
|
|
||||||
delegate.Pass()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Browser::RequestLogin(LoginHandler* login_handler) {
|
void Browser::RequestLogin(LoginHandler* login_handler) {
|
||||||
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnLogin(login_handler));
|
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnLogin(login_handler));
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,12 +126,6 @@ class Browser : public WindowListObserver {
|
||||||
void WillFinishLaunching();
|
void WillFinishLaunching();
|
||||||
void DidFinishLaunching();
|
void DidFinishLaunching();
|
||||||
|
|
||||||
// Called when client certificate is required.
|
|
||||||
void ClientCertificateSelector(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
net::SSLCertRequestInfo* cert_request_info,
|
|
||||||
scoped_ptr<content::ClientCertificateDelegate> delegate);
|
|
||||||
|
|
||||||
// Request basic auth login.
|
// Request basic auth login.
|
||||||
void RequestLogin(LoginHandler* login_handler);
|
void RequestLogin(LoginHandler* login_handler);
|
||||||
|
|
||||||
|
|
|
@ -7,17 +7,6 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "base/memory/scoped_ptr.h"
|
|
||||||
#include "content/public/browser/client_certificate_delegate.h"
|
|
||||||
|
|
||||||
namespace content {
|
|
||||||
class WebContents;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace net {
|
|
||||||
class SSLCertRequestInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
class LoginHandler;
|
class LoginHandler;
|
||||||
|
@ -53,12 +42,6 @@ class BrowserObserver {
|
||||||
virtual void OnWillFinishLaunching() {}
|
virtual void OnWillFinishLaunching() {}
|
||||||
virtual void OnFinishLaunching() {}
|
virtual void OnFinishLaunching() {}
|
||||||
|
|
||||||
// The browser requires client certificate.
|
|
||||||
virtual void OnSelectCertificate(
|
|
||||||
content::WebContents* web_contents,
|
|
||||||
net::SSLCertRequestInfo* cert_request_info,
|
|
||||||
scoped_ptr<content::ClientCertificateDelegate> delegate) {}
|
|
||||||
|
|
||||||
// The browser requests HTTP login.
|
// The browser requests HTTP login.
|
||||||
virtual void OnLogin(LoginHandler* login_handler) {}
|
virtual void OnLogin(LoginHandler* login_handler) {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue