summaryrefslogtreecommitdiffstats
path: root/content/test/test_render_view_host_factory.h
diff options
context:
space:
mode:
authorrkc@chromium.org <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-02 21:54:04 +0000
committerrkc@chromium.org <rkc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-02 21:54:04 +0000
commit669a2ef721ff2ba7fba0d5bf1f8357af5f722ff6 (patch)
treefa52cca867d3d600b074524b67dc0286d8041359 /content/test/test_render_view_host_factory.h
parent75d86c040b469787676a7bb1f3650a4903bc13fb (diff)
downloadchromium_src-669a2ef721ff2ba7fba0d5bf1f8357af5f722ff6.zip
chromium_src-669a2ef721ff2ba7fba0d5bf1f8357af5f722ff6.tar.gz
chromium_src-669a2ef721ff2ba7fba0d5bf1f8357af5f722ff6.tar.bz2
Re-implement the screensaver to use WebView instead of ExtensionDialogHost.
Use WebView to render the screensaver extension instead of ExtensionDialogHost. Using the RenderViewGone override to detect termination of the renderer process to restart it. Added browser tests. R=ben@chromium.org,sky@chromium.org BUG=chromium-os:28211 TEST=Tested that the screensaver comes up; tested the reload via crashing the extension renderer with SIG_ABRT; also ran browser tests. Review URL: https://chromiumcodereview.appspot.com/10191010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135000 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/test/test_render_view_host_factory.h')
-rw-r--r--content/test/test_render_view_host_factory.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/content/test/test_render_view_host_factory.h b/content/test/test_render_view_host_factory.h
new file mode 100644
index 0000000..c7f05e2
--- /dev/null
+++ b/content/test/test_render_view_host_factory.h
@@ -0,0 +1,54 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_TEST_TEST_RENDER_VIEW_HOST_FACTORY_H_
+#define CONTENT_TEST_TEST_RENDER_VIEW_HOST_FACTORY_H_
+#pragma once
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "content/browser/renderer_host/render_view_host_factory.h"
+
+namespace content {
+
+class SiteInstance;
+class RenderViewHostDelegate;
+class RenderProcessHostFactory;
+class SessionStorageNamespace;
+
+// Manages creation of the RenderViewHosts using our special subclass. This
+// automatically registers itself when it goes in scope, and unregisters itself
+// when it goes out of scope. Since you can't have more than one factory
+// registered at a time, you can only have one of these objects at a time.
+class TestRenderViewHostFactory : public RenderViewHostFactory {
+ public:
+ explicit TestRenderViewHostFactory(
+ content::RenderProcessHostFactory* rph_factory);
+ virtual ~TestRenderViewHostFactory();
+
+ virtual void set_render_process_host_factory(
+ content::RenderProcessHostFactory* rph_factory);
+ virtual content::RenderViewHost* CreateRenderViewHost(
+ content::SiteInstance* instance,
+ content::RenderViewHostDelegate* delegate,
+ int routing_id,
+ bool swapped_out,
+ content::SessionStorageNamespace* session_storage) OVERRIDE;
+
+ private:
+ // This is a bit of a hack. With the current design of the site instances /
+ // browsing instances, it's difficult to pass a RenderProcessHostFactory
+ // around properly.
+ //
+ // Instead, we set it right before we create a new RenderViewHost, which
+ // happens before the RenderProcessHost is created. This way, the instance
+ // has the correct factory and creates our special RenderProcessHosts.
+ content::RenderProcessHostFactory* render_process_host_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestRenderViewHostFactory);
+};
+
+} // namespace content
+
+#endif // CONTENT_TEST_TEST_RENDER_VIEW_HOST_FACTORY_H_