diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-01-22 10:55:57 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-01-25 15:41:53 +0100 |
commit | cde72003881c6b5680ac8ac0fe6d6971bb43e0d5 (patch) | |
tree | fcb50002765c1cb179dd6f62054380c3fed85e80 /src/core/renderer | |
parent | 3fb215dab139fd7b61473ce3fe1058b87a6b4fe3 (diff) | |
parent | 75d061bbc68875c08b3dc243e464e32a80da71df (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Including update to 87-based
Change-Id: I36b6054e00de97ab055d0bc800cff08d0408fac6
Diffstat (limited to 'src/core/renderer')
11 files changed, 52 insertions, 117 deletions
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 154cb36b4..0cff31ff5 100644 --- a/src/core/renderer/content_renderer_client_qt.cpp +++ b/src/core/renderer/content_renderer_client_qt.cpp @@ -50,7 +50,6 @@ #include "components/cdm/renderer/external_clear_key_key_system_properties.h" #include "components/cdm/renderer/widevine_key_system_properties.h" #include "components/error_page/common/error.h" -#include "components/error_page/common/error_page_params.h" #include "components/error_page/common/localized_error.h" #include "components/network_hints/renderer/web_prescient_networking_impl.h" #if QT_CONFIG(webengine_printing_and_pdf) @@ -72,10 +71,8 @@ #include "third_party/blink/public/platform/web_url_error.h" #include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/public/web/web_security_policy.h" -#include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/webui/jstemplate_builder.h" -#include "content/public/common/web_preferences.h" #if QT_CONFIG(webengine_printing_and_pdf) #include "renderer/print_web_view_helper_delegate_qt.h" @@ -103,7 +100,6 @@ #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/connector.h" -#include "services/service_manager/public/cpp/service_binding.h" #include "components/grit/components_resources.h" @@ -148,7 +144,7 @@ void ContentRendererClientQt::RenderThreadStarted() // Allow XMLHttpRequests from qrc to file. // ### consider removing for Qt6 - blink::WebURL qrc(blink::KURL("qrc:")); + blink::WebURL qrc(GURL("qrc:")); blink::WebString file(blink::WebString::FromASCII("file")); blink::WebSecurityPolicy::AddOriginAccessAllowListEntry( qrc, file, blink::WebString(), 0, network::mojom::CorsDomainMatchMode::kAllowSubdomains, @@ -157,7 +153,7 @@ void ContentRendererClientQt::RenderThreadStarted() #if BUILDFLAG(ENABLE_EXTENSIONS) // Allow the pdf viewer extension to access chrome resources - blink::WebURL pdfViewerExtension(blink::KURL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai")); + blink::WebURL pdfViewerExtension(GURL("chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai")); blink::WebString chromeResources(blink::WebString::FromASCII("chrome")); blink::WebSecurityPolicy::AddOriginAccessAllowListEntry( pdfViewerExtension, chromeResources, blink::WebString(), 0, @@ -256,11 +252,6 @@ bool ContentRendererClientQt::HasErrorPage(int httpStatusCode) return true; } -bool ContentRendererClientQt::ShouldSuppressErrorPage(content::RenderFrame *frame, const GURL &) -{ - return !(frame->GetWebkitPreferences().enable_error_page); -} - // To tap into the chromium localized strings. Ripped from the chrome layer (highly simplified). void ContentRendererClientQt::PrepareErrorPage(content::RenderFrame *renderFrame, const blink::WebURLError &web_error, @@ -304,8 +295,7 @@ void ContentRendererClientQt::GetNavigationErrorStringsInternal(content::RenderF error_page::LocalizedError::GetPageState( error.reason(), error.domain(), error.url(), isPost, false, error.stale_copy_in_cache(), false, - RenderConfiguration::is_incognito_process(), false, false, false, locale, - std::unique_ptr<error_page::ErrorPageParams>()); + RenderConfiguration::is_incognito_process(), false, false, false, locale); resourceId = IDR_NET_ERROR_HTML; @@ -376,26 +366,6 @@ blink::WebPlugin* ContentRendererClientQt::CreatePlugin(content::RenderFrame* re } #endif //BUILDFLAG(ENABLE_PLUGINS) -content::BrowserPluginDelegate *ContentRendererClientQt::CreateBrowserPluginDelegate(content::RenderFrame *render_frame, - const content::WebPluginInfo &info, - const std::string &mime_type, - const GURL &original_url) -{ -#if BUILDFLAG(ENABLE_EXTENSIONS) - return ExtensionsRendererClientQt::GetInstance()->CreateBrowserPluginDelegate(render_frame, info, mime_type, - original_url); -#else - return nullptr; -#endif -} - -void ContentRendererClientQt::BindReceiverOnMainThread(mojo::GenericPendingReceiver receiver) -{ - std::string interface_name = *receiver.interface_name(); - auto pipe = receiver.PassPipe(); - m_registry.TryBindInterface(interface_name, &pipe); -} - void ContentRendererClientQt::GetInterface(const std::string &interface_name, mojo::ScopedMessagePipeHandle interface_pipe) { content::RenderThread::Get()->BindHostReceiver(mojo::GenericPendingReceiver(interface_name, std::move(interface_pipe))); diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h index 91bce972f..82d8af514 100644 --- a/src/core/renderer/content_renderer_client_qt.h +++ b/src/core/renderer/content_renderer_client_qt.h @@ -89,7 +89,6 @@ public: void RenderThreadStarted() override; void ExposeInterfacesToBrowser(mojo::BinderMap* binders) override; void RenderFrameCreated(content::RenderFrame *render_frame) override; - bool ShouldSuppressErrorPage(content::RenderFrame *, const GURL &) override; bool HasErrorPage(int http_status_code) override; void PrepareErrorPage(content::RenderFrame *render_frame, @@ -114,10 +113,6 @@ public: const blink::WebPluginParams ¶ms, blink::WebPlugin **plugin) override; bool IsOriginIsolatedPepperPlugin(const base::FilePath& plugin_path) override; - content::BrowserPluginDelegate *CreateBrowserPluginDelegate(content::RenderFrame *render_frame, - const content::WebPluginInfo &info, - const std::string &mime_type, - const GURL &original_url) override; void WillSendRequest(blink::WebLocalFrame *frame, ui::PageTransition transition_type, @@ -127,7 +122,6 @@ public: GURL *new_url, bool *attach_same_site_cookies) override; - void BindReceiverOnMainThread(mojo::GenericPendingReceiver receiver) override; bool RequiresWebComponentsV0(const GURL &url) override; #if BUILDFLAG(ENABLE_PLUGINS) @@ -154,8 +148,6 @@ private: QScopedPointer<SpellCheck> m_spellCheck; #endif - service_manager::BinderRegistry m_registry; - DISALLOW_COPY_AND_ASSIGN(ContentRendererClientQt); }; diff --git a/src/core/renderer/content_settings_observer_qt.cpp b/src/core/renderer/content_settings_observer_qt.cpp index df9b77037..18d52b50a 100644 --- a/src/core/renderer/content_settings_observer_qt.cpp +++ b/src/core/renderer/content_settings_observer_qt.cpp @@ -82,21 +82,20 @@ bool ContentSettingsObserverQt::OnMessageReceived(const IPC::Message &message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(ContentSettingsObserverQt, message) - IPC_MESSAGE_HANDLER(QtWebEngineMsg_RequestFileSystemAccessAsyncResponse, OnRequestFileSystemAccessAsyncResponse) + IPC_MESSAGE_HANDLER(QtWebEngineMsg_RequestStorageAccessAsyncResponse, OnRequestStorageAccessAsyncResponse) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } -void ContentSettingsObserverQt::DidCommitProvisionalLoad(bool is_same_document_navigation, ui::PageTransition /*transition*/) +void ContentSettingsObserverQt::DidCommitProvisionalLoad(ui::PageTransition /*transition*/) { blink::WebLocalFrame *frame = render_frame()->GetWebFrame(); if (frame->Parent()) return; // Not a top-level navigation. - if (!is_same_document_navigation) - ClearBlockedContentSettings(); + ClearBlockedContentSettings(); GURL url = frame->GetDocument().Url(); // If we start failing this DCHECK, please makes sure we don't regress @@ -109,68 +108,51 @@ void ContentSettingsObserverQt::OnDestruct() delete this; } -bool ContentSettingsObserverQt::AllowDatabase() -{ - blink::WebFrame *frame = render_frame()->GetWebFrame(); - if (IsUniqueFrame(frame)) - return false; - - bool result = false; - Send(new QtWebEngineHostMsg_AllowDatabase(routing_id(), url::Origin(frame->GetSecurityOrigin()).GetURL(), - url::Origin(frame->Top()->GetSecurityOrigin()).GetURL(), &result)); - return result; -} - -void ContentSettingsObserverQt::RequestFileSystemAccessAsync(base::OnceCallback<void(bool)> callback) +void ContentSettingsObserverQt::AllowStorageAccess(StorageType storage_type, + base::OnceCallback<void(bool)> callback) { blink::WebFrame *frame = render_frame()->GetWebFrame(); if (IsUniqueFrame(frame)) { std::move(callback).Run(false); return; } + ++m_currentRequestId; bool inserted = m_permissionRequests.insert(std::make_pair(m_currentRequestId, std::move(callback))).second; // Verify there are no duplicate insertions. DCHECK(inserted); - Send(new QtWebEngineHostMsg_RequestFileSystemAccessAsync(routing_id(), m_currentRequestId, - url::Origin(frame->GetSecurityOrigin()).GetURL(), - url::Origin(frame->Top()->GetSecurityOrigin()).GetURL())); + Send(new QtWebEngineHostMsg_RequestStorageAccessAsync(routing_id(), m_currentRequestId, + url::Origin(frame->GetSecurityOrigin()).GetURL(), + url::Origin(frame->Top()->GetSecurityOrigin()).GetURL(), + int(storage_type))); } -bool ContentSettingsObserverQt::AllowIndexedDB() -{ - blink::WebFrame *frame = render_frame()->GetWebFrame(); - if (IsUniqueFrame(frame)) - return false; - - bool result = false; - Send(new QtWebEngineHostMsg_AllowIndexedDB(routing_id(), - url::Origin(frame->GetSecurityOrigin()).GetURL(), - url::Origin(frame->Top()->GetSecurityOrigin()).GetURL(), &result)); - return result; -} - -bool ContentSettingsObserverQt::AllowStorage(bool local) +bool ContentSettingsObserverQt::AllowStorageAccessSync(StorageType storage_type) { blink::WebLocalFrame *frame = render_frame()->GetWebFrame(); if (IsUniqueFrame(frame)) return false; - StoragePermissionsKey key(url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL(), local); - const auto permissions = m_cachedStoragePermissions.find(key); - if (permissions != m_cachedStoragePermissions.end()) - return permissions->second; + bool sameOrigin = url::Origin(frame->Top()->GetSecurityOrigin()).IsSameOriginWith(url::Origin(frame->GetSecurityOrigin())); + StoragePermissionsKey key(url::Origin(frame->GetSecurityOrigin()).GetURL(), int(storage_type)); + if (sameOrigin) { + const auto permissions = m_cachedStoragePermissions.find(key); + if (permissions != m_cachedStoragePermissions.end()) + return permissions->second; + } bool result = false; - Send(new QtWebEngineHostMsg_AllowDOMStorage(routing_id(), url::Origin(frame->GetSecurityOrigin()).GetURL(), - url::Origin(frame->Top()->GetSecurityOrigin()).GetURL(), local, &result)); - m_cachedStoragePermissions[key] = result; + Send(new QtWebEngineHostMsg_AllowStorageAccess(routing_id(), url::Origin(frame->GetSecurityOrigin()).GetURL(), + url::Origin(frame->Top()->GetSecurityOrigin()).GetURL(), + int(storage_type), &result)); + if (sameOrigin) + m_cachedStoragePermissions[key] = result; return result; } -void ContentSettingsObserverQt::OnRequestFileSystemAccessAsyncResponse(int request_id, bool allowed) +void ContentSettingsObserverQt::OnRequestStorageAccessAsyncResponse(int request_id, bool allowed) { auto it = m_permissionRequests.find(request_id); if (it == m_permissionRequests.end()) diff --git a/src/core/renderer/content_settings_observer_qt.h b/src/core/renderer/content_settings_observer_qt.h index 0c69d289c..9268b4982 100644 --- a/src/core/renderer/content_settings_observer_qt.h +++ b/src/core/renderer/content_settings_observer_qt.h @@ -67,25 +67,24 @@ public: ~ContentSettingsObserverQt() override; // blink::WebContentSettingsClient: - bool AllowDatabase() override; - void RequestFileSystemAccessAsync(base::OnceCallback<void(bool)> callback) override; - bool AllowIndexedDB() override; - bool AllowStorage(bool local) override; + void AllowStorageAccess(StorageType storage_type, + base::OnceCallback<void(bool)> callback) override; + bool AllowStorageAccessSync(StorageType storage_type) override; private: // RenderFrameObserver implementation: bool OnMessageReceived(const IPC::Message &message) override; - void DidCommitProvisionalLoad(bool is_same_document_navigation, ui::PageTransition transition) override; + void DidCommitProvisionalLoad(ui::PageTransition transition) override; void OnDestruct() override; // Message handlers. - void OnRequestFileSystemAccessAsyncResponse(int request_id, bool allowed); + void OnRequestStorageAccessAsyncResponse(int request_id, bool allowed); // Clears m_cachedStoragePermissions void ClearBlockedContentSettings(); // Caches the result of AllowStorage. - using StoragePermissionsKey = std::pair<GURL, bool>; + using StoragePermissionsKey = std::pair<GURL, int>; base::flat_map<StoragePermissionsKey, bool> m_cachedStoragePermissions; int m_currentRequestId; diff --git a/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.cpp b/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.cpp index 418429330..d49845f55 100644 --- a/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.cpp +++ b/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.cpp @@ -39,6 +39,9 @@ #include "extensions_dispatcher_delegate_qt.h" +#include "chrome/grit/renderer_resources.h" +#include "extensions/renderer/resource_bundle_source_map.h" + namespace QtWebEngineCore { ExtensionsDispatcherDelegateQt::ExtensionsDispatcherDelegateQt() @@ -49,4 +52,10 @@ ExtensionsDispatcherDelegateQt::~ExtensionsDispatcherDelegateQt() { } +void ExtensionsDispatcherDelegateQt::PopulateSourceMap(extensions::ResourceBundleSourceMap *source_map) +{ + // Custom binding for hangout services extension. + source_map->RegisterSource("webrtcDesktopCapturePrivate", IDR_WEBRTC_DESKTOP_CAPTURE_PRIVATE_CUSTOM_BINDINGS_JS); +} + } //namespace QtWebEngineCore diff --git a/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.h b/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.h index 25aa18e71..1a19bcbbb 100644 --- a/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.h +++ b/src/core/renderer/extensions/extensions_dispatcher_delegate_qt.h @@ -52,6 +52,9 @@ public: ~ExtensionsDispatcherDelegateQt() override; private: + // extensions::DispatcherDelegate implementation. + void PopulateSourceMap(extensions::ResourceBundleSourceMap *source_map) override; + DISALLOW_COPY_AND_ASSIGN(ExtensionsDispatcherDelegateQt); }; diff --git a/src/core/renderer/extensions/extensions_renderer_client_qt.cpp b/src/core/renderer/extensions/extensions_renderer_client_qt.cpp index fd928df12..f72113018 100644 --- a/src/core/renderer/extensions/extensions_renderer_client_qt.cpp +++ b/src/core/renderer/extensions/extensions_renderer_client_qt.cpp @@ -147,8 +147,6 @@ bool ExtensionsRendererClientQt::ExtensionAPIEnabledForServiceWorkerScript(const void ExtensionsRendererClientQt::RenderThreadStarted() { content::RenderThread *thread = content::RenderThread::Get(); - // ChromeRenderViewTest::SetUp() creates its own ExtensionDispatcher and - // injects it using SetExtensionDispatcher(). Don't overwrite it. if (!extension_dispatcher_) extension_dispatcher_.reset(new extensions::Dispatcher(std::make_unique<ExtensionsDispatcherDelegateQt>())); extension_dispatcher_->OnRenderThreadStarted(thread); @@ -200,16 +198,6 @@ bool ExtensionsRendererClientQt::ShouldFork(blink::WebLocalFrame *frame, return false; // TODO: Fix this to a sensible value } -content::BrowserPluginDelegate *ExtensionsRendererClientQt::CreateBrowserPluginDelegate(content::RenderFrame *render_frame, - const content::WebPluginInfo &info, - const std::string &mime_type, - const GURL &original_url) -{ - if (mime_type == content::kBrowserPluginMimeType) - return new extensions::ExtensionsGuestViewContainer(render_frame); - return new extensions::MimeHandlerViewContainer(render_frame, info, mime_type, original_url); -} - void ExtensionsRendererClientQt::RunScriptsAtDocumentStart(content::RenderFrame *render_frame) { extension_dispatcher_->RunScriptsAtDocumentStart(render_frame); diff --git a/src/core/renderer/extensions/extensions_renderer_client_qt.h b/src/core/renderer/extensions/extensions_renderer_client_qt.h index 87e324213..85cc7bf2d 100644 --- a/src/core/renderer/extensions/extensions_renderer_client_qt.h +++ b/src/core/renderer/extensions/extensions_renderer_client_qt.h @@ -108,10 +108,6 @@ public: bool is_initial_navigation, bool is_server_redirect, bool *send_referrer); - static content::BrowserPluginDelegate *CreateBrowserPluginDelegate(content::RenderFrame *render_frame, - const content::WebPluginInfo &info, - const std::string &mime_type, - const GURL &original_url); bool ExtensionAPIEnabledForServiceWorkerScript(const GURL &scope, const GURL &script_url) const override; diff --git a/src/core/renderer/render_frame_observer_qt.cpp b/src/core/renderer/render_frame_observer_qt.cpp index cc01acec6..fd900c292 100644 --- a/src/core/renderer/render_frame_observer_qt.cpp +++ b/src/core/renderer/render_frame_observer_qt.cpp @@ -77,7 +77,7 @@ void RenderFrameObserverQt::DidCreatePepperPlugin(content::RendererPpapiHost *ho } #endif -void RenderFrameObserverQt::FrameDetached() +void RenderFrameObserverQt::WillDetach() { m_isFrameDetached = true; } diff --git a/src/core/renderer/render_frame_observer_qt.h b/src/core/renderer/render_frame_observer_qt.h index 6bdf4ad23..237185f8c 100644 --- a/src/core/renderer/render_frame_observer_qt.h +++ b/src/core/renderer/render_frame_observer_qt.h @@ -68,7 +68,7 @@ public: void DidCreatePepperPlugin(content::RendererPpapiHost *host) override; #endif void OnDestruct() override; - void FrameDetached() override; + void WillDetach() override; bool isFrameDetached() const; diff --git a/src/core/renderer/user_resource_controller.cpp b/src/core/renderer/user_resource_controller.cpp index e17498302..af1f234ac 100644 --- a/src/core/renderer/user_resource_controller.cpp +++ b/src/core/renderer/user_resource_controller.cpp @@ -150,10 +150,10 @@ public: private: // RenderFrameObserver implementation. - void DidCommitProvisionalLoad(bool is_same_document_navigation, ui::PageTransition transition) override; + void DidCommitProvisionalLoad(ui::PageTransition transition) override; void DidFinishDocumentLoad() override; void DidFinishLoad() override; - void FrameDetached() override; + void WillDetach() override; void OnDestruct() override; void AddScript(const QtWebEngineCore::UserScriptData &data) override; void RemoveScript(const QtWebEngineCore::UserScriptData &data) override; @@ -198,7 +198,7 @@ void UserResourceController::runScripts(QtWebEngineCore::UserScriptData::Injecti return; const bool isMainFrame = renderFrame->IsMainFrame(); - QList<uint64_t> scriptsToRun = m_frameUserScriptMap.value(0).values(); + QList<uint64_t> scriptsToRun = m_frameUserScriptMap.value(globalScriptsIndex).values(); scriptsToRun.append(m_frameUserScriptMap.value(renderFrame).values()); for (uint64_t id : qAsConst(scriptsToRun)) { @@ -239,12 +239,8 @@ void UserResourceController::RenderFrameObserverHelper::BindReceiver( m_binding.Bind(std::move(receiver)); } -void UserResourceController::RenderFrameObserverHelper::DidCommitProvisionalLoad(bool is_same_document_navigation, - ui::PageTransition /*transitionbool*/) +void UserResourceController::RenderFrameObserverHelper::DidCommitProvisionalLoad(ui::PageTransition /*transition*/) { - if (is_same_document_navigation) - return; - // We are almost ready to run scripts. We still have to wait until the host // process has been notified of the DidCommitProvisionalLoad event to ensure // that the WebChannelTransportHost is ready to receive messages. @@ -278,7 +274,7 @@ void UserResourceController::RenderFrameObserverHelper::DidFinishLoad() QtWebEngineCore::UserScriptData::AfterLoad)); } -void UserResourceController::RenderFrameObserverHelper::FrameDetached() +void UserResourceController::RenderFrameObserverHelper::WillDetach() { m_runner.reset(); } |