summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/automation/automation_messages_internal.h5
-rw-r--r--chrome/test/automation/window_proxy.cc13
-rw-r--r--chrome/test/automation/window_proxy.h4
-rw-r--r--chrome/test/chrome_process_util.cc43
-rw-r--r--chrome/test/chrome_process_util_linux.cc50
-rw-r--r--chrome/test/chrome_process_util_mac.cc12
-rw-r--r--chrome/test/chrome_process_util_win.cc37
-rw-r--r--chrome/test/ui/ui_test.cc24
8 files changed, 136 insertions, 52 deletions
diff --git a/chrome/test/automation/automation_messages_internal.h b/chrome/test/automation/automation_messages_internal.h
index f6ed6d5..c2d627d 100644
--- a/chrome/test/automation/automation_messages_internal.h
+++ b/chrome/test/automation/automation_messages_internal.h
@@ -881,4 +881,9 @@ IPC_BEGIN_MESSAGES(Automation)
IPC::Reposition_Params /* SetWindowPos params */)
#endif // defined(OS_WIN)
+ // Gets the title of the top level browser window.
+ IPC_SYNC_MESSAGE_ROUTED1_1(AutomationMsg_WindowTitle,
+ int /* automation handle */,
+ string16 /* title text */ )
+
IPC_END_MESSAGES(Automation)
diff --git a/chrome/test/automation/window_proxy.cc b/chrome/test/automation/window_proxy.cc
index 030fea2..7288595 100644
--- a/chrome/test/automation/window_proxy.cc
+++ b/chrome/test/automation/window_proxy.cc
@@ -16,6 +16,7 @@
#include "chrome/test/automation/tab_proxy.h"
#include "googleurl/src/gurl.h"
+#if defined(OS_WIN)
bool WindowProxy::GetHWND(HWND* handle) const {
if (!is_valid()) return false;
@@ -33,6 +34,18 @@ bool WindowProxy::SimulateOSClick(const POINT& click, int flags) {
return sender_->Send(
new AutomationMsg_WindowClick(0, handle_, click, flags));
}
+#endif // defined(OS_WIN)
+
+bool WindowProxy::GetWindowTitle(string16* text) {
+ if (!is_valid()) return false;
+
+ if (!text) {
+ NOTREACHED();
+ return false;
+ }
+
+ return sender_->Send(new AutomationMsg_WindowTitle(0, handle_, text));
+}
bool WindowProxy::SimulateOSKeyPress(wchar_t key, int flags) {
if (!is_valid()) return false;
diff --git a/chrome/test/automation/window_proxy.h b/chrome/test/automation/window_proxy.h
index 8bade17..2935480 100644
--- a/chrome/test/automation/window_proxy.h
+++ b/chrome/test/automation/window_proxy.h
@@ -13,6 +13,7 @@
#include <string>
+#include "base/string16.h"
#include "base/thread.h"
#include "chrome/test/automation/automation_handle_tracker.h"
@@ -50,6 +51,9 @@ class WindowProxy : public AutomationResourceProxy {
bool SimulateOSClick(const POINT& click, int flags);
#endif // defined(OS_WIN)
+ // Get the title of the top level window.
+ bool GetWindowTitle(string16* text);
+
// Simulates a key press at the OS level. |key| is the key pressed and
// |flags| specifies which modifiers keys are also pressed (as defined in
// chrome/views/event.h). Note that this actually sends the event to the
diff --git a/chrome/test/chrome_process_util.cc b/chrome/test/chrome_process_util.cc
index 128ec33..461194f 100644
--- a/chrome/test/chrome_process_util.cc
+++ b/chrome/test/chrome_process_util.cc
@@ -8,11 +8,32 @@
#include "base/process_util.h"
#include "base/time.h"
+#include "chrome/common/chrome_constants.h"
#include "chrome/common/result_codes.h"
using base::Time;
using base::TimeDelta;
+namespace {
+
+class ChromeProcessFilter : public base::ProcessFilter {
+ public:
+ explicit ChromeProcessFilter(base::ProcessId browser_pid)
+ : browser_pid_(browser_pid) {}
+
+ virtual bool Includes(base::ProcessId pid, base::ProcessId parent_pid) const {
+ // Match browser process itself and its children.
+ return browser_pid_ == pid || browser_pid_ == parent_pid;
+ }
+
+ private:
+ base::ProcessId browser_pid_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeProcessFilter);
+};
+
+} // namespace
+
void TerminateAllChromeProcesses(const FilePath& data_dir) {
// Total time the function will wait for chrome processes
// to terminate after it told them to do so.
@@ -48,3 +69,25 @@ void TerminateAllChromeProcesses(const FilePath& data_dir) {
for (it = handles.begin(); it != handles.end(); ++it)
base::CloseProcessHandle(*it);
}
+
+ChromeProcessList GetRunningChromeProcesses(const FilePath& data_dir) {
+ ChromeProcessList result;
+
+ base::ProcessId browser_pid = ChromeBrowserProcessId(data_dir);
+ if (browser_pid < 0)
+ return result;
+
+ ChromeProcessFilter filter(browser_pid);
+ base::NamedProcessIterator it(chrome::kBrowserProcessExecutableName, &filter);
+
+ const ProcessEntry* process_entry;
+ while ((process_entry = it.NextProcessEntry())) {
+#if defined(OS_WIN)
+ result.push_back(process_entry->th32ProcessID);
+#elif defined(OS_POSIX)
+ result.push_back(process_entry->pid);
+#endif
+ }
+
+ return result;
+}
diff --git a/chrome/test/chrome_process_util_linux.cc b/chrome/test/chrome_process_util_linux.cc
new file mode 100644
index 0000000..f5c1df1
--- /dev/null
+++ b/chrome/test/chrome_process_util_linux.cc
@@ -0,0 +1,50 @@
+// 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 "chrome/test/chrome_process_util.h"
+
+#include <stdio.h>
+
+#include <string>
+#include <vector>
+
+#include "base/logging.h"
+#include "base/string_util.h"
+
+base::ProcessId ChromeBrowserProcessId(const FilePath& data_dir) {
+ char fuser_output[256];
+
+ FilePath socket_name = data_dir.Append("SingletonSocket");
+ // TODO(phajdan.jr): Do better quoting around the socket name.
+ std::string cmd = "fuser \"" + socket_name.value() + "\"";
+ FILE* fuser_pipe = popen(cmd.c_str(), "r");
+ if (!fuser_pipe) {
+ DLOG(ERROR) << "Error launching fuser.";
+ return -1;
+ }
+
+ char* rv = fgets(fuser_output, 256, fuser_pipe);
+ pclose(fuser_pipe);
+
+ if (!rv)
+ return -1;
+
+ std::string trimmed_output;
+ TrimWhitespace(fuser_output, TRIM_ALL, &trimmed_output);
+
+ for (size_t i = 0; i < trimmed_output.size(); ++i) {
+ if (trimmed_output[i] == ' '){
+ DLOG(ERROR) << "Expected exactly 1 process to have socket open: " <<
+ fuser_output;
+ return -1;
+ }
+ }
+
+ int pid;
+ if (!StringToInt(trimmed_output, &pid)) {
+ DLOG(ERROR) << "Unexpected fuser output: " << fuser_output;
+ return -1;
+ }
+ return pid;
+}
diff --git a/chrome/test/chrome_process_util_mac.cc b/chrome/test/chrome_process_util_mac.cc
new file mode 100644
index 0000000..4d252ba
--- /dev/null
+++ b/chrome/test/chrome_process_util_mac.cc
@@ -0,0 +1,12 @@
+// 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 "chrome/test/chrome_process_util.h"
+
+#include "base/logging.h"
+
+base::ProcessId ChromeBrowserProcessId(const FilePath& data_dir) {
+ NOTIMPLEMENTED();
+ return -1;
+}
diff --git a/chrome/test/chrome_process_util_win.cc b/chrome/test/chrome_process_util_win.cc
index b0e2e40..97fbc19 100644
--- a/chrome/test/chrome_process_util_win.cc
+++ b/chrome/test/chrome_process_util_win.cc
@@ -12,26 +12,6 @@
#include "base/process_util.h"
#include "chrome/common/chrome_constants.h"
-namespace {
-
-class ChromeProcessFilter : public base::ProcessFilter {
- public:
- explicit ChromeProcessFilter(base::ProcessId browser_pid)
- : browser_pid_(browser_pid) {}
-
- virtual bool Includes(base::ProcessId pid, base::ProcessId parent_pid) const {
- // Match browser process itself and its children.
- return browser_pid_ == pid || browser_pid_ == parent_pid;
- }
-
- private:
- base::ProcessId browser_pid_;
-
- DISALLOW_COPY_AND_ASSIGN(ChromeProcessFilter);
-};
-
-} // namespace
-
base::ProcessId ChromeBrowserProcessId(const FilePath& data_dir) {
HWND message_window = FindWindowEx(HWND_MESSAGE, NULL,
chrome::kMessageWindowClass,
@@ -44,20 +24,3 @@ base::ProcessId ChromeBrowserProcessId(const FilePath& data_dir) {
return browser_pid;
}
-
-ChromeProcessList GetRunningChromeProcesses(const FilePath& data_dir) {
- ChromeProcessList result;
-
- base::ProcessId browser_pid = ChromeBrowserProcessId(data_dir);
- if (browser_pid < 0)
- return result;
-
- ChromeProcessFilter filter(browser_pid);
- base::NamedProcessIterator it(chrome::kBrowserProcessExecutableName, &filter);
-
- const ProcessEntry* process_entry;
- while (process_entry = it.NextProcessEntry())
- result.push_back(process_entry->th32ProcessID);
-
- return result;
-}
diff --git a/chrome/test/ui/ui_test.cc b/chrome/test/ui/ui_test.cc
index d30643b2..f0f29aa 100644
--- a/chrome/test/ui/ui_test.cc
+++ b/chrome/test/ui/ui_test.cc
@@ -253,12 +253,7 @@ void UITest::LaunchBrowser(const CommandLine& arguments, bool clear_profile) {
std::wstring extra_chrome_flags =
CommandLine::ForCurrentProcess()->GetSwitchValue(kExtraChromeFlagsSwitch);
if (!extra_chrome_flags.empty()) {
-#if defined(OS_WIN)
command_line.AppendLooseValue(extra_chrome_flags);
-#else
- // TODO(port): figure out how to pass through extra flags via a string.
- NOTIMPLEMENTED();
-#endif
}
// We need cookies on file:// for things like the page cycler.
@@ -446,7 +441,7 @@ void UITest::QuitBrowser() {
}
void UITest::AssertAppNotRunning(const std::wstring& error_message) {
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_LINUX)
ASSERT_EQ(0, GetBrowserProcessCount()) << error_message;
#else
// TODO(port): Enable when chrome_process_util is ported.
@@ -455,7 +450,7 @@ void UITest::AssertAppNotRunning(const std::wstring& error_message) {
}
void UITest::CleanupAppProcesses() {
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_LINUX)
TerminateAllChromeProcesses(FilePath::FromWStringHack(user_data_dir()));
// Suppress spammy failures that seem to be occurring when running
@@ -503,10 +498,6 @@ void UITest::NavigateToURL(const GURL& url) {
ASSERT_FALSE(is_timeout) << url.spec();
}
-// TODO(port): this #if effectively cuts out half of this file on
-// non-Windows platforms, and is a temporary hack to get things
-// building.
-#if defined(OS_WIN)
bool UITest::WaitForDownloadShelfVisible(TabProxy* tab) {
const int kCycles = 20;
for (int i = 0; i < kCycles; i++) {
@@ -522,6 +513,10 @@ bool UITest::WaitForDownloadShelfVisible(TabProxy* tab) {
return false;
}
+// TODO(port): this #if effectively cuts out half of this file on
+// non-Windows platforms, and is a temporary hack to get things
+// building.
+#if defined(OS_WIN)
bool UITest::WaitForFindWindowVisibilityChange(BrowserProxy* browser,
bool wait_for_open) {
const int kCycles = 20;
@@ -585,16 +580,15 @@ bool UITest::CrashAwareSleep(int time_out_ms) {
return base::CrashAwareSleep(process_, time_out_ms);
}
-#if defined(OS_WIN)
-// TODO(port): Port GetRunningChromeProcesses and sort out one w/string issue.
-
-/*static*/
+// static
int UITest::GetBrowserProcessCount() {
FilePath data_dir;
PathService::Get(chrome::DIR_USER_DATA, &data_dir);
return GetRunningChromeProcesses(data_dir).size();
}
+#if defined(OS_WIN)
+// TODO(port): Port GetRunningChromeProcesses and sort out one w/string issue.
static DictionaryValue* LoadDictionaryValueFromPath(const FilePath& path) {
if (path.empty())
return NULL;