diff options
| author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2024-06-11 13:21:32 +0300 |
|---|---|---|
| committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2024-06-11 13:31:01 +0300 |
| commit | 3cd4e0aa7961889eb06374885ed648f5b9bd85bc (patch) | |
| tree | 6a089aedea155b1f1a74b553f4d1b57c70554a8f /src/core/client_hints.h | |
| parent | 6d029165d1593c514db08c34d6b08a00a4435d5e (diff) | |
| parent | 38063a6332b9f948a0381763271e9a9ac7af0999 (diff) | |
Merge tag 'v6.2.9-lts' into tqtc/lts-6.2-opensource6.2.9
Qt 6.2.9-lts release
Conflicts solved:
dependencies.yaml
examples/webenginewidgets/push-notifications/CMakeLists.txt
Change-Id: I0127c2575369f6939df89f3301659470d481b9bf
Diffstat (limited to 'src/core/client_hints.h')
| -rw-r--r-- | src/core/client_hints.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/core/client_hints.h b/src/core/client_hints.h new file mode 100644 index 000000000..a80629fc9 --- /dev/null +++ b/src/core/client_hints.h @@ -0,0 +1,102 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef CLIENT_HINTS_H_ +#define CLIENT_HINTS_H_ + +// based on components/client_hints/browser/client_hints.h: +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/memory/raw_ptr.h" +#include "base/no_destructor.h" +#include "base/sequence_checker.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "components/keyed_service/core/keyed_service.h" +#include "content/public/browser/client_hints_controller_delegate.h" +#include "third_party/blink/public/common/user_agent/user_agent_metadata.h" + +namespace QtWebEngineCore { + +class ClientHints; + +class ClientHintsFactory : public BrowserContextKeyedServiceFactory +{ +public: + ClientHintsFactory(const ClientHintsFactory &) = delete; + ClientHintsFactory &operator=(const ClientHintsFactory &) = delete; + + static ClientHints *GetForBrowserContext(content::BrowserContext *browser_context); + static ClientHintsFactory *GetInstance(); + +private: + friend class base::NoDestructor<ClientHintsFactory>; + + ClientHintsFactory(); + ~ClientHintsFactory() override; + + // BrowserContextKeyedServiceFactory methods: + KeyedService *BuildServiceInstanceFor(content::BrowserContext *profile) const override; + content::BrowserContext *GetBrowserContextToUse(content::BrowserContext *context) const override; +}; + +class ClientHints : public KeyedService, public content::ClientHintsControllerDelegate +{ +public: + ClientHints(content::BrowserContext *context); + + ClientHints(const ClientHints &) = delete; + ClientHints &operator=(const ClientHints &) = delete; + + ~ClientHints() override; + + // content::ClientHintsControllerDelegate: + network::NetworkQualityTracker *GetNetworkQualityTracker() override; + + void GetAllowedClientHintsFromSource(const url::Origin &origin, blink::EnabledClientHints *client_hints) override; + + bool IsJavaScriptAllowed(const GURL &url, content::RenderFrameHost *parent_rfh) override; + + bool AreThirdPartyCookiesBlocked(const GURL &url) override; + + blink::UserAgentMetadata GetUserAgentMetadata() override; + + void PersistClientHints(const url::Origin &primary_origin, + content::RenderFrameHost *parent_rfh, + const std::vector<network::mojom::WebClientHintsType> &client_hints) override; + + void SetAdditionalClientHints(const std::vector<network::mojom::WebClientHintsType> &) override; + + void ClearAdditionalClientHints() override; + + void SetMostRecentMainFrameViewportSize(const gfx::Size&) override; + gfx::Size GetMostRecentMainFrameViewportSize() override; + +private: + SEQUENCE_CHECKER(sequence_checker_); + + raw_ptr<content::BrowserContext> context_ = nullptr; + + // Stores enabled Client Hint types for an origin. + std::map<url::Origin, blink::EnabledClientHints> accept_ch_cache_ + GUARDED_BY_CONTEXT(sequence_checker_); + + // Additional Client Hint types for Client Hints Reliability. If additional + // hints are set, they would be included by subsequent calls to + // GetAllowedClientHintsFromSource. + std::vector<network::mojom::WebClientHintsType> additional_hints_ + GUARDED_BY_CONTEXT(sequence_checker_); + + std::unique_ptr<network::NetworkQualityTracker> network_quality_tracker_ + GUARDED_BY_CONTEXT(sequence_checker_); + + // This stores the viewport size of the most recent visible main frame tree + // node. This value is only used when the viewport size cannot be directly + // queried such as for prefetch requests and for tab restores. + gfx::Size viewport_size_; +}; + +} // namespace QtWebEngineCore + +#endif |
