summaryrefslogtreecommitdiffstats
path: root/chrome_frame
diff options
context:
space:
mode:
authorerikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-01 23:04:08 +0000
committererikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-01 23:04:08 +0000
commit400daf014df2cea6d26c491a83870947689f10fb (patch)
tree8dd7e03afc409b563fc92a105130940840bdff99 /chrome_frame
parent41c2a972a3fa0a18ca4e9228d1f841450ca64c0e (diff)
downloadchromium_src-400daf014df2cea6d26c491a83870947689f10fb.zip
chromium_src-400daf014df2cea6d26c491a83870947689f10fb.tar.gz
chromium_src-400daf014df2cea6d26c491a83870947689f10fb.tar.bz2
Modify chrome_frame_net_tests to integrate the refactoring to ProcessSingleton.
BUG=None TEST=None Review URL: https://chromiumcodereview.appspot.com/9959106 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154628 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame')
-rw-r--r--chrome_frame/chrome_frame.gyp2
-rw-r--r--chrome_frame/test/net/fake_external_tab.cc54
-rw-r--r--chrome_frame/test/net/fake_external_tab.h20
-rw-r--r--chrome_frame/test/net/process_singleton_subclass.cc110
-rw-r--r--chrome_frame/test/net/process_singleton_subclass.h37
5 files changed, 46 insertions, 177 deletions
diff --git a/chrome_frame/chrome_frame.gyp b/chrome_frame/chrome_frame.gyp
index 7b8feab..bc680dd 100644
--- a/chrome_frame/chrome_frame.gyp
+++ b/chrome_frame/chrome_frame.gyp
@@ -418,8 +418,6 @@
'test/win_event_receiver.h',
'test/net/fake_external_tab.cc',
'test/net/fake_external_tab.h',
- 'test/net/process_singleton_subclass.cc',
- 'test/net/process_singleton_subclass.h',
'test/net/test_automation_provider.cc',
'test/net/test_automation_provider.h',
'test/net/test_automation_resource_message_filter.cc',
diff --git a/chrome_frame/test/net/fake_external_tab.cc b/chrome_frame/test/net/fake_external_tab.cc
index 11aa8b8..a21933b 100644
--- a/chrome_frame/test/net/fake_external_tab.cc
+++ b/chrome_frame/test/net/fake_external_tab.cc
@@ -51,6 +51,7 @@
#include "chrome/test/logging/win/test_log_collector.h"
#include "chrome_frame/crash_server_init.h"
#include "chrome_frame/test/chrome_frame_test_utils.h"
+#include "chrome_frame/test/ie_configurator.h"
#include "chrome_frame/test/net/test_automation_resource_message_filter.h"
#include "chrome_frame/test/simulate_input.h"
#include "chrome_frame/test/win_event_receiver.h"
@@ -63,6 +64,7 @@
#include "content/public/common/content_client.h"
#include "content/public/common/content_paths.h"
#include "net/base/net_util.h"
+#include "net/url_request/url_request_test_util.h"
#include "sandbox/win/src/sandbox_types.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/resource/resource_bundle.h"
@@ -441,7 +443,6 @@ FakeExternalTab::FakeExternalTab() {
PathService::Get(chrome::DIR_USER_DATA, &overridden_user_dir_);
PathService::Override(chrome::DIR_USER_DATA, user_data_dir_);
- process_singleton_.reset(new ProcessSingleton(user_data_dir_));
}
FakeExternalTab::~FakeExternalTab() {
@@ -490,7 +491,6 @@ void FakeExternalTab::InitializePostThreadsCreated() {
void FakeExternalTab::Shutdown() {
browser_process_.reset();
g_browser_process = NULL;
- process_singleton_.reset();
ResourceBundle::CleanupSharedInstance();
}
@@ -592,17 +592,6 @@ void CFUrlRequestUnittestRunner::Shutdown() {
OleUninitialize();
}
-void CFUrlRequestUnittestRunner::OnConnectAutomationProviderToChannel(
- const std::string& channel_id) {
- Profile* profile = g_browser_process->profile_manager()->
- GetDefaultProfile(fake_chrome_->user_data());
-
- AutomationProviderList* list = g_browser_process->GetAutomationProviderList();
- DCHECK(list);
- list->AddProvider(
- TestAutomationProvider::NewAutomationProvider(profile, channel_id, this));
-}
-
void CFUrlRequestUnittestRunner::OnInitialTabLoaded() {
test_http_server_.reset();
BrowserThread::PostTask(
@@ -750,15 +739,42 @@ int CFUrlRequestUnittestRunner::PreCreateThreads() {
fake_chrome_.reset(new FakeExternalTab());
fake_chrome_->Initialize();
fake_chrome_->browser_process()->PreCreateThreads();
-
- pss_subclass_.reset(new ProcessSingletonSubclass(this));
- EXPECT_TRUE(pss_subclass_->Subclass(fake_chrome_->user_data()));
- StartChromeFrameInHostBrowser();
+ process_singleton_.reset(new ProcessSingleton(fake_chrome_->user_data()));
+ process_singleton_->Lock(NULL);
return 0;
}
+bool CFUrlRequestUnittestRunner::ProcessSingletonNotificationCallback(
+ const CommandLine& command_line, const FilePath& current_directory) {
+ std::string channel_id = command_line.GetSwitchValueASCII(
+ switches::kAutomationClientChannelID);
+ EXPECT_FALSE(channel_id.empty());
+
+ Profile* profile = g_browser_process->profile_manager()->GetDefaultProfile(
+ fake_chrome_->user_data());
+
+ AutomationProviderList* list = g_browser_process->GetAutomationProviderList();
+ DCHECK(list);
+ list->AddProvider(
+ TestAutomationProvider::NewAutomationProvider(profile, channel_id, this));
+ return true;
+}
+
void CFUrlRequestUnittestRunner::PreMainMessageLoopRun() {
fake_chrome_->InitializePostThreadsCreated();
+ ProcessSingleton::NotificationCallback callback(
+ base::Bind(
+ &CFUrlRequestUnittestRunner::ProcessSingletonNotificationCallback,
+ base::Unretained(this)));
+ if (!process_singleton_->Create(callback)) {
+ LOG(FATAL) << "Failed to start up ProcessSingleton. Is another test "
+ << "executable or Chrome Frame running?";
+ if (crash_service_)
+ base::KillProcess(crash_service_, 0, false);
+ ::ExitProcess(1);
+ }
+
+ StartChromeFrameInHostBrowser();
}
bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) {
@@ -767,12 +783,13 @@ bool CFUrlRequestUnittestRunner::MainMessageLoopRun(int* result_code) {
// We need to allow IO on the main thread for these tests.
base::ThreadRestrictions::SetIOAllowed(true);
-
+ process_singleton_->Unlock();
StartInitializationTimeout();
return false;
}
void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() {
+ process_singleton_->Cleanup();
fake_chrome_->browser_process()->StartTearDown();
// Must do this separately as the mock profile_manager_ is not the
@@ -787,6 +804,7 @@ void CFUrlRequestUnittestRunner::PostMainMessageLoopRun() {
}
void CFUrlRequestUnittestRunner::PostDestroyThreads() {
+ process_singleton_.reset();
fake_chrome_->browser_process()->PostDestroyThreads();
fake_chrome_->Shutdown();
fake_chrome_.reset();
diff --git a/chrome_frame/test/net/fake_external_tab.h b/chrome_frame/test/net/fake_external_tab.h
index 3f77537..e4c2749 100644
--- a/chrome_frame/test/net/fake_external_tab.h
+++ b/chrome_frame/test/net/fake_external_tab.h
@@ -13,18 +13,17 @@
#include "base/process.h"
#include "base/win/scoped_handle.h"
#include "chrome/browser/browser_process_impl.h"
-#include "chrome_frame/test/ie_configurator.h"
-#include "chrome_frame/test/net/process_singleton_subclass.h"
#include "chrome_frame/test/net/test_automation_provider.h"
#include "chrome_frame/test/test_server.h"
#include "chrome_frame/test_utils.h"
#include "content/public/browser/browser_main_parts.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/net_test_suite.h"
-#include "net/url_request/url_request_test_util.h"
+class CommandLine;
class FakeBrowserProcessImpl;
class ProcessSingleton;
+class ScopedCustomUrlRequestTestHttpHost;
namespace content {
class NotificationService;
@@ -34,6 +33,10 @@ namespace logging_win {
class FileLogger;
} // namespace logging_win
+namespace chrome_frame_test {
+class IEConfigurator;
+} // namespace chrome_frame_test
+
class FakeExternalTab {
public:
FakeExternalTab();
@@ -53,7 +56,6 @@ class FakeExternalTab {
scoped_ptr<FakeBrowserProcessImpl> browser_process_;
FilePath overridden_user_dir_;
FilePath user_data_dir_;
- scoped_ptr<ProcessSingleton> process_singleton_;
scoped_ptr<content::NotificationService> notificaton_service_;
DISALLOW_COPY_AND_ASSIGN(FakeExternalTab);
@@ -68,7 +70,6 @@ class FakeExternalTab {
// lifetime events.
class CFUrlRequestUnittestRunner
: public NetTestSuite,
- public ProcessSingletonSubclassDelegate,
public TestAutomationProviderDelegate,
public content::BrowserMainParts {
public:
@@ -83,10 +84,6 @@ class CFUrlRequestUnittestRunner
virtual void Initialize();
virtual void Shutdown();
- // ProcessSingletonSubclassDelegate.
- virtual void OnConnectAutomationProviderToChannel(
- const std::string& channel_id);
-
// TestAutomationProviderDelegate.
virtual void OnInitialTabLoaded();
virtual void OnProviderDestroyed();
@@ -132,7 +129,6 @@ class CFUrlRequestUnittestRunner
// The fake chrome instance.
scoped_ptr<FakeExternalTab> fake_chrome_;
- scoped_ptr<ProcessSingletonSubclass> pss_subclass_;
ScopedChromeFrameRegistrar registrar_;
int test_result_;
@@ -148,9 +144,13 @@ class CFUrlRequestUnittestRunner
void StartInitializationTimeout();
void OnInitializationTimeout();
+ bool ProcessSingletonNotificationCallback(const CommandLine& command_line,
+ const FilePath& current_directory);
+
bool launch_browser_;
bool prompt_after_setup_;
bool tests_ran_;
+ scoped_ptr<ProcessSingleton> process_singleton_;
base::CancelableClosure timeout_closure_;
scoped_ptr<logging_win::FileLogger> file_logger_;
FilePath log_file_;
diff --git a/chrome_frame/test/net/process_singleton_subclass.cc b/chrome_frame/test/net/process_singleton_subclass.cc
deleted file mode 100644
index 5365fd5b..0000000
--- a/chrome_frame/test/net/process_singleton_subclass.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2010 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 "chrome_frame/test/net/process_singleton_subclass.h"
-
-#include "base/command_line.h"
-#include "base/path_service.h"
-#include "base/string_util.h"
-#include "chrome/browser/browser_process_impl.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome_frame/test/net/test_automation_provider.h"
-#include "chrome_frame/function_stub.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-ProcessSingletonSubclass::ProcessSingletonSubclass(
- ProcessSingletonSubclassDelegate* delegate)
- : stub_(NULL), delegate_(delegate), original_wndproc_(NULL) {
-}
-
-ProcessSingletonSubclass::~ProcessSingletonSubclass() {
- if (stub_) {
- stub_->BypassStub(reinterpret_cast<void*>(original_wndproc_));
- }
-}
-
-bool ProcessSingletonSubclass::Subclass(const FilePath& user_data_dir) {
- DCHECK(stub_ == NULL);
- DCHECK(original_wndproc_ == NULL);
- HWND hwnd = FindWindowEx(HWND_MESSAGE, NULL, chrome::kMessageWindowClass,
- user_data_dir.value().c_str());
- if (!::IsWindow(hwnd))
- return false;
-
- // The window must be in this process for us to be able to subclass it.
- DWORD pid = 0;
- ::GetWindowThreadProcessId(hwnd, &pid);
- EXPECT_EQ(pid, ::GetCurrentProcessId());
-
- original_wndproc_ = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hwnd,
- GWLP_WNDPROC));
- stub_ = FunctionStub::Create(reinterpret_cast<uintptr_t>(this),
- &SubclassWndProc);
- DCHECK(stub_);
- ::SetWindowLongPtr(hwnd, GWLP_WNDPROC,
- reinterpret_cast<LONG_PTR>(stub_->code()));
- return true;
-}
-
-// static
-LRESULT ProcessSingletonSubclass::SubclassWndProc(ProcessSingletonSubclass* me,
- HWND hwnd, UINT msg,
- WPARAM wp, LPARAM lp) {
- switch (msg) {
- case WM_COPYDATA:
- return me->OnCopyData(hwnd, reinterpret_cast<HWND>(wp),
- reinterpret_cast<COPYDATASTRUCT*>(lp));
- default:
- break;
- }
-
- return me->original_wndproc_(hwnd, msg, wp, lp);
-}
-
-// static
-LRESULT ProcessSingletonSubclass::OnCopyData(HWND hwnd, HWND from_hwnd,
- const COPYDATASTRUCT* cds) {
- // We should have enough room for the shortest command (min_message_size)
- // and also be a multiple of wchar_t bytes. The shortest command
- // possible is L"START\0\0" (empty current directory and command line).
- static const int kMinMessageSize = sizeof(L"START\0");
- EXPECT_TRUE(kMinMessageSize <= cds->cbData);
-
- if (kMinMessageSize > cds->cbData)
- return TRUE;
-
- // We split the string into 4 parts on NULLs.
- const wchar_t* begin = reinterpret_cast<const wchar_t*>(cds->lpData);
- const wchar_t* end = begin + (cds->cbData / sizeof(wchar_t));
- const wchar_t kNull = L'\0';
- const wchar_t* eos = wmemchr(begin, kNull, end - begin);
- EXPECT_NE(eos, end);
- if (lstrcmpW(begin, L"START") == 0) {
- begin = eos + 1;
- EXPECT_TRUE(begin <= end);
- eos = wmemchr(begin, kNull, end - begin);
- EXPECT_NE(eos, end);
-
- // Get current directory.
- const wchar_t* cur_dir = begin;
- begin = eos + 1;
- EXPECT_TRUE(begin <= end);
- eos = wmemchr(begin, kNull, end - begin);
- // eos might be equal to end at this point.
-
- // Get command line.
- std::wstring cmd_line(begin, static_cast<size_t>(end - begin));
-
- CommandLine parsed_command_line = CommandLine::FromString(cmd_line);
- std::string channel_id = parsed_command_line.GetSwitchValueASCII(
- switches::kAutomationClientChannelID);
- EXPECT_FALSE(channel_id.empty());
-
- delegate_->OnConnectAutomationProviderToChannel(channel_id);
- }
- return TRUE;
-}
diff --git a/chrome_frame/test/net/process_singleton_subclass.h b/chrome_frame/test/net/process_singleton_subclass.h
deleted file mode 100644
index 6846c1d..0000000
--- a/chrome_frame/test/net/process_singleton_subclass.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2010 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 CHROME_FRAME_TEST_NET_PROCESS_SINGLETON_SUBCLASS_H_
-#define CHROME_FRAME_TEST_NET_PROCESS_SINGLETON_SUBCLASS_H_
-
-#include <windows.h>
-
-#include <string>
-
-class FilePath;
-struct FunctionStub;
-
-class ProcessSingletonSubclassDelegate {
- public:
- virtual void OnConnectAutomationProviderToChannel(
- const std::string& channel_id) = 0;
-};
-
-class ProcessSingletonSubclass {
- public:
- explicit ProcessSingletonSubclass(ProcessSingletonSubclassDelegate* delegate);
- ~ProcessSingletonSubclass();
-
- bool Subclass(const FilePath& user_data_dir);
-
- protected:
- static LRESULT CALLBACK SubclassWndProc(ProcessSingletonSubclass* me,
- HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
- LRESULT OnCopyData(HWND hwnd, HWND from_hwnd, const COPYDATASTRUCT* cds);
- protected:
- FunctionStub* stub_;
- ProcessSingletonSubclassDelegate* delegate_;
- WNDPROC original_wndproc_;
-};
-
-#endif // CHROME_FRAME_TEST_NET_PROCESS_SINGLETON_SUBCLASS_H_