diff options
34 files changed, 247 insertions, 244 deletions
diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp index f7e9c1c4f..abf1c1154 100644 --- a/src/core/browser_accessibility_qt.cpp +++ b/src/core/browser_accessibility_qt.cpp @@ -730,7 +730,7 @@ void BrowserAccessibilityQt::scrollToSubstring(int startIndex, int endIndex) int count = characterCount(); if (startIndex < endIndex && endIndex < count) manager()->ScrollToMakeVisible(*this, - GetRootFrameRangeBoundsRect( + GetRootFrameHypertextRangeBoundsRect( startIndex, endIndex - startIndex, ui::AXClippingBehavior::kUnclipped)); diff --git a/src/core/browsing_data_remover_delegate_qt.cpp b/src/core/browsing_data_remover_delegate_qt.cpp index 005a9820d..344ba817f 100644 --- a/src/core/browsing_data_remover_delegate_qt.cpp +++ b/src/core/browsing_data_remover_delegate_qt.cpp @@ -50,28 +50,31 @@ namespace QtWebEngineCore { bool DoesOriginMatchEmbedderMask(int origin_type_mask, const url::Origin &origin, - storage::SpecialStoragePolicy *policy) { + storage::SpecialStoragePolicy *policy) +{ Q_UNUSED(origin_type_mask); Q_UNUSED(origin); Q_UNUSED(policy); return true; } -content::BrowsingDataRemoverDelegate::EmbedderOriginTypeMatcher BrowsingDataRemoverDelegateQt::GetOriginTypeMatcher() const { +content::BrowsingDataRemoverDelegate::EmbedderOriginTypeMatcher BrowsingDataRemoverDelegateQt::GetOriginTypeMatcher() +{ return base::BindRepeating(&DoesOriginMatchEmbedderMask); } -bool BrowsingDataRemoverDelegateQt::MayRemoveDownloadHistory() const { +bool BrowsingDataRemoverDelegateQt::MayRemoveDownloadHistory() +{ return true; } -void BrowsingDataRemoverDelegateQt::RemoveEmbedderData( - const base::Time &delete_begin, +void BrowsingDataRemoverDelegateQt::RemoveEmbedderData(const base::Time &delete_begin, const base::Time &delete_end, int remove_mask, - const content::BrowsingDataFilterBuilder& filter_builder, + content::BrowsingDataFilterBuilder *filter_builder, int origin_type_mask, - base::OnceClosure callback) { + base::OnceClosure callback) +{ Q_UNUSED(delete_begin); Q_UNUSED(delete_end); Q_UNUSED(filter_builder); diff --git a/src/core/browsing_data_remover_delegate_qt.h b/src/core/browsing_data_remover_delegate_qt.h index fa99cdf90..dc2761ffc 100644 --- a/src/core/browsing_data_remover_delegate_qt.h +++ b/src/core/browsing_data_remover_delegate_qt.h @@ -50,13 +50,13 @@ public: BrowsingDataRemoverDelegateQt() {} ~BrowsingDataRemoverDelegateQt() override {} - content::BrowsingDataRemoverDelegate::EmbedderOriginTypeMatcher GetOriginTypeMatcher() const override; - bool MayRemoveDownloadHistory() const override; + content::BrowsingDataRemoverDelegate::EmbedderOriginTypeMatcher GetOriginTypeMatcher() override; + bool MayRemoveDownloadHistory() override; void RemoveEmbedderData( const base::Time &delete_begin, const base::Time &delete_end, int remove_mask, - const content::BrowsingDataFilterBuilder &filter_builder, + content::BrowsingDataFilterBuilder *filter_builder, int origin_type_mask, base::OnceClosure callback) override; }; diff --git a/src/core/certificate_error_controller.cpp b/src/core/certificate_error_controller.cpp index 89c2980e3..bc83ed802 100644 --- a/src/core/certificate_error_controller.cpp +++ b/src/core/certificate_error_controller.cpp @@ -78,14 +78,14 @@ void CertificateErrorControllerPrivate::accept(bool accepted) CertificateErrorControllerPrivate::CertificateErrorControllerPrivate(int cert_error, const net::SSLInfo& ssl_info, const GURL &request_url, - content::ResourceType resource_type, + bool main_frame, bool fatal_error, bool strict_enforcement, const base::Callback<void(content::CertificateRequestResultType)>& cb ) : certError(CertificateErrorController::CertificateError(cert_error)) , requestUrl(toQt(request_url)) - , resourceType(CertificateErrorController::ResourceType(resource_type)) + , resourceType(main_frame ? CertificateErrorController::ResourceTypeMainFrame : CertificateErrorController::ResourceTypeOther) , fatalError(fatal_error) , strictEnforcement(strict_enforcement) , callback(cb) diff --git a/src/core/certificate_error_controller_p.h b/src/core/certificate_error_controller_p.h index d51a559d0..a11f2b6f0 100644 --- a/src/core/certificate_error_controller_p.h +++ b/src/core/certificate_error_controller_p.h @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE class CertificateErrorControllerPrivate { public: - CertificateErrorControllerPrivate(int cert_error, const net::SSLInfo& ssl_info, const GURL& request_url, content::ResourceType resource_type, bool fatal_error, bool strict_enforcement, const base::Callback<void(content::CertificateRequestResultType)>& callback); + CertificateErrorControllerPrivate(int cert_error, const net::SSLInfo& ssl_info, const GURL& request_url, bool main_frame, bool fatal_error, bool strict_enforcement, const base::Callback<void(content::CertificateRequestResultType)>& callback); void accept(bool accepted); diff --git a/src/core/common/extensions/extensions_client_qt.cpp b/src/core/common/extensions/extensions_client_qt.cpp index 6c6200eb0..dd1de1483 100644 --- a/src/core/common/extensions/extensions_client_qt.cpp +++ b/src/core/common/extensions/extensions_client_qt.cpp @@ -135,20 +135,6 @@ bool ExtensionsClientQt::IsScriptableURL(const GURL &url, std::string *error) co return true; } -// Determines if certain fatal extensions errors should be surpressed -// (i.e., only logged) or allowed (i.e., logged before crashing). -bool ExtensionsClientQt::ShouldSuppressFatalErrors() const -{ - return true; -} - -// Records that a fatal error was caught and suppressed. It is expected that -// embedders will only do so if ShouldSuppressFatalErrors at some point -// returned true. -void ExtensionsClientQt::RecordDidSuppressFatalError() -{ -} - // Returns the base webstore URL prefix. const GURL &ExtensionsClientQt::GetWebstoreBaseURL() const { diff --git a/src/core/common/extensions/extensions_client_qt.h b/src/core/common/extensions/extensions_client_qt.h index 657487277..e689f76b7 100644 --- a/src/core/common/extensions/extensions_client_qt.h +++ b/src/core/common/extensions/extensions_client_qt.h @@ -102,15 +102,6 @@ public: // Returns false if content scripts are forbidden from running on |url|. bool IsScriptableURL(const GURL &url, std::string *error) const override; - // Determines if certain fatal extensions errors should be surpressed - // (i.e., only logged) or allowed (i.e., logged before crashing). - bool ShouldSuppressFatalErrors() const override; - - // Records that a fatal error was caught and suppressed. It is expected that - // embedders will only do so if ShouldSuppressFatalErrors at some point - // returned true. - void RecordDidSuppressFatalError() override; - // Returns the base webstore URL prefix. const GURL &GetWebstoreBaseURL() const override; diff --git a/src/core/compositor/delegated_frame_node.cpp b/src/core/compositor/delegated_frame_node.cpp index 19e8d1b82..2a0df3acd 100644 --- a/src/core/compositor/delegated_frame_node.cpp +++ b/src/core/compositor/delegated_frame_node.cpp @@ -570,10 +570,10 @@ static bool areRenderPassStructuresEqual(const viz::CompositorFrame *frameData, if (quad->material != prevQuad->material) return false; #ifndef QT_NO_OPENGL - if (quad->material == viz::DrawQuad::YUV_VIDEO_CONTENT) + if (quad->material == viz::DrawQuad::Material::kYuvVideoContent) return false; #ifdef GL_OES_EGL_image_external - if (quad->material == viz::DrawQuad::STREAM_VIDEO_CONTENT) + if (quad->material == viz::DrawQuad::Material::kStreamVideoContent) return false; #endif // GL_OES_EGL_image_external #endif // QT_NO_OPENGL @@ -840,7 +840,7 @@ void DelegatedFrameNode::handleQuad( RenderWidgetHostViewQtDelegate *apiDelegate) { switch (quad->material) { - case viz::DrawQuad::RENDER_PASS: { + case viz::DrawQuad::Material::kRenderPass: { const viz::RenderPassDrawQuad *renderPassQuad = viz::RenderPassDrawQuad::MaterialCast(quad); if (!renderPassQuad->mask_texture_size.IsEmpty()) { const CompositorResource *resource = findAndHoldResource(renderPassQuad->mask_resource_id(), resourceTracker); @@ -854,7 +854,7 @@ void DelegatedFrameNode::handleQuad( break; } - case viz::DrawQuad::TEXTURE_CONTENT: { + case viz::DrawQuad::Material::kTextureContent: { const viz::TextureDrawQuad *tquad = viz::TextureDrawQuad::MaterialCast(quad); const CompositorResource *resource = findAndHoldResource(tquad->resource_id(), resourceTracker); QSGTexture *texture = @@ -872,7 +872,7 @@ void DelegatedFrameNode::handleQuad( currentLayerChain); break; } - case viz::DrawQuad::SOLID_COLOR: { + case viz::DrawQuad::Material::kSolidColor: { const viz::SolidColorDrawQuad *scquad = viz::SolidColorDrawQuad::MaterialCast(quad); // Qt only supports MSAA and this flag shouldn't be needed. // If we ever want to use QSGRectangleNode::setAntialiasing for this we should @@ -882,7 +882,7 @@ void DelegatedFrameNode::handleQuad( break; #ifndef QT_NO_OPENGL } - case viz::DrawQuad::DEBUG_BORDER: { + case viz::DrawQuad::Material::kDebugBorder: { const viz::DebugBorderDrawQuad *dbquad = viz::DebugBorderDrawQuad::MaterialCast(quad); QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 4); @@ -905,7 +905,7 @@ void DelegatedFrameNode::handleQuad( break; #endif } - case viz::DrawQuad::TILED_CONTENT: { + case viz::DrawQuad::Material::kTiledContent: { const viz::TileDrawQuad *tquad = viz::TileDrawQuad::MaterialCast(quad); const CompositorResource *resource = findAndHoldResource(tquad->resource_id(), resourceTracker); nodeHandler->setupTextureContentNode( @@ -915,7 +915,7 @@ void DelegatedFrameNode::handleQuad( break; #ifndef QT_NO_OPENGL } - case viz::DrawQuad::YUV_VIDEO_CONTENT: { + case viz::DrawQuad::Material::kYuvVideoContent: { const viz::YUVVideoDrawQuad *vquad = viz::YUVVideoDrawQuad::MaterialCast(quad); const CompositorResource *yResource = findAndHoldResource(vquad->y_plane_resource_id(), resourceTracker); @@ -941,7 +941,7 @@ void DelegatedFrameNode::handleQuad( break; #ifdef GL_OES_EGL_image_external } - case viz::DrawQuad::STREAM_VIDEO_CONTENT: { + case viz::DrawQuad::Material::kStreamVideoContent: { const viz::StreamVideoDrawQuad *squad = viz::StreamVideoDrawQuad::MaterialCast(quad); const CompositorResource *resource = findAndHoldResource(squad->resource_id(), resourceTracker); MailboxTexture *texture = static_cast<MailboxTexture *>( @@ -954,10 +954,10 @@ void DelegatedFrameNode::handleQuad( #endif // GL_OES_EGL_image_external #endif // QT_NO_OPENGL } - case viz::DrawQuad::SURFACE_CONTENT: + case viz::DrawQuad::Material::kSurfaceContent: Q_UNREACHABLE(); default: - qWarning("Unimplemented quad material: %d", quad->material); + qWarning("Unimplemented quad material: %d", (int)quad->material); } } diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 71ba33957..69df2232a 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -76,6 +76,7 @@ #include "extensions/buildflags/buildflags.h" #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/remote.h" #include "printing/buildflags/buildflags.h" #include "qtwebengine/browser/qtwebengine_content_browser_overlay_manifest.h" #include "qtwebengine/browser/qtwebengine_content_renderer_overlay_manifest.h" @@ -150,6 +151,11 @@ #include "renderer_host/resource_dispatcher_host_delegate_qt.h" #endif +#if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) +#include "media/mojo/interfaces/constants.mojom.h" +#include "media/mojo/services/media_service_factory.h" +#endif + #include <QGuiApplication> #include <QLocale> #ifndef QT_NO_OPENGL @@ -249,7 +255,6 @@ void ShareGroupQtQuick::AboutToAddFirstContext() } ContentBrowserClientQt::ContentBrowserClientQt() - : m_browserMainParts(0) { } @@ -257,10 +262,9 @@ ContentBrowserClientQt::~ContentBrowserClientQt() { } -content::BrowserMainParts *ContentBrowserClientQt::CreateBrowserMainParts(const content::MainFunctionParams&) +std::unique_ptr<content::BrowserMainParts> ContentBrowserClientQt::CreateBrowserMainParts(const content::MainFunctionParams&) { - m_browserMainParts = new BrowserMainPartsQt(); - return m_browserMainParts; + return std::make_unique<BrowserMainPartsQt>(); } void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost* host, @@ -291,16 +295,16 @@ void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost* host->GetChannel()->GetRemoteAssociatedInterface(&renderer_configuration); renderer_configuration->SetInitialConfiguration(is_incognito_process); - service_manager::mojom::ServicePtr service; - *service_request = mojo::MakeRequest(&service); - service_manager::mojom::PIDReceiverPtr pid_receiver; + mojo::PendingRemote<service_manager::mojom::Service> service; + *service_request = service.InitWithNewPipeAndPassReceiver(); service_manager::Identity renderer_identity = host->GetChildIdentity(); + mojo::Remote<service_manager::mojom::ProcessMetadata> metadata; ServiceQt::GetInstance()->connector()->RegisterServiceInstance( service_manager::Identity("qtwebengine_renderer", renderer_identity.instance_group(), renderer_identity.instance_id(), base::Token::CreateRandom()), - std::move(service), mojo::MakeRequest(&pid_receiver)); + std::move(service), metadata.BindNewPipeAndPassReceiver()); } void ContentBrowserClientQt::ResourceDispatcherHostCreated() @@ -380,7 +384,7 @@ void ContentBrowserClientQt::AllowCertificateError(content::WebContents *webCont int cert_error, const net::SSLInfo &ssl_info, const GURL &request_url, - content::ResourceType resource_type, + bool is_main_frame_request, bool strict_enforcement, bool expired_previous_decision, const base::Callback<void(content::CertificateRequestResultType)> &callback) @@ -393,7 +397,7 @@ void ContentBrowserClientQt::AllowCertificateError(content::WebContents *webCont cert_error, ssl_info, request_url, - resource_type, + is_main_frame_request, IsCertErrorFatal(cert_error), strict_enforcement, callback))); @@ -558,37 +562,45 @@ void ContentBrowserClientQt::BindInterfaceRequestFromFrame(content::RenderFrameH m_frameInterfaces->TryBindInterface(interface_name, &interface_pipe); } -void ContentBrowserClientQt::RegisterIOThreadServiceHandlers(content::ServiceManagerConnection *connection) +void ContentBrowserClientQt::RunServiceInstance(const service_manager::Identity &identity, + mojo::PendingReceiver<service_manager::mojom::Service> *receiver) { - connection->AddServiceRequestHandler( - "qtwebengine", - ServiceQt::GetInstance()->CreateServiceQtRequestHandler()); +#if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) + if (identity.name() == media::mojom::kMediaServiceName) { + service_manager::Service::RunAsyncUntilTermination(media::CreateMediaService(std::move(*receiver))); + return; + } +#endif + + content::ContentBrowserClient::RunServiceInstance(identity, receiver); } -void ContentBrowserClientQt::RegisterOutOfProcessServices(content::ContentBrowserClient::OutOfProcessServiceMap *services) +void ContentBrowserClientQt::RunServiceInstanceOnIOThread(const service_manager::Identity &identity, + mojo::PendingReceiver<service_manager::mojom::Service> *receiver) { - (*services)[proxy_resolver::mojom::kProxyResolverServiceName] = - base::BindRepeating(&base::ASCIIToUTF16, "V8 Proxy Resolver"); + if (identity.name() == "qtwebengine") { + ServiceQt::GetInstance()->CreateServiceQtRequestHandler().Run(std::move(*receiver)); + return; + } + + content::ContentBrowserClient::RunServiceInstance(identity, receiver); } base::Optional<service_manager::Manifest> ContentBrowserClientQt::GetServiceManifestOverlay(base::StringPiece name) { - if (name == content::mojom::kBrowserServiceName) { + if (name == content::mojom::kBrowserServiceName) return GetQtWebEngineContentBrowserOverlayManifest(); - } else if (name == content::mojom::kPackagedServicesServiceName) { - service_manager::Manifest overlay; - overlay.packaged_services = GetQtWebEnginePackagedServiceManifests(); - return overlay; - } else if (name == content::mojom::kRendererServiceName) { + else if (name == content::mojom::kRendererServiceName) return GetQtWebEngineContentRendererOverlayManifest(); - } return base::nullopt; } std::vector<service_manager::Manifest> ContentBrowserClientQt::GetExtraServiceManifests() { - return std::vector<service_manager::Manifest>{GetQtWebEngineRendererManifest()}; + auto manifests = GetQtWebEnginePackagedServiceManifests(); + manifests.push_back(GetQtWebEngineRendererManifest()); + return manifests; } bool ContentBrowserClientQt::CanCreateWindow( @@ -748,16 +760,12 @@ bool ContentBrowserClientQt::HandleExternalProtocol( bool is_main_frame, ui::PageTransition page_transition, bool has_user_gesture, - const std::string &method, - const net::HttpRequestHeaders &headers, network::mojom::URLLoaderFactoryRequest *factory_request, network::mojom::URLLoaderFactory *&out_factory) { Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); Q_UNUSED(child_id); Q_UNUSED(navigation_data); - Q_UNUSED(method); - Q_UNUSED(headers); base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI}, base::BindOnce(&LaunchURL, diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index d0771cc4b..7201bb0df 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -83,7 +83,7 @@ class ContentBrowserClientQt : public content::ContentBrowserClient { public: ContentBrowserClientQt(); ~ContentBrowserClientQt(); - content::BrowserMainParts* CreateBrowserMainParts(const content::MainFunctionParams&) override; + std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(const content::MainFunctionParams&) override; void RenderProcessWillLaunch(content::RenderProcessHost *host, service_manager::mojom::ServiceRequest* service_request) override; void ResourceDispatcherHostCreated() override; @@ -98,7 +98,7 @@ public: int cert_error, const net::SSLInfo &ssl_info, const GURL &request_url, - content::ResourceType resource_type, + bool is_main_frame_request, bool strict_enforcement, bool expired_previous_decision, const base::Callback<void(content::CertificateRequestResultType)> &callback) override; @@ -120,8 +120,11 @@ public: void BindInterfaceRequestFromFrame(content::RenderFrameHost* render_frame_host, const std::string& interface_name, mojo::ScopedMessagePipeHandle interface_pipe) override; - void RegisterIOThreadServiceHandlers(content::ServiceManagerConnection *connection) override; - void RegisterOutOfProcessServices(OutOfProcessServiceMap* services) override; + void RunServiceInstance(const service_manager::Identity &identity, + mojo::PendingReceiver<service_manager::mojom::Service> *receiver) override; + void RunServiceInstanceOnIOThread(const service_manager::Identity &identity, + mojo::PendingReceiver<service_manager::mojom::Service> *receiver) override; + std::vector<service_manager::Manifest> GetExtraServiceManifests() override; base::Optional<service_manager::Manifest> GetServiceManifestOverlay(base::StringPiece name) override; bool CanCreateWindow(content::RenderFrameHost *opener, @@ -202,8 +205,6 @@ public: bool is_main_frame, ui::PageTransition page_transition, bool has_user_gesture, - const std::string &method, - const net::HttpRequestHeaders &headers, network::mojom::URLLoaderFactoryRequest *factory_request, network::mojom::URLLoaderFactory *&out_factory) override; @@ -226,7 +227,6 @@ private: void InitFrameInterfaces(); void AddNetworkHintsMessageFilter(int render_process_id, net::URLRequestContext *context); - BrowserMainPartsQt* m_browserMainParts; std::unique_ptr<content::ResourceDispatcherHostDelegate> m_resourceDispatcherHostDelegate; scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick; std::unique_ptr<service_manager::BinderRegistry> m_frameInterfaces; diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp index d3f46f648..1dcbd1e9d 100644 --- a/src/core/devtools_frontend_qt.cpp +++ b/src/core/devtools_frontend_qt.cpp @@ -103,7 +103,7 @@ std::unique_ptr<base::DictionaryValue> BuildObjectForResponse(const net::HttpRes static std::string GetFrontendURL() { - return "chrome-devtools://devtools/bundled/devtools_app.html"; + return "devtools://devtools/bundled/devtools_app.html"; } } // namespace diff --git a/src/core/extensions/component_extension_resource_manager_qt.cpp b/src/core/extensions/component_extension_resource_manager_qt.cpp index 09311c764..f83fcc51c 100644 --- a/src/core/extensions/component_extension_resource_manager_qt.cpp +++ b/src/core/extensions/component_extension_resource_manager_qt.cpp @@ -46,6 +46,9 @@ #include "base/logging.h" #include "base/path_service.h" +#include "base/stl_util.h" +#include "base/values.h" + #include "chrome/grit/component_extension_resources_map.h" namespace extensions { @@ -60,7 +63,7 @@ ComponentExtensionResourceManagerQt::~ComponentExtensionResourceManagerQt() {} bool ComponentExtensionResourceManagerQt::IsComponentExtensionResource(const base::FilePath &extension_path, const base::FilePath &resource_path, - ComponentExtensionResourceInfo* resource_info) const + int *resource_id) const { base::FilePath directory_path = extension_path; base::FilePath resources_dir; @@ -73,9 +76,9 @@ bool ComponentExtensionResourceManagerQt::IsComponentExtensionResource(const bas relative_path = relative_path.Append(resource_path); relative_path = relative_path.NormalizePathSeparators(); - auto entry = path_to_resource_info_.find(relative_path); - if (entry != path_to_resource_info_.end()) { - *resource_info = entry->second; + auto entry = path_to_resource_id_.find(relative_path); + if (entry != path_to_resource_id_.end()) { + *resource_id = entry->second; return true; } @@ -87,15 +90,14 @@ const ui::TemplateReplacements *ComponentExtensionResourceManagerQt::GetTemplate return nullptr; } -void ComponentExtensionResourceManagerQt::AddComponentResourceEntries(const GzippedGritResourceMap *entries, size_t size) +void ComponentExtensionResourceManagerQt::AddComponentResourceEntries(const GritResourceMap *entries, size_t size) { for (size_t i = 0; i < size; ++i) { base::FilePath resource_path = base::FilePath().AppendASCII(entries[i].name); resource_path = resource_path.NormalizePathSeparators(); - DCHECK(!base::ContainsKey(path_to_resource_info_, resource_path)); - path_to_resource_info_[resource_path] = { entries[i].value, - entries[i].gzipped }; + DCHECK(!base::ContainsKey(path_to_resource_id_, resource_path)); + path_to_resource_id_[resource_path] = entries[i].value; } } diff --git a/src/core/extensions/component_extension_resource_manager_qt.h b/src/core/extensions/component_extension_resource_manager_qt.h index c44c23439..b719c8960 100644 --- a/src/core/extensions/component_extension_resource_manager_qt.h +++ b/src/core/extensions/component_extension_resource_manager_qt.h @@ -49,7 +49,7 @@ #include "base/files/file_path.h" #include "extensions/browser/component_extension_resource_manager.h" -struct GzippedGritResourceMap; +struct GritResourceMap; namespace extensions { @@ -62,15 +62,15 @@ public: // Overridden from ComponentExtensionResourceManager: bool IsComponentExtensionResource(const base::FilePath &extension_path, const base::FilePath &resource_path, - ComponentExtensionResourceInfo *resource_info) const override; - const ui::TemplateReplacements *GetTemplateReplacementsForExtension(const std::string& extension_id) const override; + int *resource_id) const override; + const ui::TemplateReplacements *GetTemplateReplacementsForExtension(const std::string &extension_id) const override; private: - void AddComponentResourceEntries(const GzippedGritResourceMap* entries, size_t size); + void AddComponentResourceEntries(const GritResourceMap *entries, size_t size); // A map from a resource path to the resource ID. Used by // IsComponentExtensionResource. - std::map<base::FilePath, ComponentExtensionResourceInfo> path_to_resource_info_; + std::map<base::FilePath, int> path_to_resource_id_; DISALLOW_COPY_AND_ASSIGN(ComponentExtensionResourceManagerQt); }; diff --git a/src/core/extensions/extensions_browser_client_qt.cpp b/src/core/extensions/extensions_browser_client_qt.cpp index fc1def3ca..eb8c12bff 100644 --- a/src/core/extensions/extensions_browser_client_qt.cpp +++ b/src/core/extensions/extensions_browser_client_qt.cpp @@ -109,12 +109,12 @@ public: URLRequestResourceBundleJob(net::URLRequest *request, net::NetworkDelegate *network_delegate, const base::FilePath &filename, - const extensions::ComponentExtensionResourceInfo &resource_info, + int resource_id, const std::string &content_security_policy, bool send_cors_header) : net::URLRequestSimpleJob(request, network_delegate) , filename_(filename) - , resource_info_(resource_info) + , resource_id_(resource_id) , weak_factory_(this) { // Leave cache headers out of resource bundle requests. @@ -126,7 +126,7 @@ public: net::CompletionOnceCallback callback) const override { const ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - *data = rb.LoadDataResourceBytes(resource_info_.resource_id); + *data = rb.LoadDataResourceBytes(resource_id_); // Add the Content-Length header now that we know the resource length. response_info_.headers->AddHeader( @@ -173,7 +173,7 @@ private: base::FilePath filename_; // The resource to load. - const extensions::ComponentExtensionResourceInfo resource_info_; + int resource_id_; net::HttpResponseInfo response_info_; @@ -267,14 +267,14 @@ net::URLRequestJob *ExtensionsBrowserClientQt::MaybeCreateResourceBundleRequestJ // extension relative path against resources_path. resources_path.AppendRelativePath(directory_path, &relative_path)) { base::FilePath request_path = extensions::file_util::ExtensionURLToRelativeFilePath(request->url()); - ComponentExtensionResourceInfo resource_info; - if (GetComponentExtensionResourceManager()->IsComponentExtensionResource(directory_path, request_path, &resource_info)) { + int resource_id = 0; + if (GetComponentExtensionResourceManager()->IsComponentExtensionResource(directory_path, request_path, &resource_id)) { relative_path = relative_path.Append(request_path); relative_path = relative_path.NormalizePathSeparators(); return new URLRequestResourceBundleJob(request, network_delegate, relative_path, - resource_info, + resource_id, content_security_policy, send_cors_header); } @@ -285,9 +285,9 @@ net::URLRequestJob *ExtensionsBrowserClientQt::MaybeCreateResourceBundleRequestJ // Return the resource relative path and id for the given request. base::FilePath ExtensionsBrowserClientQt::GetBundleResourcePath(const network::ResourceRequest &request, const base::FilePath &extension_resources_path, - ComponentExtensionResourceInfo *resource_info) const + int *resource_id) const { - *resource_info = {}; + *resource_id = 0; // |chrome_resources_path| corresponds to src/chrome/browser/resources in // source tree. base::FilePath resources_path; @@ -304,10 +304,10 @@ base::FilePath ExtensionsBrowserClientQt::GetBundleResourcePath(const network::R const base::FilePath request_relative_path = extensions::file_util::ExtensionURLToRelativeFilePath(request.url); if (!ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager()->IsComponentExtensionResource( - extension_resources_path, request_relative_path, resource_info)) { + extension_resources_path, request_relative_path, resource_id)) { return base::FilePath(); } - DCHECK_NE(0, resource_info->resource_id); + DCHECK_NE(0, *resource_id); return request_relative_path; } @@ -317,7 +317,7 @@ base::FilePath ExtensionsBrowserClientQt::GetBundleResourcePath(const network::R void ExtensionsBrowserClientQt::LoadResourceFromResourceBundle(const network::ResourceRequest &request, network::mojom::URLLoaderRequest loader, const base::FilePath &resource_relative_path, - const ComponentExtensionResourceInfo &resource_info, + int resource_id, const std::string &content_security_policy, network::mojom::URLLoaderClientPtr client, bool send_cors_header) @@ -356,7 +356,7 @@ PrefService *ExtensionsBrowserClientQt::GetPrefServiceForContext(BrowserContext } void ExtensionsBrowserClientQt::GetEarlyExtensionPrefsObservers(content::BrowserContext *context, - std::vector<ExtensionPrefsObserver *> *observers) const + std::vector<EarlyExtensionPrefsObserver *> *observers) const { } @@ -432,11 +432,6 @@ void ExtensionsBrowserClientQt::BroadcastEventToRenderers(events::HistogramValue // histogram_value, event_name, std::move(args), GURL()); } -net::NetLog *ExtensionsBrowserClientQt::GetNetLog() -{ - return nullptr; -} - ExtensionCache *ExtensionsBrowserClientQt::GetExtensionCache() { // Only used by Chrome via ExtensionService. diff --git a/src/core/extensions/extensions_browser_client_qt.h b/src/core/extensions/extensions_browser_client_qt.h index aa478461f..056e65c9e 100644 --- a/src/core/extensions/extensions_browser_client_qt.h +++ b/src/core/extensions/extensions_browser_client_qt.h @@ -87,8 +87,8 @@ public: const ExtensionSet &extensions, const ProcessMap &process_map) override; PrefService *GetPrefServiceForContext(content::BrowserContext *context) override; - void GetEarlyExtensionPrefsObservers(content::BrowserContext *context, std::vector<ExtensionPrefsObserver *> *observers) const - override; + void GetEarlyExtensionPrefsObservers(content::BrowserContext *context, + std::vector<EarlyExtensionPrefsObserver *> *observers) const override; ProcessManagerDelegate *GetProcessManagerDelegate() const override; std::unique_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() override; @@ -107,7 +107,6 @@ public: void BroadcastEventToRenderers(events::HistogramValue histogram_value, const std::string &event_name, std::unique_ptr<base::ListValue> args) override; - net::NetLog *GetNetLog() override; ExtensionCache *GetExtensionCache() override; bool IsBackgroundUpdateAllowed() override; bool IsMinBrowserVersionSupported(const std::string &min_version) override; @@ -124,14 +123,14 @@ public: // Return the resource relative path and id for the given request. base::FilePath GetBundleResourcePath(const network::ResourceRequest &request, const base::FilePath &extension_resources_path, - ComponentExtensionResourceInfo *resource_info) const override; + int *resource_id) const override; // Creates and starts a URLLoader to load an extension resource from the // embedder's resource bundle (.pak) files. Used for component extensions. void LoadResourceFromResourceBundle(const network::ResourceRequest &request, network::mojom::URLLoaderRequest loader, const base::FilePath &resource_relative_path, - const ComponentExtensionResourceInfo& resource_info, + int resource_id, const std::string &content_security_policy, network::mojom::URLLoaderClientPtr client, bool send_cors_header) override; diff --git a/src/core/net/url_request_custom_job.cpp b/src/core/net/url_request_custom_job.cpp index dd213d4f8..56ba79f35 100644 --- a/src/core/net/url_request_custom_job.cpp +++ b/src/core/net/url_request_custom_job.cpp @@ -159,7 +159,7 @@ void URLRequestCustomJob::GetResponseInfo(HttpResponseInfo* info) headers += "Access-Control-Allow-Credentials: true\n"; } - info->headers = new HttpResponseHeaders(HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size())); + info->headers = new HttpResponseHeaders(HttpUtil::AssembleRawHeaders(headers)); } bool URLRequestCustomJob::IsRedirectResponse(GURL* location, int* http_status_code, bool* /*insecure_scheme_was_upgraded*/) diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index be4d6e598..e2b959ebc 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -104,15 +104,15 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &origin, ProfileAdap auto it = m_requests.begin(); while (it != m_requests.end()) { if (it->origin == origin && it->type == type) { - it->callback.Run(status); + std::move(it->callback).Run(status); it = m_requests.erase(it); } else ++it; } } - for (const RequestOrSubscription &subscriber : qAsConst(m_subscribers)) { - if (subscriber.origin == origin && subscriber.type == type) - subscriber.callback.Run(status); + for (const auto &it: m_subscribers) { + if (it.second.origin == origin && it.second.type == type) + it.second.callback.Run(status); } auto it = m_multiRequests.begin(); @@ -139,7 +139,7 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &origin, ProfileAdap result.push_back(blink::mojom::PermissionStatus::DENIED); } if (answerable) { - it->callback.Run(result); + std::move(it->callback).Run(result); it = m_multiRequests.erase(it); continue; } @@ -158,7 +158,7 @@ int PermissionManagerQt::RequestPermission(content::PermissionType permission, content::RenderFrameHost *frameHost, const GURL& requesting_origin, bool /*user_gesture*/, - const base::Callback<void(blink::mojom::PermissionStatus)>& callback) + base::OnceCallback<void(blink::mojom::PermissionStatus)> callback) { WebContentsDelegateQt *contentsDelegate = static_cast<WebContentsDelegateQt *>( content::WebContents::FromRenderFrameHost(frameHost)->GetDelegate()); @@ -166,15 +166,15 @@ int PermissionManagerQt::RequestPermission(content::PermissionType permission, ProfileAdapter::PermissionType permissionType = toQt(permission); if (permissionType == ProfileAdapter::UnsupportedPermission) { - callback.Run(blink::mojom::PermissionStatus::DENIED); + std::move(callback).Run(blink::mojom::PermissionStatus::DENIED); return content::PermissionController::kNoPendingOperation; } else if (permissionType == ProfileAdapter::ClipboardRead) { WebEngineSettings *settings = contentsDelegate->webEngineSettings(); if (settings->testAttribute(WebEngineSettings::JavascriptCanAccessClipboard) && settings->testAttribute(WebEngineSettings::JavascriptCanPaste)) - callback.Run(blink::mojom::PermissionStatus::GRANTED); + std::move(callback).Run(blink::mojom::PermissionStatus::GRANTED); else - callback.Run(blink::mojom::PermissionStatus::DENIED); + std::move(callback).Run(blink::mojom::PermissionStatus::DENIED); return content::PermissionController::kNoPendingOperation; } // Audio and video-capture should not come this way currently @@ -182,16 +182,12 @@ int PermissionManagerQt::RequestPermission(content::PermissionType permission, && permissionType != ProfileAdapter::VideoCapturePermission); int request_id = ++m_requestIdCount; - RequestOrSubscription request = { - permissionType, - toQt(requesting_origin), - callback - }; - m_requests.insert(request_id, request); + auto requestOrigin = toQt(requesting_origin); + m_requests.push_back({ request_id, permissionType, requestOrigin, std::move(callback) }); if (permissionType == ProfileAdapter::GeolocationPermission) - contentsDelegate->requestGeolocationPermission(request.origin); + contentsDelegate->requestGeolocationPermission(requestOrigin); else if (permissionType == ProfileAdapter::NotificationPermission) - contentsDelegate->requestUserNotificationPermission(request.origin); + contentsDelegate->requestUserNotificationPermission(requestOrigin); return request_id; } @@ -200,7 +196,7 @@ int PermissionManagerQt::RequestPermissions(const std::vector<content::Permissio content::RenderFrameHost* frameHost, const GURL& requesting_origin, bool /*user_gesture*/, - const base::Callback<void(const std::vector<blink::mojom::PermissionStatus>&)>& callback) + base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback) { WebContentsDelegateQt *contentsDelegate = static_cast<WebContentsDelegateQt *>( content::WebContents::FromRenderFrameHost(frameHost)->GetDelegate()); @@ -226,23 +222,19 @@ int PermissionManagerQt::RequestPermissions(const std::vector<content::Permissio } } if (answerable) { - callback.Run(result); + std::move(callback).Run(result); return content::PermissionController::kNoPendingOperation; } int request_id = ++m_requestIdCount; - MultiRequest request = { - permissions, - toQt(requesting_origin), - callback - }; - m_multiRequests.insert(request_id, request); + auto requestOrigin = toQt(requesting_origin); + m_multiRequests.push_back({ request_id, permissions, requestOrigin, std::move(callback) }); for (content::PermissionType permission : permissions) { const ProfileAdapter::PermissionType permissionType = toQt(permission); if (permissionType == ProfileAdapter::GeolocationPermission) - contentsDelegate->requestGeolocationPermission(request.origin); + contentsDelegate->requestGeolocationPermission(requestOrigin); else if (permissionType == ProfileAdapter::NotificationPermission) - contentsDelegate->requestUserNotificationPermission(request.origin); + contentsDelegate->requestUserNotificationPermission(requestOrigin); } return request_id; } @@ -304,21 +296,17 @@ int PermissionManagerQt::SubscribePermissionStatusChange( content::PermissionType permission, content::RenderFrameHost * /* render_frame_host */, const GURL& requesting_origin, - const base::Callback<void(blink::mojom::PermissionStatus)>& callback) + base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback) { int subscriber_id = ++m_subscriberIdCount; - RequestOrSubscription subscriber = { - toQt(permission), - toQt(requesting_origin), - callback - }; - m_subscribers.insert(subscriber_id, subscriber); + m_subscribers.insert( { subscriber_id, + Subscription { toQt(permission), toQt(requesting_origin), std::move(callback) } }); return subscriber_id; } void PermissionManagerQt::UnsubscribePermissionStatusChange(int subscription_id) { - if (!m_subscribers.remove(subscription_id)) + if (!m_subscribers.erase(subscription_id)) LOG(WARNING) << "PermissionManagerQt::UnsubscribePermissionStatusChange called on unknown subscription id" << subscription_id; } diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h index 89eb6cf85..6ab071237 100644 --- a/src/core/permission_manager_qt.h +++ b/src/core/permission_manager_qt.h @@ -45,7 +45,7 @@ #include "profile_adapter.h" -#include <QHash> +#include <map> namespace QtWebEngineCore { @@ -65,7 +65,7 @@ public: content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, bool user_gesture, - const base::Callback<void(blink::mojom::PermissionStatus)>& callback) override; + base::OnceCallback<void(blink::mojom::PermissionStatus)> callback) override; blink::mojom::PermissionStatus GetPermissionStatus( content::PermissionType permission, @@ -87,32 +87,39 @@ public: content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, bool user_gesture, - const base::Callback<void( - const std::vector<blink::mojom::PermissionStatus>&)>& callback) override; + base::OnceCallback<void( + const std::vector<blink::mojom::PermissionStatus>&)> callback) override; int SubscribePermissionStatusChange( content::PermissionType permission, content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, - const base::Callback<void(blink::mojom::PermissionStatus)>& callback) override; + const base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback) override; void UnsubscribePermissionStatusChange(int subscription_id) override; private: QHash<QPair<QUrl, PermissionType>, bool> m_permissions; - struct RequestOrSubscription { + struct Request { + int id; PermissionType type; QUrl origin; - base::Callback<void(blink::mojom::PermissionStatus)> callback; + base::OnceCallback<void(blink::mojom::PermissionStatus)> callback; }; struct MultiRequest { + int id; std::vector<content::PermissionType> types; QUrl origin; - base::Callback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback; + base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback; }; - QHash<int, RequestOrSubscription> m_requests; - QHash<int, RequestOrSubscription> m_subscribers; - QHash<int, MultiRequest> m_multiRequests; + struct Subscription { + PermissionType type; + QUrl origin; + base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback; + }; + std::vector<Request> m_requests; + std::vector<MultiRequest> m_multiRequests; + std::map<int, Subscription> m_subscribers; int m_requestIdCount; int m_subscriberIdCount; diff --git a/src/core/profile_io_data_qt.cpp b/src/core/profile_io_data_qt.cpp index eccef0dd5..90016c5a3 100644 --- a/src/core/profile_io_data_qt.cpp +++ b/src/core/profile_io_data_qt.cpp @@ -55,6 +55,7 @@ #include "net/cert/ct_log_verifier.h" #include "net/cert/ct_policy_enforcer.h" #include "net/cert/multi_log_ct_verifier.h" +#include "net/cert_net/cert_net_fetcher_impl.h" #include "net/dns/host_resolver_manager.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_auth_scheme.h" @@ -67,8 +68,6 @@ #include "net/proxy_resolution/pac_file_fetcher_impl.h" #include "net/proxy_resolution/proxy_config_service.h" #include "net/proxy_resolution/proxy_resolution_service.h" -#include "net/ssl/channel_id_service.h" -#include "net/ssl/default_channel_id_store.h" #include "net/ssl/ssl_config_service_defaults.h" #include "net/url_request/data_protocol_handler.h" #include "net/url_request/file_protocol_handler.h" @@ -104,6 +103,8 @@ namespace QtWebEngineCore { +static scoped_refptr<net::CertNetFetcherImpl> s_certNetFetcher; + static bool doNetworkSessionParamsMatch(const net::HttpNetworkSession::Params &first, const net::HttpNetworkSession::Params &second) { @@ -182,9 +183,10 @@ ProfileIODataQt::~ProfileIODataQt() #if defined(USE_NSS_CERTS) net::SetURLRequestContextForNSSHttpIO(nullptr); #endif -#if defined(OS_LINUX) ||defined(OS_MACOSX) - net::ShutdownGlobalCertNetFetcher(); -#endif + if (s_certNetFetcher) { + s_certNetFetcher->Shutdown(); + s_certNetFetcher.reset(); + } } if (m_urlRequestContext && m_urlRequestContext->proxy_resolution_service()) @@ -242,7 +244,7 @@ void ProfileIODataQt::initializeOnIOThread() m_hostResolver = net::HostResolver::CreateStandaloneResolver(nullptr); m_urlRequestContext.reset(new net::URLRequestContext()); m_urlRequestContext->set_network_delegate(m_networkDelegate.get()); - m_urlRequestContext->set_enable_brotli(base::FeatureList::IsEnabled(features::kBrotliEncoding)); + m_urlRequestContext->set_enable_brotli(true); m_urlRequestContext->set_host_resolver(m_hostResolver.get()); // this binds factory to io thread m_weakPtr = m_weakPtrFactory.GetWeakPtr(); @@ -316,7 +318,7 @@ void ProfileIODataQt::generateStorage() net::ProxyConfigService *proxyConfigService = m_proxyConfigService.fetchAndStoreAcquire(0); Q_ASSERT(proxyConfigService); - std::unique_ptr<net::CertVerifier> cert_verifier = net::CertVerifier::CreateDefault(); + std::unique_ptr<net::CertVerifier> cert_verifier = net::CertVerifier::CreateDefault(s_certNetFetcher); net::CertVerifier::Config config; // Enable revocation checking: config.enable_rev_checking = true; @@ -330,8 +332,7 @@ void ProfileIODataQt::generateStorage() for (const auto &ct_log : certificate_transparency::GetKnownLogs()) { scoped_refptr<const net::CTLogVerifier> log_verifier = net::CTLogVerifier::Create(std::string(ct_log.log_key, ct_log.log_key_length), - ct_log.log_name, - ct_log.log_dns_domain); + ct_log.log_name); if (!log_verifier) continue; ct_logs.push_back(std::move(log_verifier)); @@ -389,9 +390,7 @@ void ProfileIODataQt::generateCookieStore() const std::lock_guard<QRecursiveMutex> lock(m_mutex); - // FIXME: Add code to remove the old database. - m_storage->set_channel_id_service( - std::make_unique<net::ChannelIDService>(new net::DefaultChannelIDStore(nullptr))); +// // FIXME: Add code to remove the old channel-id database. std::unique_ptr<net::CookieStore> cookieStore; switch (m_persistentCookiesPolicy) { @@ -425,7 +424,6 @@ void ProfileIODataQt::generateCookieStore() } net::CookieMonster * const cookieMonster = static_cast<net::CookieMonster*>(cookieStore.get()); - cookieStore->SetChannelIDServiceID(m_urlRequestContext->channel_id_service()->GetUniqueID()); m_cookieDelegate->setCookieMonster(cookieMonster); m_storage->set_cookie_store(std::move(cookieStore)); @@ -582,9 +580,9 @@ void ProfileIODataQt::setGlobalCertificateVerification() // Set request context used by NSS for OCSP requests. net::SetURLRequestContextForNSSHttpIO(m_urlRequestContext.get()); #endif -#if defined(OS_LINUX) || defined(OS_MACOSX) - net::SetGlobalCertNetFetcher(net::CreateCertNetFetcher(m_urlRequestContext.get())); -#endif + if (!s_certNetFetcher) + s_certNetFetcher = base::MakeRefCounted<net::CertNetFetcherImpl>(); + s_certNetFetcher->SetURLRequestContext(m_urlRequestContext.get()); } } @@ -765,6 +763,8 @@ void ProfileIODataQt::updateUsedForGlobalCertificateVerification() { Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); const std::lock_guard<QRecursiveMutex> lock(m_mutex); + if (m_useForGlobalCertificateVerification == m_profileAdapter->isUsedForGlobalCertificateVerification()) + return; m_useForGlobalCertificateVerification = m_profileAdapter->isUsedForGlobalCertificateVerification(); if (m_useForGlobalCertificateVerification) diff --git a/src/core/qtwebengine.gni b/src/core/qtwebengine.gni index d9e01a5b8..cd8514352 100644 --- a/src/core/qtwebengine.gni +++ b/src/core/qtwebengine.gni @@ -65,10 +65,6 @@ if (enable_extensions) { ] } -assert_no_deps = [ - "//ui/views/mus", -] - defines = [ "CHROMIUM_VERSION=\"" + chromium_version[0] + "\"" ] diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index c98612192..cf02731c7 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -341,6 +341,7 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget // May call SetNeedsBeginFrames host()->SetView(this); + host()->GetProcess()->AddObserver(this); } RenderWidgetHostViewQt::~RenderWidgetHostViewQt() @@ -354,6 +355,7 @@ RenderWidgetHostViewQt::~RenderWidgetHostViewQt() if (text_input_manager_) text_input_manager_->RemoveObserver(this); + host()->GetProcess()->RemoveObserver(this); m_touchSelectionController.reset(); m_touchSelectionControllerClient.reset(); @@ -694,15 +696,20 @@ void RenderWidgetHostViewQt::ImeCompositionRangeChanged(const gfx::Range&, const QT_NOT_YET_IMPLEMENTED } -void RenderWidgetHostViewQt::RenderProcessGone(base::TerminationStatus terminationStatus, - int exitCode) +void RenderWidgetHostViewQt::RenderProcessExited(content::RenderProcessHost *host, + const content::ChildProcessTerminationInfo &info) { + Q_UNUSED(host); // RenderProcessHost::FastShutdownIfPossible results in TERMINATION_STATUS_STILL_RUNNING - if (m_adapterClient && terminationStatus != base::TERMINATION_STATUS_STILL_RUNNING) { + if (m_adapterClient && info.status != base::TERMINATION_STATUS_STILL_RUNNING) { m_adapterClient->renderProcessTerminated( - m_adapterClient->renderProcessExitStatus(terminationStatus), - exitCode); + m_adapterClient->renderProcessExitStatus(info.status), + info.exit_code); } +} + +void RenderWidgetHostViewQt::RenderProcessGone() +{ Destroy(); } @@ -1010,10 +1017,8 @@ void RenderWidgetHostViewQt::notifyShown() m_delegatedFrameHost->WasShown(GetLocalSurfaceIdAllocation().local_surface_id(), m_viewRectInDips.size(), false /* record_presentation_time */); - host()->WasShown(false); - } else { - host()->WasShown(false); } + host()->WasShown(base::nullopt); } void RenderWidgetHostViewQt::notifyHidden() diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index b5f2d65bb..76807b37a 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -52,6 +52,7 @@ #include "content/browser/renderer_host/input/mouse_wheel_phase_handler.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" #include "content/browser/renderer_host/text_input_manager.h" +#include "content/public/browser/render_process_host_observer.h" #include "gpu/ipc/common/gpu_messages.h" #include "ui/events/gesture_detection/filtered_gesture_provider.h" @@ -101,6 +102,7 @@ struct MultipleMouseClickHelper class RenderWidgetHostViewQt : public content::RenderWidgetHostViewBase + , public content::RenderProcessHostObserver , public ui::GestureProviderClient , public RenderWidgetHostViewQtDelegateClient , public base::SupportsWeakPtr<RenderWidgetHostViewQt> @@ -147,7 +149,7 @@ public: void SetIsLoading(bool) override; void ImeCancelComposition() override; void ImeCompositionRangeChanged(const gfx::Range&, const std::vector<gfx::Rect>&) override; - void RenderProcessGone(base::TerminationStatus, int) override; + void RenderProcessGone() override; void Destroy() override; void SetTooltipText(const base::string16 &tooltip_text) override; void DisplayTooltipText(const base::string16& tooltip_text) override; @@ -174,6 +176,10 @@ public: void DidStopFlinging() override; std::unique_ptr<content::SyntheticGestureTarget> CreateSyntheticGestureTarget() override; + // RenderProcessHostObserver implementation. + void RenderProcessExited(content::RenderProcessHost *host, + const content::ChildProcessTerminationInfo &info) override; + // Overridden from ui::GestureProviderClient. void OnGestureEvent(const ui::GestureEventData& gesture) override; diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 092e6845d..1d2d37898 100644 --- a/src/core/renderer/content_renderer_client_qt.cpp +++ b/src/core/renderer/content_renderer_client_qt.cpp @@ -153,14 +153,18 @@ void ContentRendererClientQt::RenderThreadStarted() // Allow XMLHttpRequests from qrc to file. blink::WebURL qrc(blink::KURL("qrc:")); blink::WebString file(blink::WebString::FromASCII("file")); - blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(qrc, file, blink::WebString(), true, + blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(qrc, file, blink::WebString(), 0, + network::mojom::CorsDomainMatchMode::kAllowSubdomains, + network::mojom::CorsPortMatchMode::kAllowAnyPort, network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority); #if BUILDFLAG(ENABLE_EXTENSIONS) // Allow the pdf viewer extension to access chrome resources blink::WebURL pdfViewerExtension(blink::KURL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai")); blink::WebString chromeResources(blink::WebString::FromASCII("chrome")); - blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(pdfViewerExtension, chromeResources, blink::WebString(), true, + blink::WebSecurityPolicy::AddOriginAccessAllowListEntry(pdfViewerExtension, chromeResources, blink::WebString(), 0, + network::mojom::CorsDomainMatchMode::kAllowSubdomains, + network::mojom::CorsPortMatchMode::kAllowAnyPort, network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority); ExtensionsRendererClientQt::GetInstance()->RenderThreadStarted(); @@ -170,13 +174,14 @@ void ContentRendererClientQt::RenderThreadStarted() void ContentRendererClientQt::RenderViewCreated(content::RenderView* render_view) { // RenderViewObservers destroy themselves with their RenderView. - new RenderViewObserverQt(render_view, m_webCacheImpl.data()); + new RenderViewObserverQt(render_view); UserResourceController::instance()->renderViewCreated(render_view); } void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame* render_frame) { - QtWebEngineCore::RenderFrameObserverQt *render_frame_observer = new QtWebEngineCore::RenderFrameObserverQt(render_frame); + QtWebEngineCore::RenderFrameObserverQt *render_frame_observer = + new QtWebEngineCore::RenderFrameObserverQt(render_frame, m_webCacheImpl.data()); #if QT_CONFIG(webengine_webchannel) if (render_frame->IsMainFrame()) new WebChannelIPCTransport(render_frame); diff --git a/src/core/renderer/render_frame_observer_qt.cpp b/src/core/renderer/render_frame_observer_qt.cpp index 5a630357c..c48ef3b5c 100644 --- a/src/core/renderer/render_frame_observer_qt.cpp +++ b/src/core/renderer/render_frame_observer_qt.cpp @@ -46,6 +46,8 @@ #include "base/memory/ptr_util.h" #include "chrome/renderer/pepper/pepper_shared_memory_message_filter.h" +#include "components/web_cache/renderer/web_cache_impl.h" +#include "content/public/renderer/render_frame.h" #include "content/public/renderer/renderer_ppapi_host.h" #include "ppapi/host/ppapi_host.h" @@ -53,10 +55,12 @@ namespace QtWebEngineCore { -RenderFrameObserverQt::RenderFrameObserverQt(content::RenderFrame* render_frame) +RenderFrameObserverQt::RenderFrameObserverQt(content::RenderFrame* render_frame, + web_cache::WebCacheImpl* web_cache_impl) : RenderFrameObserver(render_frame) , RenderFrameObserverTracker<RenderFrameObserverQt>(render_frame) , m_isFrameDetached(false) + , m_web_cache_impl(web_cache_impl) { } @@ -88,4 +92,10 @@ bool RenderFrameObserverQt::isFrameDetached() const return m_isFrameDetached; } +void RenderFrameObserverQt::ReadyToCommitNavigation(blink::WebDocumentLoader *) +{ + if (render_frame()->IsMainFrame() && m_web_cache_impl) + m_web_cache_impl->ExecutePendingClearCache(); +} + } // namespace QtWebEngineCore diff --git a/src/core/renderer/render_frame_observer_qt.h b/src/core/renderer/render_frame_observer_qt.h index 4c05422bb..3c54761f3 100644 --- a/src/core/renderer/render_frame_observer_qt.h +++ b/src/core/renderer/render_frame_observer_qt.h @@ -50,6 +50,9 @@ namespace content { class RenderFrame; } +namespace web_cache { +class WebCacheImpl; +} namespace QtWebEngineCore { @@ -58,7 +61,8 @@ class RenderFrameObserverQt , public content::RenderFrameObserverTracker<RenderFrameObserverQt> { public: - explicit RenderFrameObserverQt(content::RenderFrame* render_frame); + explicit RenderFrameObserverQt(content::RenderFrame* render_frame, + web_cache::WebCacheImpl* web_cache_impl); ~RenderFrameObserverQt(); #if QT_CONFIG(webengine_pepper_plugins) @@ -74,8 +78,11 @@ public: private: DISALLOW_COPY_AND_ASSIGN(RenderFrameObserverQt); + void ReadyToCommitNavigation(blink::WebDocumentLoader *); + bool m_isFrameDetached; service_manager::BinderRegistry registry_; + web_cache::WebCacheImpl *m_web_cache_impl; }; } // namespace QtWebEngineCore diff --git a/src/core/renderer/render_view_observer_qt.cpp b/src/core/renderer/render_view_observer_qt.cpp index 2795de4b9..7e7c7bdf8 100644 --- a/src/core/renderer/render_view_observer_qt.cpp +++ b/src/core/renderer/render_view_observer_qt.cpp @@ -41,7 +41,6 @@ #include "common/qt_messages.h" -#include "components/web_cache/renderer/web_cache_impl.h" #include "content/public/renderer/render_view.h" #include "third_party/blink/public/web/web_document.h" #include "third_party/blink/public/web/web_element.h" @@ -52,10 +51,8 @@ #include "third_party/blink/public/web/web_view.h" RenderViewObserverQt::RenderViewObserverQt( - content::RenderView* render_view, - web_cache::WebCacheImpl* web_cache_impl) + content::RenderView* render_view) : content::RenderViewObserver(render_view) - , m_web_cache_impl(web_cache_impl) { } @@ -99,9 +96,3 @@ bool RenderViewObserverQt::OnMessageReceived(const IPC::Message& message) IPC_END_MESSAGE_MAP() return handled; } - -void RenderViewObserverQt::Navigate(const GURL &) -{ - if (m_web_cache_impl) - m_web_cache_impl->ExecutePendingClearCache(); -} diff --git a/src/core/renderer/render_view_observer_qt.h b/src/core/renderer/render_view_observer_qt.h index abb472f02..a878eebe8 100644 --- a/src/core/renderer/render_view_observer_qt.h +++ b/src/core/renderer/render_view_observer_qt.h @@ -43,14 +43,9 @@ #include <QtGlobal> -namespace web_cache { -class WebCacheImpl; -} - class RenderViewObserverQt : public content::RenderViewObserver { public: - RenderViewObserverQt(content::RenderView* render_view, - web_cache::WebCacheImpl* web_cache_impl); + RenderViewObserverQt(content::RenderView* render_view); private: void onFetchDocumentMarkup(quint64 requestId); @@ -60,9 +55,6 @@ private: void OnDestruct() override; bool OnMessageReceived(const IPC::Message& message) override; - void Navigate(const GURL& url) override; - - web_cache::WebCacheImpl* m_web_cache_impl; DISALLOW_COPY_AND_ASSIGN(RenderViewObserverQt); }; diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp index 745fe8b1e..1bdd1d8c0 100644 --- a/src/core/renderer/web_channel_ipc_transport.cpp +++ b/src/core/renderer/web_channel_ipc_transport.cpp @@ -252,8 +252,8 @@ void WebChannelIPCTransport::DispatchWebChannelMessage(const std::vector<uint8_t v8::Local<v8::Object> messageObject(v8::Object::New(isolate)); v8::Maybe<bool> wasSet = messageObject->DefineOwnProperty( context, - v8::String::NewFromUtf8(isolate, "data"), - v8::String::NewFromUtf8(isolate, json.constData(), v8::String::kNormalString, json.size()), + v8::String::NewFromUtf8(isolate, "data").ToLocalChecked(), + v8::String::NewFromUtf8(isolate, json.constData(), v8::NewStringType::kNormal, json.size()).ToLocalChecked(), v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete)); DCHECK(!wasSet.IsNothing() && wasSet.FromJust()); diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 9855e3859..4f8f853b2 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -89,15 +89,17 @@ namespace QtWebEngineCore { -// Maps the LogSeverity defines in base/logging.h to the web engines message levels. -static WebContentsAdapterClient::JavaScriptConsoleMessageLevel mapToJavascriptConsoleMessageLevel(int32_t messageLevel) +static WebContentsAdapterClient::JavaScriptConsoleMessageLevel mapToJavascriptConsoleMessageLevel(blink::mojom::ConsoleMessageLevel log_level) { - if (messageLevel < 1) + switch (log_level) { + case blink::mojom::ConsoleMessageLevel::kVerbose: + case blink::mojom::ConsoleMessageLevel::kInfo: return WebContentsAdapterClient::Info; - else if (messageLevel > 1) + case blink::mojom::ConsoleMessageLevel::kWarning: + return WebContentsAdapterClient::Warning; + case blink::mojom::ConsoleMessageLevel::kError: return WebContentsAdapterClient::Error; - - return WebContentsAdapterClient::Warning; + } } WebContentsDelegateQt::WebContentsDelegateQt(content::WebContents *webContents, WebContentsAdapterClient *adapterClient) @@ -566,10 +568,11 @@ void WebContentsDelegateQt::RunFileChooser(content::RenderFrameHost * /*frameHos }); } -bool WebContentsDelegateQt::DidAddMessageToConsole(content::WebContents *source, int32_t level, const base::string16 &message, int32_t line_no, const base::string16 &source_id) +bool WebContentsDelegateQt::DidAddMessageToConsole(content::WebContents *source, blink::mojom::ConsoleMessageLevel log_level, + const base::string16 &message, int32_t line_no, const base::string16 &source_id) { Q_UNUSED(source) - m_viewClient->javaScriptConsoleMessage(mapToJavascriptConsoleMessageLevel(level), toQt(message), static_cast<int>(line_no), toQt(source_id)); + m_viewClient->javaScriptConsoleMessage(mapToJavascriptConsoleMessageLevel(log_level), toQt(message), static_cast<int>(line_no), toQt(source_id)); return false; } diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index f1d5ed76c..19d1f9d58 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -134,7 +134,8 @@ public: void RunFileChooser(content::RenderFrameHost* render_frame_host, std::unique_ptr<content::FileSelectListener> listener, const blink::mojom::FileChooserParams& params) override; - bool DidAddMessageToConsole(content::WebContents* source, int32_t level, const base::string16& message, int32_t line_no, const base::string16& source_id) override; + bool DidAddMessageToConsole(content::WebContents *source, blink::mojom::ConsoleMessageLevel log_level, + const base::string16 &message, int32_t line_no, const base::string16 &source_id) override; void FindReply(content::WebContents *source, int request_id, int number_of_matches, const gfx::Rect& selection_rect, int active_match_ordinal, bool final_update) override; void RequestMediaAccessPermission(content::WebContents *web_contents, const content::MediaStreamRequest &request, diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index e570cd7f8..f8a2a7f6e 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -72,7 +72,6 @@ #include "content/public/common/main_function_params.h" #include "gpu/command_buffer/service/gpu_switches.h" #include "gpu/command_buffer/service/sync_point_manager.h" -#include "gpu/ipc/host/gpu_switches.h" #include "media/audio/audio_manager.h" #include "media/base/media_switches.h" #include "mojo/core/embedder/embedder.h" @@ -91,6 +90,10 @@ #include "content/public/app/sandbox_helper_win.h" #endif // OS_WIN +#if defined(Q_OS_MACOS) +#include "base/mac/foundation_util.h" +#endif + #ifndef QT_NO_ACCESSIBILITY #include "accessibility_activation_observer.h" #endif @@ -390,7 +393,13 @@ WebEngineContext::WebEngineContext() : m_mainDelegate(new ContentMainDelegateQt) , m_globalQObject(new QObject()) { - base::ThreadPool::Create("Browser"); +#if defined(Q_OS_MACOS) + // The bundled handling is currently both completely broken in Chromium, + // and unnecessary for us. + base::mac::SetOverrideAmIBundled(false); +#endif + + base::ThreadPoolInstance::Create("Browser"); m_contentRunner.reset(content::ContentMainRunner::Create()); m_browserRunner = content::BrowserMainRunner::Create(); @@ -460,8 +469,6 @@ WebEngineContext::WebEngineContext() parsedCommandLine->AppendSwitch(switches::kDisableAcceleratedVideoDecode); // Same problem with Pepper using OpenGL images. parsedCommandLine->AppendSwitch(switches::kDisablePepper3DImageChromium); - // Same problem with select popups. - parsedCommandLine->AppendSwitch(switches::kDisableNativeGpuMemoryBuffers); #endif #if defined(Q_OS_WIN) @@ -646,7 +653,7 @@ WebEngineContext::WebEngineContext() // This block mirrors ContentMainRunnerImpl::RunServiceManager(): m_mainDelegate->PreCreateMainMessageLoop(); - base::MessageLoop::InitMessagePumpForUIFactory(messagePumpFactory); + base::MessagePump::OverrideMessagePumpForUIFactory(messagePumpFactory); content::BrowserTaskExecutor::Create(); m_mainDelegate->PostEarlyInitialization(false); content::StartBrowserThreadPool(); diff --git a/src/tools/qwebengine_convert_dict/qwebengine_convert_dict.pro b/src/tools/qwebengine_convert_dict/qwebengine_convert_dict.pro index 27edd66d8..912c59092 100644 --- a/src/tools/qwebengine_convert_dict/qwebengine_convert_dict.pro +++ b/src/tools/qwebengine_convert_dict/qwebengine_convert_dict.pro @@ -32,6 +32,7 @@ win32: DEFINES += NOMINMAX CHROMIUM_SRC_DIR = $$QTWEBENGINE_ROOT/$$getChromiumSrcDir() INCLUDEPATH += $$CHROMIUM_SRC_DIR \ + $$CHROMIUM_SRC_DIR/third_party/boringssl/src/include \ $$OUT_PWD/../../core/$$getConfigDir()/gen SOURCES += \ diff --git a/tools/scripts/take_snapshot.py b/tools/scripts/take_snapshot.py index 3f21dda9c..741979a9e 100755 --- a/tools/scripts/take_snapshot.py +++ b/tools/scripts/take_snapshot.py @@ -176,8 +176,9 @@ def isInChromiumBlacklist(file_path): or file_path.startswith('third_party/google_') or file_path.startswith('third_party/grpc/') or file_path.startswith('third_party/hunspell_dictionaries') - or (file_path.startswith('third_party/icu') and file_path.endswith('icudtl_dat.S')) or file_path.startswith('third_party/icu/android') + or file_path.startswith('third_party/icu/cast') + or file_path.startswith('third_party/icu/chromeos') or file_path.startswith('third_party/icu/ios') or file_path.startswith('third_party/instrumented_libraries') or file_path.startswith('third_party/jsr-305') @@ -192,9 +193,8 @@ def isInChromiumBlacklist(file_path): or file_path.startswith('third_party/libwebm/source/webm_parser/fuzzing') or file_path.startswith('third_party/logilab') or file_path.startswith('third_party/markdown') - or (file_path.startswith('third_party/polymer') and - not file_path.startswith('third_party/polymer/v1_0/components-chromium/')) or file_path.startswith('third_party/openh264/src/res') + or file_path.startswith('third_party/openscreen/src/third_party/boringssl/') or file_path.startswith('third_party/pdfium/testing/resources') or file_path.startswith('third_party/pdfium/tools') or file_path.startswith('third_party/perl') @@ -206,7 +206,7 @@ def isInChromiumBlacklist(file_path): or file_path.startswith('third_party/sqlite/sqlite-src-') or file_path.startswith('third_party/speech-dispatcher') or file_path.startswith('third_party/spirv-cross/') - or file_path.startswith('third_party/swiftshader/third_party/llvm') + or file_path.startswith('third_party/swiftshader/third_party/') or file_path.startswith('third_party/wayland') or file_path.startswith('third_party/webgl') or file_path.startswith('third_party/webrtc/resources/') diff --git a/tools/scripts/version_resolver.py b/tools/scripts/version_resolver.py index 532da34e3..716a5ea3b 100644 --- a/tools/scripts/version_resolver.py +++ b/tools/scripts/version_resolver.py @@ -38,8 +38,8 @@ import json import urllib2 import git_submodule as GitSubmodule -chromium_version = '75.0.3770.56' -chromium_branch = '3770' +chromium_version = '76.0.3809.94' +chromium_branch = '3809' ninja_version = 'v1.9.0' json_url = 'http://omahaproxy.appspot.com/all.json' |