summaryrefslogtreecommitdiffstats
path: root/src/core/web_contents_adapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/web_contents_adapter.cpp')
-rw-r--r--src/core/web_contents_adapter.cpp160
1 files changed, 140 insertions, 20 deletions
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 26ae9e3c5..95bdaba53 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -104,6 +104,10 @@
namespace QtWebEngineCore {
+#define CHECK_INITIALIZED(return_value) \
+ if (!isInitialized()) \
+ return return_value
+
#define CHECK_VALID_RENDER_WIDGET_HOST_VIEW(render_view_host) \
if (!render_view_host->IsRenderViewLive() && render_view_host->GetWidget()->GetView()) { \
qWarning("Ignore navigation due to terminated render process with invalid RenderWidgetHostView."); \
@@ -406,21 +410,39 @@ WebContentsAdapter::~WebContentsAdapter()
{
}
-void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
+void WebContentsAdapter::setClient(WebContentsAdapterClient *adapterClient)
{
Q_D(WebContentsAdapter);
+ Q_ASSERT(!isInitialized());
d->adapterClient = adapterClient;
// We keep a reference to browserContextAdapter to keep it alive as long as we use it.
// This is needed in case the QML WebEngineProfile is garbage collected before the WebEnginePage.
d->browserContextAdapter = adapterClient->browserContextAdapter();
Q_ASSERT(d->browserContextAdapter);
- // Create our own if a WebContents wasn't provided at construction.
- if (!d->webContents)
- d->webContents.reset(createBlankWebContents(adapterClient, d->browserContextAdapter->browserContext()));
-
// This might replace any adapter that has been initialized with this WebEngineSettings.
adapterClient->webEngineSettings()->setWebContentsAdapter(this);
+}
+
+bool WebContentsAdapter::isInitialized() const
+{
+ Q_D(const WebContentsAdapter);
+ return bool(d->webContentsDelegate);
+}
+
+void WebContentsAdapter::initialize(content::SiteInstance *site)
+{
+ Q_D(WebContentsAdapter);
+ Q_ASSERT(d->adapterClient);
+ Q_ASSERT(!isInitialized());
+
+ // Create our own if a WebContents wasn't provided at construction.
+ if (!d->webContents) {
+ content::WebContents::CreateParams create_params(d->browserContextAdapter->browserContext(), site);
+ create_params.initial_size = gfx::Size(kTestWindowWidth, kTestWindowHeight);
+ create_params.context = reinterpret_cast<gfx::NativeView>(d->adapterClient);
+ d->webContents.reset(content::WebContents::Create(create_params));
+ }
content::RendererPreferences* rendererPrefs = d->webContents->GetMutableRendererPrefs();
rendererPrefs->use_custom_colors = true;
@@ -434,7 +456,7 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
if (commandLine->HasSwitch(switches::kForceWebRtcIPHandlingPolicy))
rendererPrefs->webrtc_ip_handling_policy = commandLine->GetSwitchValueASCII(switches::kForceWebRtcIPHandlingPolicy);
else
- rendererPrefs->webrtc_ip_handling_policy = adapterClient->webEngineSettings()->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly)
+ rendererPrefs->webrtc_ip_handling_policy = d->adapterClient->webEngineSettings()->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly)
? content::kWebRTCIPHandlingDefaultPublicInterfaceOnly
: content::kWebRTCIPHandlingDefault;
#endif
@@ -450,12 +472,12 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
d->webContents->GetRenderViewHost()->SyncRendererPrefs();
// Create and attach observers to the WebContents.
- d->webContentsDelegate.reset(new WebContentsDelegateQt(d->webContents.get(), adapterClient));
- d->renderViewObserverHost.reset(new RenderViewObserverHostQt(d->webContents.get(), adapterClient));
+ d->webContentsDelegate.reset(new WebContentsDelegateQt(d->webContents.get(), d->adapterClient));
+ d->renderViewObserverHost.reset(new RenderViewObserverHostQt(d->webContents.get(), d->adapterClient));
// Let the WebContent's view know about the WebContentsAdapterClient.
WebContentsViewQt* contentsView = static_cast<WebContentsViewQt*>(static_cast<content::WebContentsImpl*>(d->webContents.get())->GetView());
- contentsView->initialize(adapterClient);
+ contentsView->initialize(d->adapterClient);
// This should only be necessary after having restored the history to a new WebContentsAdapter.
d->webContents->GetController().LoadIfNecessary();
@@ -475,11 +497,14 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
Q_ASSERT(rvh);
if (!rvh->IsRenderViewLive())
static_cast<content::WebContentsImpl*>(d->webContents.get())->CreateRenderViewForRenderManager(rvh, MSG_ROUTING_NONE, MSG_ROUTING_NONE, base::UnguessableToken::Create(), content::FrameReplicationState());
+
+ d->adapterClient->initializationFinished();
}
void WebContentsAdapter::reattachRWHV()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (content::RenderWidgetHostView *rwhv = d->webContents->GetRenderWidgetHostView())
rwhv->InitAsChild(0);
}
@@ -487,18 +512,21 @@ void WebContentsAdapter::reattachRWHV()
bool WebContentsAdapter::canGoBack() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(false);
return d->webContents->GetController().CanGoBack();
}
bool WebContentsAdapter::canGoForward() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(false);
return d->webContents->GetController().CanGoForward();
}
void WebContentsAdapter::stop()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
content::NavigationController& controller = d->webContents->GetController();
int index = controller.GetPendingEntryIndex();
@@ -512,6 +540,7 @@ void WebContentsAdapter::stop()
void WebContentsAdapter::reload()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
CHECK_VALID_RENDER_WIDGET_HOST_VIEW(d->webContents->GetRenderViewHost());
d->webContents->GetController().Reload(content::ReloadType::NORMAL, /*checkRepost = */false);
focusIfNecessary();
@@ -520,11 +549,18 @@ void WebContentsAdapter::reload()
void WebContentsAdapter::reloadAndBypassCache()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
CHECK_VALID_RENDER_WIDGET_HOST_VIEW(d->webContents->GetRenderViewHost());
d->webContents->GetController().Reload(content::ReloadType::BYPASSING_CACHE, /*checkRepost = */false);
focusIfNecessary();
}
+void WebContentsAdapter::loadDefault()
+{
+ Q_ASSERT(!isInitialized());
+ initialize(nullptr);
+}
+
void WebContentsAdapter::load(const QUrl &url)
{
QWebEngineHttpRequest request(url);
@@ -534,6 +570,14 @@ void WebContentsAdapter::load(const QUrl &url)
void WebContentsAdapter::load(const QWebEngineHttpRequest &request)
{
Q_D(WebContentsAdapter);
+
+ GURL gurl = toGurl(request.url());
+ if (!isInitialized()) {
+ scoped_refptr<content::SiteInstance> site =
+ content::SiteInstance::CreateForURL(d->browserContextAdapter->browserContext(), gurl);
+ initialize(site.get());
+ }
+
CHECK_VALID_RENDER_WIDGET_HOST_VIEW(d->webContents->GetRenderViewHost());
// The situation can occur when relying on the editingFinished signal in QML to set the url
@@ -549,8 +593,6 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request)
LoadRecursionGuard guard(this);
Q_UNUSED(guard);
- GURL gurl = toGurl(request.url());
-
// Add URL scheme if missing from view-source URL.
if (request.url().scheme() == content::kViewSourceScheme) {
QUrl pageUrl = QUrl(request.url().toString().remove(0,
@@ -625,6 +667,10 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request)
void WebContentsAdapter::setContent(const QByteArray &data, const QString &mimeType, const QUrl &baseUrl)
{
Q_D(WebContentsAdapter);
+
+ if (!isInitialized())
+ loadDefault();
+
CHECK_VALID_RENDER_WIDGET_HOST_VIEW(d->webContents->GetRenderViewHost());
QByteArray encodedData = data.toPercentEncoding();
@@ -655,6 +701,7 @@ void WebContentsAdapter::setContent(const QByteArray &data, const QString &mimeT
void WebContentsAdapter::save(const QString &filePath, int savePageFormat)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContentsDelegate->setSavePageInfo(SavePageInfo(filePath, savePageFormat));
d->webContents->OnSavePage();
}
@@ -662,23 +709,23 @@ void WebContentsAdapter::save(const QString &filePath, int savePageFormat)
QUrl WebContentsAdapter::activeUrl() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(QUrl());
return d->webContentsDelegate->url();
}
QUrl WebContentsAdapter::requestedUrl() const
{
Q_D(const WebContentsAdapter);
- if (d->webContents) {
- content::NavigationEntry* entry = d->webContents->GetController().GetVisibleEntry();
- content::NavigationEntry* pendingEntry = d->webContents->GetController().GetPendingEntry();
+ CHECK_INITIALIZED(QUrl());
+ content::NavigationEntry* entry = d->webContents->GetController().GetVisibleEntry();
+ content::NavigationEntry* pendingEntry = d->webContents->GetController().GetPendingEntry();
- if (entry) {
- if (!entry->GetOriginalRequestURL().is_empty())
- return toQt(entry->GetOriginalRequestURL());
+ if (entry) {
+ if (!entry->GetOriginalRequestURL().is_empty())
+ return toQt(entry->GetOriginalRequestURL());
- if (pendingEntry && pendingEntry == entry)
- return toQt(entry->GetURL());
- }
+ if (pendingEntry && pendingEntry == entry)
+ return toQt(entry->GetURL());
}
return QUrl();
}
@@ -686,6 +733,7 @@ QUrl WebContentsAdapter::requestedUrl() const
QUrl WebContentsAdapter::iconUrl() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(QUrl());
if (content::NavigationEntry* entry = d->webContents->GetController().GetVisibleEntry()) {
content::FaviconStatus favicon = entry->GetFavicon();
if (favicon.valid)
@@ -697,12 +745,14 @@ QUrl WebContentsAdapter::iconUrl() const
QString WebContentsAdapter::pageTitle() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(QString());
return d->webContentsDelegate->title();
}
QString WebContentsAdapter::selectedText() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(QString());
if (auto *rwhv = d->webContents->GetRenderWidgetHostView())
return toQt(rwhv->GetSelectedText());
return QString();
@@ -711,60 +761,70 @@ QString WebContentsAdapter::selectedText() const
void WebContentsAdapter::undo()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->Undo();
}
void WebContentsAdapter::redo()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->Redo();
}
void WebContentsAdapter::cut()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->Cut();
}
void WebContentsAdapter::copy()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->Copy();
}
void WebContentsAdapter::paste()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->Paste();
}
void WebContentsAdapter::pasteAndMatchStyle()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->PasteAndMatchStyle();
}
void WebContentsAdapter::selectAll()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->SelectAll();
}
void WebContentsAdapter::requestClose()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->DispatchBeforeUnload();
}
void WebContentsAdapter::unselect()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->CollapseSelection();
}
void WebContentsAdapter::navigateToIndex(int offset)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
CHECK_VALID_RENDER_WIDGET_HOST_VIEW(d->webContents->GetRenderViewHost());
d->webContents->GetController().GoToIndex(offset);
focusIfNecessary();
@@ -773,6 +833,7 @@ void WebContentsAdapter::navigateToIndex(int offset)
void WebContentsAdapter::navigateToOffset(int offset)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
CHECK_VALID_RENDER_WIDGET_HOST_VIEW(d->webContents->GetRenderViewHost());
d->webContents->GetController().GoToOffset(offset);
focusIfNecessary();
@@ -781,18 +842,21 @@ void WebContentsAdapter::navigateToOffset(int offset)
int WebContentsAdapter::navigationEntryCount()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
return d->webContents->GetController().GetEntryCount();
}
int WebContentsAdapter::currentNavigationEntryIndex()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
return d->webContents->GetController().GetCurrentEntryIndex();
}
QUrl WebContentsAdapter::getNavigationEntryOriginalUrl(int index)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(QUrl());
content::NavigationEntry *entry = d->webContents->GetController().GetEntryAtIndex(index);
return entry ? toQt(entry->GetOriginalRequestURL()) : QUrl();
}
@@ -800,6 +864,7 @@ QUrl WebContentsAdapter::getNavigationEntryOriginalUrl(int index)
QUrl WebContentsAdapter::getNavigationEntryUrl(int index)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(QUrl());
content::NavigationEntry *entry = d->webContents->GetController().GetEntryAtIndex(index);
return entry ? toQt(entry->GetURL()) : QUrl();
}
@@ -807,6 +872,7 @@ QUrl WebContentsAdapter::getNavigationEntryUrl(int index)
QString WebContentsAdapter::getNavigationEntryTitle(int index)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(QString());
content::NavigationEntry *entry = d->webContents->GetController().GetEntryAtIndex(index);
return entry ? toQt(entry->GetTitle()) : QString();
}
@@ -814,6 +880,7 @@ QString WebContentsAdapter::getNavigationEntryTitle(int index)
QDateTime WebContentsAdapter::getNavigationEntryTimestamp(int index)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(QDateTime());
content::NavigationEntry *entry = d->webContents->GetController().GetEntryAtIndex(index);
return entry ? toQt(entry->GetTimestamp()) : QDateTime();
}
@@ -821,6 +888,7 @@ QDateTime WebContentsAdapter::getNavigationEntryTimestamp(int index)
QUrl WebContentsAdapter::getNavigationEntryIconUrl(int index)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(QUrl());
content::NavigationEntry *entry = d->webContents->GetController().GetEntryAtIndex(index);
if (!entry)
return QUrl();
@@ -831,6 +899,7 @@ QUrl WebContentsAdapter::getNavigationEntryIconUrl(int index)
void WebContentsAdapter::clearNavigationHistory()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (d->webContents->GetController().CanPruneAllButLastCommitted())
d->webContents->GetController().PruneAllButLastCommitted();
}
@@ -838,12 +907,14 @@ void WebContentsAdapter::clearNavigationHistory()
void WebContentsAdapter::serializeNavigationHistory(QDataStream &output)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
QtWebEngineCore::serializeNavigationHistory(d->webContents->GetController(), output);
}
void WebContentsAdapter::setZoomFactor(qreal factor)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (factor < content::kMinimumZoomFactor || factor > content::kMaximumZoomFactor)
return;
@@ -860,6 +931,7 @@ void WebContentsAdapter::setZoomFactor(qreal factor)
qreal WebContentsAdapter::currentZoomFactor() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(1);
return content::ZoomLevelToZoomFactor(content::HostZoomMap::GetZoomLevel(d->webContents.get()));
}
@@ -879,6 +951,7 @@ BrowserContextAdapter* WebContentsAdapter::browserContextAdapter()
QAccessibleInterface *WebContentsAdapter::browserAccessible()
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(nullptr);
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
Q_ASSERT(rvh);
content::BrowserAccessibilityManager *manager = static_cast<content::RenderFrameHostImpl*>(rvh->GetMainFrame())->GetOrCreateBrowserAccessibilityManager();
@@ -893,6 +966,7 @@ QAccessibleInterface *WebContentsAdapter::browserAccessible()
void WebContentsAdapter::runJavaScript(const QString &javaScript, quint32 worldId)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
Q_ASSERT(rvh);
if (worldId == 0) {
@@ -907,6 +981,7 @@ void WebContentsAdapter::runJavaScript(const QString &javaScript, quint32 worldI
quint64 WebContentsAdapter::runJavaScriptCallbackResult(const QString &javaScript, quint32 worldId)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
Q_ASSERT(rvh);
content::RenderFrameHost::JavaScriptResultCallback callback = base::Bind(&callbackOnEvaluateJS, d->adapterClient, d->nextRequestId);
@@ -920,6 +995,7 @@ quint64 WebContentsAdapter::runJavaScriptCallbackResult(const QString &javaScrip
quint64 WebContentsAdapter::fetchDocumentMarkup()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
d->renderViewObserverHost->fetchDocumentMarkup(d->nextRequestId);
return d->nextRequestId++;
}
@@ -927,6 +1003,7 @@ quint64 WebContentsAdapter::fetchDocumentMarkup()
quint64 WebContentsAdapter::fetchDocumentInnerText()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
d->renderViewObserverHost->fetchDocumentInnerText(d->nextRequestId);
return d->nextRequestId++;
}
@@ -934,6 +1011,7 @@ quint64 WebContentsAdapter::fetchDocumentInnerText()
quint64 WebContentsAdapter::findText(const QString &subString, bool caseSensitively, bool findBackward)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
if (d->lastFindRequestId > d->webContentsDelegate->lastReceivedFindReply()) {
// There are cases where the render process will overwrite a previous request
// with the new search and we'll have a dangling callback, leaving the application
@@ -960,6 +1038,7 @@ quint64 WebContentsAdapter::findText(const QString &subString, bool caseSensitiv
void WebContentsAdapter::stopFinding()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContentsDelegate->setLastSearchedString(QString());
d->webContents->StopFinding(content::STOP_FIND_ACTION_KEEP_SELECTION);
}
@@ -967,6 +1046,7 @@ void WebContentsAdapter::stopFinding()
void WebContentsAdapter::updateWebPreferences(const content::WebPreferences & webPreferences)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->GetRenderViewHost()->UpdateWebkitPreferences(webPreferences);
}
@@ -975,6 +1055,7 @@ void WebContentsAdapter::download(const QUrl &url, const QString &suggestedFileN
ReferrerPolicy referrerPolicy)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
content::BrowserContext *bctx = webContents()->GetBrowserContext();
content::DownloadManager *dlm = content::BrowserContext::GetDownloadManager(bctx);
DownloadManagerDelegateQt *dlmd = d->browserContextAdapter->downloadManagerDelegate();
@@ -1021,24 +1102,28 @@ void WebContentsAdapter::download(const QUrl &url, const QString &suggestedFileN
bool WebContentsAdapter::isAudioMuted() const
{
const Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(false);
return d->webContents->IsAudioMuted();
}
void WebContentsAdapter::setAudioMuted(bool muted)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->SetAudioMuted(muted);
}
bool WebContentsAdapter::recentlyAudible()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(false);
return d->webContents->WasRecentlyAudible();
}
void WebContentsAdapter::copyImageAt(const QPoint &location)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->GetRenderViewHost()->GetMainFrame()->CopyImageAt(location.x(), location.y());
}
@@ -1051,6 +1136,7 @@ ASSERT_ENUMS_MATCH(WebContentsAdapter::MediaPlayerControls, blink::WebMediaPlay
void WebContentsAdapter::executeMediaPlayerActionAt(const QPoint &location, MediaPlayerAction action, bool enable)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
blink::WebMediaPlayerAction blinkAction((blink::WebMediaPlayerAction::Type)action, enable);
d->webContents->GetRenderViewHost()->ExecuteMediaPlayerActionAtLocation(toGfx(location), blinkAction);
}
@@ -1058,6 +1144,7 @@ void WebContentsAdapter::executeMediaPlayerActionAt(const QPoint &location, Medi
void WebContentsAdapter::inspectElementAt(const QPoint &location)
{
Q_D(WebContentsAdapter);
+ Q_ASSERT(isInitialized());
if (d->devToolsFrontend) {
d->devToolsFrontend->InspectElementAt(location.x(), location.y());
return;
@@ -1069,6 +1156,7 @@ void WebContentsAdapter::inspectElementAt(const QPoint &location)
bool WebContentsAdapter::hasInspector() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(false);
if (d->devToolsFrontend)
return true;
if (content::DevToolsAgentHost::HasFor(d->webContents.get()))
@@ -1079,6 +1167,7 @@ bool WebContentsAdapter::hasInspector() const
void WebContentsAdapter::openDevToolsFrontend(QSharedPointer<WebContentsAdapter> frontendAdapter)
{
Q_D(WebContentsAdapter);
+ Q_ASSERT(isInitialized());
if (d->devToolsFrontend &&
d->devToolsFrontend->frontendDelegate() == frontendAdapter->webContents()->GetDelegate())
return;
@@ -1094,6 +1183,7 @@ void WebContentsAdapter::openDevToolsFrontend(QSharedPointer<WebContentsAdapter>
void WebContentsAdapter::closeDevToolsFrontend()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (d->devToolsFrontend) {
d->devToolsFrontend->DisconnectFromTarget();
d->devToolsFrontend->Close();
@@ -1103,6 +1193,7 @@ void WebContentsAdapter::closeDevToolsFrontend()
void WebContentsAdapter::devToolsFrontendDestroyed(DevToolsFrontendQt *frontend)
{
Q_D(WebContentsAdapter);
+ Q_ASSERT(isInitialized());
Q_ASSERT(frontend == d->devToolsFrontend);
Q_UNUSED(frontend);
d->devToolsFrontend = nullptr;
@@ -1111,24 +1202,28 @@ void WebContentsAdapter::devToolsFrontendDestroyed(DevToolsFrontendQt *frontend)
void WebContentsAdapter::exitFullScreen()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->ExitFullscreen(false);
}
void WebContentsAdapter::changedFullScreen()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->NotifyFullscreenChanged(false);
}
void WebContentsAdapter::wasShown()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->WasShown();
}
void WebContentsAdapter::wasHidden()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->WasHidden();
}
@@ -1136,6 +1231,7 @@ void WebContentsAdapter::printToPDF(const QPageLayout &pageLayout, const QString
{
#if BUILDFLAG(ENABLE_BASIC_PRINTING)
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
PrintViewManagerQt::PrintToPDFFileCallback callback = base::Bind(&callbackOnPdfSavingFinished,
d->adapterClient,
filePath);
@@ -1152,6 +1248,7 @@ quint64 WebContentsAdapter::printToPDFCallbackResult(const QPageLayout &pageLayo
{
#if BUILDFLAG(ENABLE_BASIC_PRINTING)
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(0);
PrintViewManagerQt::PrintToPDFCallback callback = base::Bind(&callbackOnPrintingFinished,
d->adapterClient,
d->nextRequestId);
@@ -1170,6 +1267,7 @@ quint64 WebContentsAdapter::printToPDFCallbackResult(const QPageLayout &pageLayo
QPointF WebContentsAdapter::lastScrollOffset() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(QPointF());
if (content::RenderWidgetHostView *rwhv = d->webContents->GetRenderWidgetHostView())
return toQt(rwhv->GetLastScrollOffset());
return QPointF();
@@ -1178,6 +1276,7 @@ QPointF WebContentsAdapter::lastScrollOffset() const
QSizeF WebContentsAdapter::lastContentsSize() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(QSizeF());
if (RenderWidgetHostViewQt *rwhv = static_cast<RenderWidgetHostViewQt *>(d->webContents->GetRenderWidgetHostView()))
return toQt(rwhv->lastContentsSize());
return QSizeF();
@@ -1186,6 +1285,7 @@ QSizeF WebContentsAdapter::lastContentsSize() const
void WebContentsAdapter::grantMediaAccessPermission(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags flags)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
// Let the permission manager remember the reply.
if (flags & WebContentsAdapterClient::MediaAudioCapture)
d->browserContextAdapter->permissionRequestReply(securityOrigin, BrowserContextAdapter::AudioCapturePermission, true);
@@ -1197,12 +1297,14 @@ void WebContentsAdapter::grantMediaAccessPermission(const QUrl &securityOrigin,
void WebContentsAdapter::runGeolocationRequestCallback(const QUrl &securityOrigin, bool allowed)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->browserContextAdapter->permissionRequestReply(securityOrigin, BrowserContextAdapter::GeolocationPermission, allowed);
}
void WebContentsAdapter::grantMouseLockPermission(bool granted)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (granted) {
if (RenderWidgetHostViewQt *rwhv = static_cast<RenderWidgetHostViewQt *>(d->webContents->GetRenderWidgetHostView()))
@@ -1217,6 +1319,7 @@ void WebContentsAdapter::grantMouseLockPermission(bool granted)
void WebContentsAdapter::dpiScaleChanged()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
content::RenderWidgetHostImpl* impl = NULL;
if (d->webContents->GetRenderViewHost())
impl = content::RenderWidgetHostImpl::From(d->webContents->GetRenderViewHost()->GetWidget());
@@ -1227,6 +1330,7 @@ void WebContentsAdapter::dpiScaleChanged()
void WebContentsAdapter::backgroundColorChanged()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (content::RenderWidgetHostView *rwhv = d->webContents->GetRenderWidgetHostView())
rwhv->SetBackgroundColor(toSk(d->adapterClient->backgroundColor()));
}
@@ -1246,6 +1350,7 @@ QWebChannel *WebContentsAdapter::webChannel() const
void WebContentsAdapter::setWebChannel(QWebChannel *channel, uint worldId)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (d->webChannel == channel && d->webChannelWorld == worldId)
return;
@@ -1260,6 +1365,7 @@ void WebContentsAdapter::setWebChannel(QWebChannel *channel, uint worldId)
d->webChannel = channel;
d->webChannelWorld = worldId;
+
if (!channel) {
d->webChannelTransport.reset();
return;
@@ -1301,6 +1407,7 @@ void WebContentsAdapter::startDragging(QObject *dragSource, const content::DropD
const QPoint &offset)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (d->currentDropData)
return;
@@ -1353,6 +1460,7 @@ void WebContentsAdapter::startDragging(QObject *dragSource, const content::DropD
bool WebContentsAdapter::handleDropDataFileContents(const content::DropData &dropData,
QMimeData *mimeData)
{
+ CHECK_INITIALIZED(false);
if (dropData.file_contents.empty())
return false;
@@ -1409,6 +1517,7 @@ static void fillDropDataFromMimeData(content::DropData *dropData, const QMimeDat
void WebContentsAdapter::enterDrag(QDragEnterEvent *e, const QPointF &screenPos)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
if (!d->currentDropData) {
// The drag originated outside the WebEngineView.
@@ -1463,6 +1572,7 @@ static int toWeb(Qt::KeyboardModifiers modifiers)
Qt::DropAction WebContentsAdapter::updateDragPosition(QDragMoveEvent *e, const QPointF &screenPos)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(Qt::DropAction());
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
d->lastDragClientPos = toGfx(e->posF());
d->lastDragScreenPos = toGfx(screenPos);
@@ -1475,6 +1585,7 @@ Qt::DropAction WebContentsAdapter::updateDragPosition(QDragMoveEvent *e, const Q
void WebContentsAdapter::waitForUpdateDragActionCalled()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
const qint64 timeout = 3000;
QElapsedTimer t;
t.start();
@@ -1497,6 +1608,7 @@ void WebContentsAdapter::waitForUpdateDragActionCalled()
void WebContentsAdapter::updateDragAction(int action)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->updateDragActionCalled = true;
d->currentDropAction = static_cast<blink::WebDragOperation>(action);
}
@@ -1504,6 +1616,7 @@ void WebContentsAdapter::updateDragAction(int action)
void WebContentsAdapter::endDragging(const QPointF &clientPos, const QPointF &screenPos)
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
rvh->GetWidget()->FilterDropData(d->currentDropData.get());
d->lastDragClientPos = toGfx(clientPos);
@@ -1515,6 +1628,7 @@ void WebContentsAdapter::endDragging(const QPointF &clientPos, const QPointF &sc
void WebContentsAdapter::leaveDrag()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
rvh->GetWidget()->DragTargetDragLeave(d->lastDragClientPos, d->lastDragScreenPos);
d->currentDropData.reset();
@@ -1524,6 +1638,7 @@ void WebContentsAdapter::replaceMisspelling(const QString &word)
{
#if BUILDFLAG(ENABLE_SPELLCHECK)
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->ReplaceMisspelling(toString16(word));
#endif
}
@@ -1531,6 +1646,7 @@ void WebContentsAdapter::replaceMisspelling(const QString &word)
void WebContentsAdapter::focusIfNecessary()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
const WebEngineSettings *settings = d->adapterClient->webEngineSettings();
bool focusOnNavigation = settings->testAttribute(WebEngineSettings::FocusOnNavigationEnabled);
if (focusOnNavigation)
@@ -1540,6 +1656,7 @@ void WebContentsAdapter::focusIfNecessary()
bool WebContentsAdapter::isFindTextInProgress() const
{
Q_D(const WebContentsAdapter);
+ CHECK_INITIALIZED(false);
return d->lastFindRequestId != d->webContentsDelegate->lastReceivedFindReply();
}
@@ -1578,18 +1695,21 @@ WebContentsAdapterClient::renderProcessExitStatus(int terminationStatus) {
FaviconManager *WebContentsAdapter::faviconManager()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(nullptr);
return d->webContentsDelegate->faviconManager();
}
void WebContentsAdapter::viewSource()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED();
d->webContents->GetMainFrame()->ViewSource();
}
bool WebContentsAdapter::canViewSource()
{
Q_D(WebContentsAdapter);
+ CHECK_INITIALIZED(false);
return d->webContents->GetController().CanViewSource();
}