1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/command_line.h"
6 #include "content/public/common/content_switches.h"
7 #include "content/public/renderer/content_renderer_client.h"
8 #include "content/renderer/render_process_impl.h"
9 #include "content/renderer/render_thread_impl.h"
10 #include "content/test/mock_render_process.h"
11 #include "testing/gtest/include/gtest/gtest.h"
16 class RenderThreadImplBrowserTest
: public testing::Test
{
18 virtual ~RenderThreadImplBrowserTest() {}
21 class DummyListener
: public IPC::Listener
{
23 virtual bool OnMessageReceived(const IPC::Message
& message
) OVERRIDE
{
28 void CheckRenderThreadInputHandlerManager(RenderThreadImpl
* thread
) {
29 ASSERT_TRUE(thread
->input_handler_manager());
32 // Check that InputHandlerManager outlives compositor thread because it uses
33 // raw pointers to post tasks.
34 TEST_F(RenderThreadImplBrowserTest
,
35 InputHandlerManagerDestroyedAfterCompositorThread
) {
36 CommandLine::ForCurrentProcess()->AppendSwitch(
37 switches::kEnableThreadedCompositing
);
39 ContentRendererClient content_renderer_client
;
40 SetRendererClientForTesting(&content_renderer_client
);
41 base::MessageLoopForIO message_loop_
;
43 std::string channel_id
= IPC::Channel::GenerateVerifiedChannelID(
45 DummyListener dummy_listener
;
46 IPC::Channel
channel(channel_id
, IPC::Channel::MODE_SERVER
, &dummy_listener
);
47 ASSERT_TRUE(channel
.Connect());
49 scoped_ptr
<MockRenderProcess
> mock_process(new MockRenderProcess
);
50 // Owned by mock_process.
51 RenderThreadImpl
* thread
= new RenderThreadImpl(channel_id
);
52 thread
->EnsureWebKitInitialized();
54 ASSERT_TRUE(thread
->input_handler_manager());
56 thread
->compositor_message_loop_proxy()->PostTask(
58 base::Bind(&CheckRenderThreadInputHandlerManager
, thread
));
62 } // namespace content