diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index 602729b9e3..4a4ffba0c8 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -41,8 +41,10 @@ #include "net/http/http_auth_preferences.h" #include "net/proxy/proxy_service.h" #include "net/proxy/proxy_config_service_fixed.h" +#include "net/url_request/static_http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" +#include "ui/base/l10n/l10n_util.h" using content::BrowserThread; using content::StoragePartition; @@ -93,6 +95,15 @@ uint32_t GetQuotaMask(const std::vector& quota_types) { return quota_mask; } +void SetUserAgentInIO(scoped_refptr getter, + const std::string& accept_lang, + const std::string& user_agent) { + getter->GetURLRequestContext()->set_http_user_agent_settings( + new net::StaticHttpUserAgentSettings( + net::HttpUtil::GenerateAcceptLanguageHeader(accept_lang), + user_agent)); +} + } // namespace namespace mate { @@ -455,6 +466,23 @@ void Session::AllowNTLMCredentialsForDomains(const std::string& domains) { domains)); } +void Session::SetUserAgent(const std::string& user_agent, + mate::Arguments* args) { + browser_context_->SetUserAgent(user_agent); + + std::string accept_lang = l10n_util::GetApplicationLocale(""); + args->GetNext(&accept_lang); + + auto getter = browser_context_->GetRequestContext(); + getter->GetNetworkTaskRunner()->PostTask( + FROM_HERE, + base::Bind(&SetUserAgentInIO, getter, accept_lang, user_agent)); +} + +std::string Session::GetUserAgent() { + return browser_context_->GetUserAgent(); +} + v8::Local Session::Cookies(v8::Isolate* isolate) { if (cookies_.IsEmpty()) { auto handle = atom::api::Cookies::Create(isolate, browser_context()); @@ -520,6 +548,8 @@ void Session::BuildPrototype(v8::Isolate* isolate, .SetMethod("clearHostResolverCache", &Session::ClearHostResolverCache) .SetMethod("allowNTLMCredentialsForDomains", &Session::AllowNTLMCredentialsForDomains) + .SetMethod("setUserAgent", &Session::SetUserAgent) + .SetMethod("getUserAgent", &Session::GetUserAgent) .SetProperty("cookies", &Session::Cookies) .SetProperty("protocol", &Session::Protocol) .SetProperty("webRequest", &Session::WebRequest); diff --git a/atom/browser/api/atom_api_session.h b/atom/browser/api/atom_api_session.h index bb67fa106d..0868cbe18b 100644 --- a/atom/browser/api/atom_api_session.h +++ b/atom/browser/api/atom_api_session.h @@ -57,15 +57,7 @@ class Session: public mate::TrackableObject, static void BuildPrototype(v8::Isolate* isolate, v8::Local prototype); - protected: - Session(v8::Isolate* isolate, AtomBrowserContext* browser_context); - ~Session(); - - // content::DownloadManager::Observer: - void OnDownloadCreated(content::DownloadManager* manager, - content::DownloadItem* item) override; - - private: + // Methods. void ResolveProxy(const GURL& url, ResolveProxyCallback callback); template void DoCacheAction(const net::CompletionCallback& callback); @@ -80,10 +72,21 @@ class Session: public mate::TrackableObject, mate::Arguments* args); void ClearHostResolverCache(mate::Arguments* args); void AllowNTLMCredentialsForDomains(const std::string& domains); + void SetUserAgent(const std::string& user_agent, mate::Arguments* args); + std::string GetUserAgent(); v8::Local Cookies(v8::Isolate* isolate); v8::Local Protocol(v8::Isolate* isolate); v8::Local WebRequest(v8::Isolate* isolate); + protected: + Session(v8::Isolate* isolate, AtomBrowserContext* browser_context); + ~Session(); + + // content::DownloadManager::Observer: + void OnDownloadCreated(content::DownloadManager* manager, + content::DownloadItem* item) override; + + private: // Cached object. v8::Global cookies_; v8::Global protocol_; diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 52d24084d4..58b6a4729a 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -61,11 +61,9 @@ #include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" #include "net/http/http_response_headers.h" -#include "net/url_request/static_http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "third_party/WebKit/public/web/WebInputEvent.h" #include "third_party/WebKit/public/web/WebFindOptions.h" -#include "ui/base/l10n/l10n_util.h" #include "atom/common/node_includes.h" @@ -76,15 +74,6 @@ struct PrintSettings { bool print_background; }; -void SetUserAgentInIO(scoped_refptr getter, - std::string accept_lang, - std::string user_agent) { - getter->GetURLRequestContext()->set_http_user_agent_settings( - new net::StaticHttpUserAgentSettings( - net::HttpUtil::GenerateAcceptLanguageHeader(accept_lang), - user_agent)); -} - } // namespace namespace mate { @@ -811,7 +800,7 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) { std::string user_agent; if (options.Get("userAgent", &user_agent)) - SetUserAgent(user_agent); + web_contents()->SetUserAgentOverride(user_agent); std::string extra_headers; if (options.Get("extraHeaders", &extra_headers)) @@ -898,14 +887,9 @@ bool WebContents::IsCrashed() const { return web_contents()->IsCrashed(); } -void WebContents::SetUserAgent(const std::string& user_agent) { +void WebContents::SetUserAgent(const std::string& user_agent, + mate::Arguments* args) { web_contents()->SetUserAgentOverride(user_agent); - scoped_refptr getter = - web_contents()->GetBrowserContext()->GetRequestContext(); - - auto accept_lang = l10n_util::GetApplicationLocale(""); - getter->GetNetworkTaskRunner()->PostTask(FROM_HERE, - base::Bind(&SetUserAgentInIO, getter, accept_lang, user_agent)); } std::string WebContents::GetUserAgent() { diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 6151110887..a99d4d4356 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -81,7 +81,7 @@ class WebContents : public mate::TrackableObject, void GoForward(); void GoToOffset(int offset); bool IsCrashed() const; - void SetUserAgent(const std::string& user_agent); + void SetUserAgent(const std::string& user_agent, mate::Arguments* args); std::string GetUserAgent(); void InsertCSS(const std::string& css); bool SavePage(const base::FilePath& full_file_path, diff --git a/atom/browser/atom_browser_context.cc b/atom/browser/atom_browser_context.cc index b9ae67b684..7b682543a0 100644 --- a/atom/browser/atom_browser_context.cc +++ b/atom/browser/atom_browser_context.cc @@ -88,12 +88,15 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition, AtomBrowserContext::~AtomBrowserContext() { } +void AtomBrowserContext::SetUserAgent(const std::string& user_agent) { + user_agent_ = user_agent; +} + net::NetworkDelegate* AtomBrowserContext::CreateNetworkDelegate() { return network_delegate_; } std::string AtomBrowserContext::GetUserAgent() { - LOG(ERROR) << "GetUserAgent"; return user_agent_; } diff --git a/atom/browser/atom_browser_context.h b/atom/browser/atom_browser_context.h index dbbae38272..f793bc9870 100644 --- a/atom/browser/atom_browser_context.h +++ b/atom/browser/atom_browser_context.h @@ -22,6 +22,8 @@ class AtomBrowserContext : public brightray::BrowserContext { AtomBrowserContext(const std::string& partition, bool in_memory); ~AtomBrowserContext() override; + void SetUserAgent(const std::string& user_agent); + // brightray::URLRequestContextGetter::Delegate: net::NetworkDelegate* CreateNetworkDelegate() override; std::string GetUserAgent() override; diff --git a/vendor/brightray b/vendor/brightray index e26f8073df..8244628f0c 160000 --- a/vendor/brightray +++ b/vendor/brightray @@ -1 +1 @@ -Subproject commit e26f8073df2b20ba2169ffb082c5f135d542313b +Subproject commit 8244628f0c1d0eb15c659d42e882fb5d447c77ba