summaryrefslogtreecommitdiffstats
path: root/src/core/net
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@qt.io>2020-07-24 10:30:54 +0200
committerMichael BrĂ¼ning <michael.bruning@qt.io>2020-07-24 15:23:10 +0200
commit54b84e14589b3e51f2f2e7980e2af2559601efe2 (patch)
treeeafef9f5b854cd90f6fa8e1ae5ab9e161a424aa3 /src/core/net
parent27332664b2745d7d322b8afbc1a41dc0fbfc763a (diff)
parenta2a19a6965601ced75e3e48b2bf618ba2bdbd29e (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts: src/core/compositor/delegated_frame_node.cpp src/core/core_chromium.pri src/core/render_widget_host_view_qt.cpp Change-Id: I9387151e9647c87fc387095e7b6d8d66560cdf71
Diffstat (limited to 'src/core/net')
-rw-r--r--src/core/net/cookie_monster_delegate_qt.cpp46
-rw-r--r--src/core/net/cookie_monster_delegate_qt.h4
-rw-r--r--src/core/net/plugin_response_interceptor_url_loader_throttle.cpp2
-rw-r--r--src/core/net/proxying_restricted_cookie_manager_qt.cpp41
-rw-r--r--src/core/net/system_network_context_manager.cpp18
-rw-r--r--src/core/net/system_network_context_manager.h21
6 files changed, 55 insertions, 77 deletions
diff --git a/src/core/net/cookie_monster_delegate_qt.cpp b/src/core/net/cookie_monster_delegate_qt.cpp
index d3157f760..263973684 100644
--- a/src/core/net/cookie_monster_delegate_qt.cpp
+++ b/src/core/net/cookie_monster_delegate_qt.cpp
@@ -72,6 +72,25 @@ private:
DISALLOW_COPY_AND_ASSIGN(CookieChangeListener);
};
+class CookieAccessFilter : public network::mojom::CookieRemoteAccessFilter
+{
+public:
+ CookieAccessFilter(CookieMonsterDelegateQt *delegate) : m_delegate(delegate) { }
+ ~CookieAccessFilter() override = default;
+
+ void AllowedAccess(const GURL& url, const GURL& site_for_cookies, AllowedAccessCallback callback) override
+ {
+ bool allow = m_delegate->canGetCookies(toQt(site_for_cookies), toQt(url));
+ std::move(callback).Run(allow);
+ }
+
+private:
+ CookieMonsterDelegateQt *m_delegate;
+
+ DISALLOW_COPY_AND_ASSIGN(CookieAccessFilter);
+};
+
+
static GURL sourceUrlForCookie(const QNetworkCookie &cookie)
{
QString urlFragment = QStringLiteral("%1%2").arg(cookie.domain()).arg(cookie.path());
@@ -81,7 +100,10 @@ static GURL sourceUrlForCookie(const QNetworkCookie &cookie)
CookieMonsterDelegateQt::CookieMonsterDelegateQt()
: m_client(nullptr)
, m_listener(new CookieChangeListener(this))
+ , m_filter(new CookieAccessFilter(this))
, m_receiver(m_listener.get())
+ , m_filterReceiver(m_filter.get())
+ , m_hasFilter(false)
{
}
@@ -123,9 +145,12 @@ void CookieMonsterDelegateQt::setCookie(quint64 callbackId, const QNetworkCookie
callback = base::BindOnce(&CookieMonsterDelegateQt::SetCookieCallbackOnUIThread, this, callbackId);
net::CanonicalCookie::CookieInclusionStatus inclusion;
auto canonCookie = net::CanonicalCookie::Create(gurl, cookie_line, base::Time::Now(), base::nullopt, &inclusion);
+ if (!inclusion.IsInclude()) {
+ LOG(WARNING) << "QWebEngineCookieStore::setCookie() - Tried to set invalid cookie";
+ return;
+ }
net::CookieOptions options;
- if (!inclusion.HasExclusionReason(net::CanonicalCookie::CookieInclusionStatus::EXCLUDE_HTTP_ONLY))
- options.set_include_httponly();
+ options.set_include_httponly();
m_mojoCookieManager->SetCanonicalCookie(*canonCookie.get(), gurl.scheme(), options, std::move(callback));
}
@@ -176,14 +201,31 @@ void CookieMonsterDelegateQt::setMojoCookieManager(network::mojom::CookieManager
m_mojoCookieManager.Bind(std::move(cookie_manager_info));
m_mojoCookieManager->AddGlobalChangeListener(m_receiver.BindNewPipeAndPassRemote());
+ if (m_hasFilter)
+ m_mojoCookieManager->SetRemoteFilter(m_filterReceiver.BindNewPipeAndPassRemote());
if (m_client)
m_client->d_func()->processPendingUserCookies();
}
+void CookieMonsterDelegateQt::setHasFilter(bool hasFilter)
+{
+ m_hasFilter = hasFilter;
+ if (!m_mojoCookieManager.is_bound())
+ return;
+ if (m_hasFilter) {
+ if (!m_filterReceiver.is_bound())
+ m_mojoCookieManager->SetRemoteFilter(m_filterReceiver.BindNewPipeAndPassRemote());
+ } else {
+ if (m_filterReceiver.is_bound())
+ m_filterReceiver.reset();
+ }
+}
+
void CookieMonsterDelegateQt::unsetMojoCookieManager()
{
m_receiver.reset();
+ m_filterReceiver.reset();
m_mojoCookieManager.reset();
}
diff --git a/src/core/net/cookie_monster_delegate_qt.h b/src/core/net/cookie_monster_delegate_qt.h
index c55bcff94..a8432e125 100644
--- a/src/core/net/cookie_monster_delegate_qt.h
+++ b/src/core/net/cookie_monster_delegate_qt.h
@@ -85,7 +85,10 @@ class Q_WEBENGINECORE_PRIVATE_EXPORT CookieMonsterDelegateQt : public base::RefC
network::mojom::CookieManagerPtr m_mojoCookieManager;
std::unique_ptr<network::mojom::CookieChangeListener> m_listener;
+ std::unique_ptr<network::mojom::CookieRemoteAccessFilter> m_filter;
mojo::Receiver<network::mojom::CookieChangeListener> m_receiver;
+ mojo::Receiver<network::mojom::CookieRemoteAccessFilter> m_filterReceiver;
+ bool m_hasFilter;
public:
CookieMonsterDelegateQt();
~CookieMonsterDelegateQt();
@@ -101,6 +104,7 @@ public:
void setClient(QWebEngineCookieStore *client);
void setMojoCookieManager(network::mojom::CookieManagerPtrInfo cookie_manager_info);
void unsetMojoCookieManager();
+ void setHasFilter(bool b);
bool canSetCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &url) const;
bool canGetCookies(const QUrl &firstPartyUrl, const QUrl &url) const;
diff --git a/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp b/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp
index d854a556c..4fdb8c3d0 100644
--- a/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp
+++ b/src/core/net/plugin_response_interceptor_url_loader_throttle.cpp
@@ -125,6 +125,8 @@ void PluginResponseInterceptorURLLoaderThrottle::WillProcessResponse(const GURL
if (extension_id.empty())
return;
+ *defer = true;
+
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
base::BindOnce(&onPdfStreamIntercepted,
response_url,
diff --git a/src/core/net/proxying_restricted_cookie_manager_qt.cpp b/src/core/net/proxying_restricted_cookie_manager_qt.cpp
index 7ee6c2a15..331b55e62 100644
--- a/src/core/net/proxying_restricted_cookie_manager_qt.cpp
+++ b/src/core/net/proxying_restricted_cookie_manager_qt.cpp
@@ -58,34 +58,6 @@
namespace QtWebEngineCore {
-class ProxyingRestrictedCookieManagerListenerQt : public network::mojom::CookieChangeListener {
-public:
- ProxyingRestrictedCookieManagerListenerQt(const GURL &url,
- const GURL &site_for_cookies,
- const url::Origin &top_frame_origin,
- base::WeakPtr<ProxyingRestrictedCookieManagerQt> restricted_cookie_manager,
- mojo::PendingRemote<network::mojom::CookieChangeListener> client_listener)
- : url_(url)
- , site_for_cookies_(site_for_cookies)
- , top_frame_origin_(top_frame_origin)
- , restricted_cookie_manager_(restricted_cookie_manager)
- , client_listener_(std::move(client_listener))
- {}
-
- void OnCookieChange(const net::CookieChangeInfo &change) override
- {
- if (restricted_cookie_manager_ && restricted_cookie_manager_->allowCookies(url_, site_for_cookies_))
- client_listener_->OnCookieChange(change);
- }
-
-private:
- const GURL url_;
- const GURL site_for_cookies_;
- const url::Origin top_frame_origin_;
- base::WeakPtr<ProxyingRestrictedCookieManagerQt> restricted_cookie_manager_;
- mojo::Remote<network::mojom::CookieChangeListener> client_listener_;
-};
-
// static
void ProxyingRestrictedCookieManagerQt::CreateAndBind(ProfileIODataQt *profileIoData,
mojo::PendingRemote<network::mojom::RestrictedCookieManager> underlying_rcm,
@@ -179,18 +151,7 @@ void ProxyingRestrictedCookieManagerQt::AddChangeListener(const GURL &url,
AddChangeListenerCallback callback)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-
- mojo::PendingRemote<network::mojom::CookieChangeListener> proxy_listener_remote;
- auto proxy_listener =
- std::make_unique<ProxyingRestrictedCookieManagerListenerQt>(
- url, site_for_cookies, top_frame_origin,
- weak_factory_.GetWeakPtr(),
- std::move(listener));
-
- mojo::MakeSelfOwnedReceiver(std::move(proxy_listener),
- proxy_listener_remote.InitWithNewPipeAndPassReceiver());
-
- underlying_restricted_cookie_manager_->AddChangeListener(url, site_for_cookies, top_frame_origin, std::move(proxy_listener_remote), std::move(callback));
+ underlying_restricted_cookie_manager_->AddChangeListener(url, site_for_cookies, top_frame_origin, std::move(listener), std::move(callback));
}
void ProxyingRestrictedCookieManagerQt::SetCookieFromString(const GURL &url,
diff --git a/src/core/net/system_network_context_manager.cpp b/src/core/net/system_network_context_manager.cpp
index 29cc82abf..611b5eafa 100644
--- a/src/core/net/system_network_context_manager.cpp
+++ b/src/core/net/system_network_context_manager.cpp
@@ -61,6 +61,7 @@
#include "chrome/common/chrome_switches.h"
#include "components/certificate_transparency/ct_known_logs.h"
#include "components/network_session_configurator/common/network_features.h"
+#include "components/network_session_configurator/common/network_switches.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/cors_exempt_headers.h"
@@ -199,19 +200,6 @@ scoped_refptr<network::SharedURLLoaderFactory> SystemNetworkContextManager::GetS
return shared_url_loader_factory_;
}
-void SystemNetworkContextManager::SetUp(
- network::mojom::NetworkContextRequest *network_context_request,
- network::mojom::NetworkContextParamsPtr *network_context_params, bool *stub_resolver_enabled,
- base::Optional<std::vector<network::mojom::DnsOverHttpsServerPtr>> *dns_over_https_servers,
- network::mojom::HttpAuthStaticParamsPtr *http_auth_static_params,
- network::mojom::HttpAuthDynamicParamsPtr *http_auth_dynamic_params, bool *is_quic_allowed)
-{
- *is_quic_allowed = false;
- *http_auth_static_params = CreateHttpAuthStaticParams();
- *http_auth_dynamic_params = CreateHttpAuthDynamicParams();
- // GetStubResolverConfig(local_state_, stub_resolver_enabled, dns_over_https_servers);
-}
-
// static
SystemNetworkContextManager *SystemNetworkContextManager::CreateInstance()
{
@@ -245,8 +233,10 @@ SystemNetworkContextManager::~SystemNetworkContextManager()
void SystemNetworkContextManager::OnNetworkServiceCreated(network::mojom::NetworkService *network_service)
{
+ bool is_quic_force_enabled = base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableQuic);
// Disable QUIC globally
- network_service->DisableQuic();
+ if (!is_quic_force_enabled)
+ network_service->DisableQuic();
network_service->SetUpHttpAuth(CreateHttpAuthStaticParams());
network_service->ConfigureHttpAuthPrefs(CreateHttpAuthDynamicParams());
diff --git a/src/core/net/system_network_context_manager.h b/src/core/net/system_network_context_manager.h
index 5094008f2..0dd503ce1 100644
--- a/src/core/net/system_network_context_manager.h
+++ b/src/core/net/system_network_context_manager.h
@@ -105,27 +105,6 @@ public:
// Destroys the global SystemNetworkContextManager instance.
static void DeleteInstance();
- // If the network service is disabled, |network_context_request| will be for
- // the NetworkContext used by the SystemNetworkContextManager and
- // |network_context_params| as needed to set up a system NetworkContext.
- // Otherwise, this method can still be used to help set up the IOThread's
- // in-process URLRequestContext.
- //
- // Must be called before the system NetworkContext is first used.
- //
- // |stub_resolver_enabled|, |dns_over_https_servers|,
- // |http_auth_static_params|, |http_auth_dynamic_params|, and
- // |is_quic_allowed| are used to pass initial NetworkService state to the
- // caller, so the NetworkService can be configured appropriately. Using
- // NetworkService's Mojo interface to set those options would lead to races
- // with other UI->IO thread network-related tasks, since Mojo doesn't preserve
- // execution order relative to PostTasks.
- void SetUp(network::mojom::NetworkContextRequest *network_context_request,
- network::mojom::NetworkContextParamsPtr *network_context_params, bool *stub_resolver_enabled,
- base::Optional<std::vector<network::mojom::DnsOverHttpsServerPtr>> *dns_over_https_servers,
- network::mojom::HttpAuthStaticParamsPtr *http_auth_static_params,
- network::mojom::HttpAuthDynamicParamsPtr *http_auth_dynamic_params, bool *is_quic_allowed);
-
// Returns the System NetworkContext. May only be called after SetUp(). Does
// any initialization of the NetworkService that may be needed when first
// called.