diff options
-rw-r--r-- | chrome/chrome.xcodeproj/project.pbxproj | 8 | ||||
-rw-r--r-- | chrome/common/ipc_sync_channel_unittest.cc | 10 | ||||
-rw-r--r-- | chrome/renderer/renderer_main.cc | 4 | ||||
-rw-r--r-- | chrome/renderer/renderer_main_platform_delegate_mac.cc | 3 | ||||
-rw-r--r-- | chrome/renderer/renderer_main_unittest.cc | 113 |
5 files changed, 127 insertions, 11 deletions
diff --git a/chrome/chrome.xcodeproj/project.pbxproj b/chrome/chrome.xcodeproj/project.pbxproj index 45d4e33..71a011b 100644 --- a/chrome/chrome.xcodeproj/project.pbxproj +++ b/chrome/chrome.xcodeproj/project.pbxproj @@ -264,6 +264,8 @@ B562E2F80F05843C00FB1A4F /* property_bag.cc in Sources */ = {isa = PBXBuildFile; fileRef = B562E2F60F05843C00FB1A4F /* property_bag.cc */; }; B562E2FC0F05845100FB1A4F /* property_bag_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B562E2F40F05843C00FB1A4F /* property_bag_unittest.cc */; }; B56E281B0F057F2800447108 /* message_router.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFBD10E9D4C9F009A6919 /* message_router.cc */; }; + B5D030F00F3A3C43001238AB /* renderer_main_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B5D030EF0F3A3C43001238AB /* renderer_main_unittest.cc */; }; + B5D031270F3A4009001238AB /* ipc_sync_channel_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFBB80E9D4C9F009A6919 /* ipc_sync_channel_unittest.cc */; }; B5DBEA900EFC60E200C95176 /* ipc_channel_proxy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFBAB0E9D4C9F009A6919 /* ipc_channel_proxy.cc */; }; B5FCDE5C0F269E9B0099BFAF /* visitedlink_master.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BF95F0E9D4839009A6919 /* visitedlink_master.cc */; }; B5FDC0580EE488E500BEC6E6 /* ipc_channel_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = B5FDC0570EE488E500BEC6E6 /* ipc_channel_posix.cc */; }; @@ -1740,7 +1742,6 @@ 4D7BFBB60E9D4C9F009A6919 /* ipc_sync_channel.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ipc_sync_channel.cc; sourceTree = "<group>"; }; 4D7BFBB70E9D4C9F009A6919 /* ipc_sync_channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipc_sync_channel.h; sourceTree = "<group>"; }; 4D7BFBB80E9D4C9F009A6919 /* ipc_sync_channel_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ipc_sync_channel_unittest.cc; sourceTree = "<group>"; }; - 4D7BFBB90E9D4C9F009A6919 /* ipc_sync_channel_unittest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipc_sync_channel_unittest.h; sourceTree = "<group>"; }; 4D7BFBBA0E9D4C9F009A6919 /* ipc_sync_message.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ipc_sync_message.cc; sourceTree = "<group>"; }; 4D7BFBBB0E9D4C9F009A6919 /* ipc_sync_message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipc_sync_message.h; sourceTree = "<group>"; }; 4D7BFBBC0E9D4C9F009A6919 /* ipc_sync_message_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ipc_sync_message_unittest.cc; sourceTree = "<group>"; }; @@ -1937,6 +1938,7 @@ B562E2F40F05843C00FB1A4F /* property_bag_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = property_bag_unittest.cc; sourceTree = "<group>"; }; B562E2F50F05843C00FB1A4F /* property_bag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = property_bag.h; sourceTree = "<group>"; }; B562E2F60F05843C00FB1A4F /* property_bag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = property_bag.cc; sourceTree = "<group>"; }; + B5D030EF0F3A3C43001238AB /* renderer_main_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = renderer_main_unittest.cc; sourceTree = "<group>"; }; B5D16EAB0F21445600861FAC /* ie7_password.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ie7_password.cc; path = password_manager/ie7_password.cc; sourceTree = "<group>"; }; B5D16EAC0F21445600861FAC /* encryptor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encryptor.cc; path = password_manager/encryptor.cc; sourceTree = "<group>"; }; B5D16EAD0F21445600861FAC /* encryptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encryptor.h; path = password_manager/encryptor.h; sourceTree = "<group>"; }; @@ -2396,6 +2398,7 @@ 4D640CD70EAE868600EBCFC0 /* render_widget_unittest.cc */, 4D640CD80EAE868600EBCFC0 /* renderer_glue.cc */, 4D640CD90EAE868600EBCFC0 /* renderer_main.cc */, + B5D030EF0F3A3C43001238AB /* renderer_main_unittest.cc */, B51F6D110F37C4DC00152D66 /* renderer_main_platform_delegate.h */, B51F6D120F37C4DC00152D66 /* renderer_main_platform_delegate_win.cc */, B51F6D130F37C4DC00152D66 /* renderer_main_platform_delegate_mac.cc */, @@ -3025,7 +3028,6 @@ 4D7BFBB60E9D4C9F009A6919 /* ipc_sync_channel.cc */, 4D7BFBB70E9D4C9F009A6919 /* ipc_sync_channel.h */, 4D7BFBB80E9D4C9F009A6919 /* ipc_sync_channel_unittest.cc */, - 4D7BFBB90E9D4C9F009A6919 /* ipc_sync_channel_unittest.h */, 4D7BFBBA0E9D4C9F009A6919 /* ipc_sync_message.cc */, 4D7BFBBB0E9D4C9F009A6919 /* ipc_sync_message.h */, 4D7BFBBC0E9D4C9F009A6919 /* ipc_sync_message_unittest.cc */, @@ -4685,6 +4687,7 @@ A54612DC0EE9958600A8EE5D /* extensions_service_unittest.cc in Sources */, 4D7BFB3C0E9D4C25009A6919 /* history_types_unittest.cc in Sources */, 8268533F0F30AE1C009F6555 /* ipc_sync_channel.cc in Sources */, + B5D031270F3A4009001238AB /* ipc_sync_channel_unittest.cc in Sources */, B507AC440F004B610060FEE8 /* ipc_sync_message_unittest.cc in Sources */, A7C6146F0F30DA1D008CEE5D /* ipc_test_sink.cc in Sources */, 4D7BFCE70E9D4DD4009A6919 /* json_value_serializer_unittest.cc in Sources */, @@ -4699,6 +4702,7 @@ B562E2FC0F05845100FB1A4F /* property_bag_unittest.cc in Sources */, 4D7BFB780E9D4C5A009A6919 /* protocol_parser_unittest.cc in Sources */, 3380A9D60F2FC8F6004EF74F /* render_dns_master.cc in Sources */, + B5D030F00F3A3C43001238AB /* renderer_main_unittest.cc in Sources */, 8268533B0F30AE13009F6555 /* render_process.cc in Sources */, 3380A9C00F2FC61E004EF74F /* render_process_unittest.cc in Sources */, E434BE130F38DDA700B665C7 /* renderer_security_policy_unittest.cc in Sources */, diff --git a/chrome/common/ipc_sync_channel_unittest.cc b/chrome/common/ipc_sync_channel_unittest.cc index 2ccbd96..596faed 100644 --- a/chrome/common/ipc_sync_channel_unittest.cc +++ b/chrome/common/ipc_sync_channel_unittest.cc @@ -29,11 +29,6 @@ using base::WaitableEvent; namespace { -class IPCSyncChannelTest : public testing::Test { - private: - MessageLoop message_loop_; -}; - // SyncChannel should only be used in child processes as we don't want to hang // the browser. So in the unit test we need to have a ChildProcess object. class TestProcess : public ChildProcess { @@ -235,6 +230,11 @@ void RunTest(std::vector<Worker*> workers) { } // namespace +class IPCSyncChannelTest : public testing::Test { + private: + MessageLoop message_loop_; +}; + //----------------------------------------------------------------------------- namespace { diff --git a/chrome/renderer/renderer_main.cc b/chrome/renderer/renderer_main.cc index 7d28ecf..1ae28a3 100644 --- a/chrome/renderer/renderer_main.cc +++ b/chrome/renderer/renderer_main.cc @@ -38,16 +38,16 @@ static void HandleRendererErrorTestParameters(const CommandLine& command_line) { *bad_pointer = 0; } -#if defined(OS_WIN) if (command_line.HasSwitch(switches::kRendererStartupDialog)) { +#if defined(OS_WIN) std::wstring title = l10n_util::GetString(IDS_PRODUCT_NAME); title += L" renderer"; // makes attaching to process easier MessageBox(NULL, L"renderer starting...", title.c_str(), MB_OK | MB_SETFOREGROUND); - } #else NOTIMPLEMENTED(); #endif // !OS_WIN + } } // mainline routine for running as the Rendererer process diff --git a/chrome/renderer/renderer_main_platform_delegate_mac.cc b/chrome/renderer/renderer_main_platform_delegate_mac.cc index 022cb02..d7d5caa 100644 --- a/chrome/renderer/renderer_main_platform_delegate_mac.cc +++ b/chrome/renderer/renderer_main_platform_delegate_mac.cc @@ -39,6 +39,5 @@ bool RendererMainPlatformDelegate::EnableSandbox() { } void RendererMainPlatformDelegate::RunSandboxTests() { - // Should run sandbox unit tests. - NOTIMPLEMENTED(); + // TODO(port): Run sandbox unit test here. } diff --git a/chrome/renderer/renderer_main_unittest.cc b/chrome/renderer/renderer_main_unittest.cc new file mode 100644 index 0000000..f003015 --- /dev/null +++ b/chrome/renderer/renderer_main_unittest.cc @@ -0,0 +1,113 @@ +// Copyright (c) 2009 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. + +#include "base/message_loop.h" +#include "base/multiprocess_test.h" +#include "base/process_util.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/ipc_channel.h" +#include "chrome/common/main_function_params.h" +#include "testing/gtest/include/gtest/gtest.h" + +// TODO(port): Bring up this test this on other platforms. +#if defined(OS_MACOSX) + +using base::ProcessHandle; + +const std::wstring kRendererTestChannelName(L"test"); + +extern int RendererMain(const MainFunctionParams& parameters); + +// TODO(port): The IPC Channel tests have a class with extremely similar +// functionality, we should combine them. +class RendererMainTest : public MultiProcessTest { + protected: + + // Create a new MessageLoopForIO For each test. + virtual void SetUp(); + virtual void TearDown(); + + // Spawns a child process of the specified type + base::ProcessHandle SpawnChild(const std::wstring &procname, + IPC::Channel *channel); + + // Created around each test instantiation. + MessageLoopForIO *message_loop_; +}; + +void RendererMainTest::SetUp() { + MultiProcessTest::SetUp(); + + // Construct a fresh IO Message loop for the duration of each test. + message_loop_ = new MessageLoopForIO(); +} + +void RendererMainTest::TearDown() { + delete message_loop_; + message_loop_ = NULL; + + MultiProcessTest::TearDown(); +} + +ProcessHandle RendererMainTest::SpawnChild(const std::wstring &procname, + IPC::Channel *channel) { + base::file_handle_mapping_vector fds_to_map; + int src_fd; + int dest_fd; + channel->GetClientFileDescriptorMapping(&src_fd, &dest_fd); + if (src_fd > -1) { + fds_to_map.push_back(std::pair<int,int>(src_fd, dest_fd)); + } + + return MultiProcessTest::SpawnChild(procname, fds_to_map, false); +} + +// Listener class that kills the message loop when it connects. +class SuicidalListener : public IPC::Channel::Listener { + public: + void OnChannelConnected(int32 peer_pid) { + MessageLoop::current()->Quit(); + } + + void OnMessageReceived(const IPC::Message& message) { + // We shouldn't receive any messages + ASSERT_TRUE(false); + } +}; + +MULTIPROCESS_TEST_MAIN(SimpleRenderer) { + SandboxInitWrapper dummy_sandbox_init; + CommandLine command_line(L""); + command_line.AppendSwitchWithValue(switches::kProcessChannelID, + kRendererTestChannelName); + MainFunctionParams dummy_params(command_line, + dummy_sandbox_init); + return RendererMain(dummy_params); +} + +TEST_F(RendererMainTest, CreateDestroy) { + SuicidalListener listener; + IPC::Channel control_channel(kRendererTestChannelName, + IPC::Channel::MODE_SERVER, + &listener); + base::ProcessHandle renderer_pid = SpawnChild(L"SimpleRenderer", + &control_channel); + + control_channel.Connect(); + MessageLoop::current()->Run(); + + // The renderer should exit when we close the channel. + control_channel.Close(); + + // TODO(playmobil): Remove this. + // The renderer should shut down automatically when the Channel is closed + // but there are still issues with this, leave in the kill for bringup. + base::KillProcess(renderer_pid, 9, true); + + // TODO(playmobil): Enable this. + // see comment above KillProcess() + // EXPECT_TRUE(base::WaitForSingleProcess(renderer_pid, 5000)); +} + +#endif // defined(OS_MACOSX) |