diff --git a/src/core/renderer_host/user_resource_controller_host.cpp b/src/core/renderer_host/user_resource_controller_host.cpp
index 95385ae2fd98f4282768bb0b289efb442b8276f2..cf0cbd357a444c2338403c023d696b296351656a 100644
--- a/src/core/renderer_host/user_resource_controller_host.cpp
+++ b/src/core/renderer_host/user_resource_controller_host.cpp
@@ -79,14 +79,10 @@ void UserResourceControllerHost::WebContentsObserverHelper::RenderViewCreated(co
 }
 
 void UserResourceControllerHost::WebContentsObserverHelper::RenderViewHostChanged(content::RenderViewHost *oldHost,
-                                                                                content::RenderViewHost *newHost)
+                                                                                  content::RenderViewHost */*newHost*/)
 {
     if (oldHost)
         oldHost->Send(new RenderViewObserverHelper_ClearScripts(oldHost->GetRoutingID()));
-
-    content::WebContents *contents = web_contents();
-    Q_FOREACH (const UserScript &script, m_controllerHost->m_perContentsScripts.value(contents))
-        newHost->Send(new RenderViewObserverHelper_AddScript(newHost->GetRoutingID(), script.data()));
 }
 
 void UserResourceControllerHost::WebContentsObserverHelper::WebContentsDestroyed()
diff --git a/src/core/renderer_host/web_channel_ipc_transport_host.cpp b/src/core/renderer_host/web_channel_ipc_transport_host.cpp
index aef16f0a0259e521226b5191db0c88e7ca672933..a093632bc59b65eef4cfa12529dfca00171980dc 100644
--- a/src/core/renderer_host/web_channel_ipc_transport_host.cpp
+++ b/src/core/renderer_host/web_channel_ipc_transport_host.cpp
@@ -40,6 +40,7 @@
 #include "web_channel_ipc_transport_host.h"
 
 #include "base/strings/string16.h"
+#include "content/public/browser/render_view_host.h"
 
 #include "common/qt_messages.h"
 #include "type_conversion.h"
@@ -61,11 +62,16 @@ WebChannelIPCTransportHost::~WebChannelIPCTransportHost()
 {
 }
 
-void WebChannelIPCTransportHost::RenderViewHostChanged(content::RenderViewHost *, content::RenderViewHost *)
+void WebChannelIPCTransportHost::RenderViewHostChanged(content::RenderViewHost *oldHost, content::RenderViewHost *)
 {
-    // This means that we were moved into a different RenderView, possibly in a different
-    // render process and that we lost our WebChannelIPCTransport object and its state.
-    Send(new WebChannelIPCTransport_Install(routing_id(), m_worldId));
+    if (oldHost)
+        oldHost->Send(new WebChannelIPCTransport_Uninstall(oldHost->GetRoutingID(), m_worldId));
+}
+
+void WebChannelIPCTransportHost::RenderViewCreated(content::RenderViewHost *view_host)
+{
+    // Make sure the new view knows a webchannel is installed and in which world.
+    view_host->Send(new WebChannelIPCTransport_Install(view_host->GetRoutingID(), m_worldId));
 }
 
 void WebChannelIPCTransportHost::setWorldId(uint worldId)
diff --git a/src/core/renderer_host/web_channel_ipc_transport_host.h b/src/core/renderer_host/web_channel_ipc_transport_host.h
index aa406471ce59bf854e503bbd4a5d84e2bc63371c..a1e697a910ad84dd5cc8c5beb78ad616f6ccfaa2 100644
--- a/src/core/renderer_host/web_channel_ipc_transport_host.h
+++ b/src/core/renderer_host/web_channel_ipc_transport_host.h
@@ -60,6 +60,7 @@ public:
 
     // WebContentsObserver
     void RenderViewHostChanged(content::RenderViewHost* old_host, content::RenderViewHost* new_host) override;
+    void RenderViewCreated(content::RenderViewHost* render_view_host) override;
 
     // QWebChannelAbstractTransport
     void sendMessage(const QJsonObject &message) override;