diff options
21 files changed, 67 insertions, 16 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject 6b1784803e5333987c5e86087ec782a3eaacfa7 +Subproject 6d7b9ab74288eab0f846e5fa92854c9a49bee19 diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index 28b3f691c..16f0b00e3 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -48,8 +48,10 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/resource_dispatcher_host.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_switches.h" #include "content/public/common/main_function_params.h" #include "content/public/common/url_constants.h" +#include "ui/base/ui_base_switches.h" #include "ui/gfx/screen.h" #include "ui/gl/gl_context.h" #include "ui/gl/gl_implementation.h" @@ -69,6 +71,7 @@ #include "resource_dispatcher_host_delegate_qt.h" #include "user_script_controller_host.h" #include "web_contents_delegate_qt.h" +#include "web_engine_library_info.h" #if defined(ENABLE_PLUGINS) #include "content/public/browser/browser_ppapi_host.h" @@ -338,7 +341,7 @@ void ContentBrowserClientQt::RenderProcessWillLaunch(content::RenderProcessHost* { // FIXME: Add a settings variable to enable/disable the file scheme. content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme(host->GetID(), url::kFileScheme); - static_cast<BrowserContextQt*>(host->GetBrowserContext())->m_adapter->userScriptController()->renderProcessHostCreated(host); + static_cast<BrowserContextQt*>(host->GetBrowserContext())->m_adapter->userScriptController()->renderProcessStartedWithHost(host); } void ContentBrowserClientQt::ResourceDispatcherHostCreated() @@ -447,7 +450,16 @@ content::LocationProvider *ContentBrowserClientQt::OverrideSystemLocationProvide std::string ContentBrowserClientQt::GetApplicationLocale() { - return QLocale().bcp47Name().toStdString(); + return WebEngineLibraryInfo::getApplicationLocale(); +} + +void ContentBrowserClientQt::AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) +{ + Q_UNUSED(child_process_id); + + std::string processType = command_line->GetSwitchValueASCII(switches::kProcessType); + if (processType == switches::kZygoteProcess) + command_line->AppendSwitchASCII(switches::kLang, GetApplicationLocale()); } #if defined(ENABLE_PLUGINS) diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index 84c559c5d..141c82a8f 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -119,6 +119,7 @@ public: virtual blink::WebNotificationPermission CheckDesktopNotificationPermission(const GURL& source_origin, content::ResourceContext* context, int render_process_id) Q_DECL_OVERRIDE; virtual std::string GetApplicationLocale() Q_DECL_OVERRIDE; + virtual void AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) Q_DECL_OVERRIDE; #if defined(ENABLE_PLUGINS) virtual void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) Q_DECL_OVERRIDE; diff --git a/src/core/content_main_delegate_qt.cpp b/src/core/content_main_delegate_qt.cpp index b8e40a448..4003823b1 100644 --- a/src/core/content_main_delegate_qt.cpp +++ b/src/core/content_main_delegate_qt.cpp @@ -67,7 +67,7 @@ static base::StringPiece PlatformResourceProvider(int key) { void ContentMainDelegateQt::PreSandboxStartup() { net::NetModule::SetResourceProvider(PlatformResourceProvider); - ui::ResourceBundle::InitSharedInstanceWithLocale(QLocale().name().toStdString(), 0, ui::ResourceBundle::LOAD_COMMON_RESOURCES); + ui::ResourceBundle::InitSharedInstanceWithLocale(WebEngineLibraryInfo::getApplicationLocale(), 0, ui::ResourceBundle::LOAD_COMMON_RESOURCES); // Suppress info, warning and error messages per default. int logLevel = logging::LOG_FATAL; diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 0f9286252..572bc340c 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -715,6 +715,16 @@ void RenderWidgetHostViewQt::notifyResize() m_host->WasResized(); } +void RenderWidgetHostViewQt::notifyShown() +{ + WasShown(); +} + +void RenderWidgetHostViewQt::notifyHidden() +{ + WasHidden(); +} + void RenderWidgetHostViewQt::windowBoundsChanged() { m_host->SendScreenRects(); diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 68330a486..248c52f6e 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -159,6 +159,8 @@ public: // Overridden from RenderWidgetHostViewQtDelegateClient. virtual QSGNode *updatePaintNode(QSGNode *) Q_DECL_OVERRIDE; virtual void notifyResize() Q_DECL_OVERRIDE; + virtual void notifyShown() Q_DECL_OVERRIDE; + virtual void notifyHidden() Q_DECL_OVERRIDE; virtual void windowBoundsChanged() Q_DECL_OVERRIDE; virtual void windowChanged() Q_DECL_OVERRIDE; virtual bool forwardEvent(QEvent *) Q_DECL_OVERRIDE; diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h index a12f3055e..da595b91f 100644 --- a/src/core/render_widget_host_view_qt_delegate.h +++ b/src/core/render_widget_host_view_qt_delegate.h @@ -64,6 +64,8 @@ public: virtual ~RenderWidgetHostViewQtDelegateClient() { } virtual QSGNode *updatePaintNode(QSGNode *) = 0; virtual void notifyResize() = 0; + virtual void notifyShown() = 0; + virtual void notifyHidden() = 0; virtual void windowBoundsChanged() = 0; virtual void windowChanged() = 0; virtual bool forwardEvent(QEvent *) = 0; diff --git a/src/core/user_script_controller_host.cpp b/src/core/user_script_controller_host.cpp index 69284dbe1..227a639b1 100644 --- a/src/core/user_script_controller_host.cpp +++ b/src/core/user_script_controller_host.cpp @@ -186,8 +186,11 @@ void UserScriptControllerHost::reserve(WebContentsAdapter *adapter, int count) m_perContentsScripts[adapter->webContents()].reserve(count); } -void UserScriptControllerHost::renderProcessHostCreated(content::RenderProcessHost *renderer) +void UserScriptControllerHost::renderProcessStartedWithHost(content::RenderProcessHost *renderer) { + if (m_observedProcesses.contains(renderer)) + return; + if (m_renderProcessObserver.isNull()) m_renderProcessObserver.reset(new RenderProcessObserverHelper(this)); renderer->AddObserver(m_renderProcessObserver.data()); @@ -207,6 +210,8 @@ UserScriptControllerHost::UserScriptControllerHost() UserScriptControllerHost::~UserScriptControllerHost() { + Q_FOREACH (content::RenderProcessHost *renderer, m_observedProcesses) + renderer->RemoveObserver(m_renderProcessObserver.data()); } } // namespace diff --git a/src/core/user_script_controller_host.h b/src/core/user_script_controller_host.h index 293b5d2dd..49c96b333 100644 --- a/src/core/user_script_controller_host.h +++ b/src/core/user_script_controller_host.h @@ -66,7 +66,7 @@ public: void reserve(WebContentsAdapter *adapter, int count); const QSet<UserScript> registeredScripts(WebContentsAdapter *adapter) const; - void renderProcessHostCreated(content::RenderProcessHost *renderer); + void renderProcessStartedWithHost(content::RenderProcessHost *renderer); private: Q_DISABLE_COPY(UserScriptControllerHost) diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 718003c45..f0b0a0d94 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -44,8 +44,6 @@ #include "browser_accessibility_qt.h" #include "browser_context_adapter.h" #include "browser_context_qt.h" -#include "content_browser_client_qt.h" -#include "javascript_dialog_manager_qt.h" #include "media_capture_devices_dispatcher.h" #include "qt_render_view_observer_host.h" #include "type_conversion.h" @@ -54,7 +52,6 @@ #include "web_contents_view_qt.h" #include "web_engine_context.h" #include "web_engine_settings.h" -#include "web_engine_visited_links_manager.h" #include "base/values.h" #include "content/browser/renderer_host/render_view_host_impl.h" diff --git a/src/core/web_engine_library_info.cpp b/src/core/web_engine_library_info.cpp index 17f6b2a05..e78ab09e7 100644 --- a/src/core/web_engine_library_info.cpp +++ b/src/core/web_engine_library_info.cpp @@ -38,9 +38,11 @@ #include "web_engine_library_info.h" #include "base/base_paths.h" +#include "base/command_line.h" #include "base/files/file_util.h" #include "content/public/common/content_paths.h" #include "ui/base/ui_base_paths.h" +#include "ui/base/ui_base_switches.h" #include "type_conversion.h" #include <QByteArray> @@ -289,3 +291,12 @@ base::string16 WebEngineLibraryInfo::getApplicationName() { return toString16(qApp->applicationName()); } + +std::string WebEngineLibraryInfo::getApplicationLocale() +{ + CommandLine *parsedCommandLine = CommandLine::ForCurrentProcess(); + if (!parsedCommandLine->HasSwitch(switches::kLang)) + return QLocale().bcp47Name().toStdString(); + + return parsedCommandLine->GetSwitchValueASCII(switches::kLang); +} diff --git a/src/core/web_engine_library_info.h b/src/core/web_engine_library_info.h index cb7301b63..e85258078 100644 --- a/src/core/web_engine_library_info.h +++ b/src/core/web_engine_library_info.h @@ -49,6 +49,7 @@ public: static base::FilePath getPath(int key); // Called by localized_error in our custom chrome layer static base::string16 getApplicationName(); + static std::string getApplicationLocale(); }; diff --git a/src/webengine/api/qquickwebenginehistory_p.h b/src/webengine/api/qquickwebenginehistory_p.h index cb6aff2bc..9b3eeb617 100644 --- a/src/webengine/api/qquickwebenginehistory_p.h +++ b/src/webengine/api/qquickwebenginehistory_p.h @@ -67,7 +67,7 @@ public: private: QQuickWebEngineHistoryListModel(); - Q_DECLARE_PRIVATE(QQuickWebEngineHistoryListModel); + Q_DECLARE_PRIVATE(QQuickWebEngineHistoryListModel) QScopedPointer<QQuickWebEngineHistoryListModelPrivate> d_ptr; friend class QQuickWebEngineHistory; @@ -98,7 +98,7 @@ public: private: QQuickWebEngineHistory(); - Q_DECLARE_PRIVATE(QQuickWebEngineHistory); + Q_DECLARE_PRIVATE(QQuickWebEngineHistory) QScopedPointer<QQuickWebEngineHistoryPrivate> d_ptr; }; diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp index 0a534ac2c..a3999ccab 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp @@ -120,11 +120,13 @@ void RenderWidgetHostViewQtDelegateQuick::unlockMouse() void RenderWidgetHostViewQtDelegateQuick::show() { setVisible(true); + m_client->notifyShown(); } void RenderWidgetHostViewQtDelegateQuick::hide() { setVisible(false); + m_client->notifyHidden(); } bool RenderWidgetHostViewQtDelegateQuick::isVisible() const diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp index 39c48ea5c..be240a8ae 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp @@ -79,11 +79,13 @@ QRectF RenderWidgetHostViewQtDelegateQuickWindow::contentsRect() const void RenderWidgetHostViewQtDelegateQuickWindow::show() { QQuickWindow::show(); + m_realDelegate->show(); } void RenderWidgetHostViewQtDelegateQuickWindow::hide() { QQuickWindow::hide(); + m_realDelegate->hide(); } bool RenderWidgetHostViewQtDelegateQuickWindow::isVisible() const diff --git a/src/webenginewidgets/api/qwebenginecertificateerror.h b/src/webenginewidgets/api/qwebenginecertificateerror.h index 4ada5560d..90b23208c 100644 --- a/src/webenginewidgets/api/qwebenginecertificateerror.h +++ b/src/webenginewidgets/api/qwebenginecertificateerror.h @@ -75,7 +75,7 @@ public: private: Q_DISABLE_COPY(QWebEngineCertificateError) - Q_DECLARE_PRIVATE(QWebEngineCertificateError); + Q_DECLARE_PRIVATE(QWebEngineCertificateError) QScopedPointer<QWebEngineCertificateErrorPrivate> d_ptr; }; diff --git a/src/webenginewidgets/api/qwebenginehistory.h b/src/webenginewidgets/api/qwebenginehistory.h index f7f2db81e..0471e28e6 100644 --- a/src/webenginewidgets/api/qwebenginehistory.h +++ b/src/webenginewidgets/api/qwebenginehistory.h @@ -67,7 +67,7 @@ public: bool isValid() const; private: QWebEngineHistoryItem(QWebEngineHistoryItemPrivate *priv); - Q_DECLARE_PRIVATE_D(d.data(), QWebEngineHistoryItem); + Q_DECLARE_PRIVATE_D(d.data(), QWebEngineHistoryItem) QExplicitlySharedDataPointer<QWebEngineHistoryItemPrivate> d; friend class QWebEngineHistory; friend class QWebEngineHistoryPrivate; diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index 63892d197..4414ed1d5 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -125,7 +125,7 @@ public: FindBackward = 1, FindCaseSensitively = 2, }; - Q_DECLARE_FLAGS(FindFlags, FindFlag); + Q_DECLARE_FLAGS(FindFlags, FindFlag) enum WebWindowType { WebBrowserWindow, @@ -270,7 +270,7 @@ protected: virtual bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame); private: - Q_DECLARE_PRIVATE(QWebEnginePage); + Q_DECLARE_PRIVATE(QWebEnginePage) QScopedPointer<QWebEnginePagePrivate> d_ptr; #ifndef QT_NO_ACTION Q_PRIVATE_SLOT(d_func(), void _q_webActionTriggered(bool checked)) diff --git a/src/webenginewidgets/api/qwebengineview.h b/src/webenginewidgets/api/qwebengineview.h index 747dc8717..6b37dbf39 100644 --- a/src/webenginewidgets/api/qwebengineview.h +++ b/src/webenginewidgets/api/qwebengineview.h @@ -120,7 +120,7 @@ protected: virtual bool event(QEvent*) Q_DECL_OVERRIDE; private: - Q_DECLARE_PRIVATE(QWebEngineView); + Q_DECLARE_PRIVATE(QWebEngineView) QScopedPointer<QWebEngineViewPrivate> d_ptr; friend class QWebEnginePage; diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index 865d0f93f..d615b0f9c 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -136,13 +136,16 @@ void RenderWidgetHostViewQtDelegateWidget::show() { // Check if we're attached to a QWebEngineView, we don't // want to show anything else than popups as top-level. - if (parent() || m_isPopup) + if (parent() || m_isPopup) { QOpenGLWidget::show(); + m_client->notifyShown(); + } } void RenderWidgetHostViewQtDelegateWidget::hide() { QOpenGLWidget::hide(); + m_client->notifyHidden(); } bool RenderWidgetHostViewQtDelegateWidget::isVisible() const diff --git a/tests/auto/quick/qmltests/tst_qmltests.cpp b/tests/auto/quick/qmltests/tst_qmltests.cpp index 4f4f847be..1ef8be582 100644 --- a/tests/auto/quick/qmltests/tst_qmltests.cpp +++ b/tests/auto/quick/qmltests/tst_qmltests.cpp @@ -49,6 +49,9 @@ int main(int argc, char **argv) qputenv("QML2_IMPORT_PATH", QByteArray(TESTS_SOURCE_DIR "qmltests/mock-delegates")); QScopedPointer<Application> app; + // Force to use English language for testing due to error message checks + QLocale::setDefault(QLocale("en")); + if (!QCoreApplication::instance()) app.reset(new Application(argc, argv)); QtWebEngine::initialize(); |