diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 5850b07b57cb7cfacb75cc7e3f1c12419433f942..dc36b98c4d4e1378876be63f4ce601b238fb6c39 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -363,8 +363,6 @@ WebContentsAdapterPrivate::WebContentsAdapterPrivate()
 
 WebContentsAdapterPrivate::~WebContentsAdapterPrivate()
 {
-    // Destroy the WebContents first
-    webContents.reset();
 }
 
 QSharedPointer<WebContentsAdapter> WebContentsAdapter::createFromSerializedNavigationHistory(QDataStream &input, WebContentsAdapterClient *adapterClient)
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index f51a6dff36f61296a14f5c500c145a472268781b..db05fae4b5b0d27ac031de41a4699a6a7d8fe690 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -109,6 +109,13 @@ WebContentsDelegateQt::WebContentsDelegateQt(content::WebContents *webContents,
     Observe(webContents);
 }
 
+WebContentsDelegateQt::~WebContentsDelegateQt()
+{
+    // The destruction of this object should take place before
+    // WebContents destruction since WebContentsAdapterClient
+    // might be already deleted.
+}
+
 content::WebContents *WebContentsDelegateQt::OpenURLFromTab(content::WebContents *source, const content::OpenURLParams &params)
 {
     content::WebContents *target = source;
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index 8440ec05321671dec2af8d1fdeab4c72c01d4690..2ebdb2ffc01469b0faa5ceb0bd991d9a3742ed66 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -92,7 +92,7 @@ class WebContentsDelegateQt : public content::WebContentsDelegate
 {
 public:
     WebContentsDelegateQt(content::WebContents*, WebContentsAdapterClient *adapterClient);
-    ~WebContentsDelegateQt() { Q_ASSERT(m_loadingErrorFrameList.isEmpty()); }
+    ~WebContentsDelegateQt();
     QString lastSearchedString() const { return m_lastSearchedString; }
     void setLastSearchedString(const QString &s) { m_lastSearchedString = s; }
     int lastReceivedFindReply() const { return m_lastReceivedFindReply; }