summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/automation/automation_provider.cc63
-rw-r--r--chrome/browser/automation/automation_provider.h24
-rw-r--r--chrome/browser/automation/automation_provider_observers.cc2
-rw-r--r--chrome/browser/ui/browser_init.cc23
-rw-r--r--chrome/browser/ui/browser_init.h2
-rw-r--r--chrome/chrome_tests.gypi9
-rw-r--r--chrome/common/automation_constants.cc9
-rw-r--r--chrome/common/automation_constants.h10
-rw-r--r--chrome/test/automation/automation_proxy.cc14
-rw-r--r--chrome/test/automation/automation_proxy.h18
-rw-r--r--chrome/test/automation/automation_proxy_uitest.cc20
-rw-r--r--chrome/test/automation/automation_proxy_uitest.h14
-rw-r--r--chrome/test/automation/proxy_launcher.cc75
-rw-r--r--chrome/test/automation/proxy_launcher.h78
-rw-r--r--chrome/test/ui/named_interface_uitest.cc42
-rw-r--r--chrome/test/ui/ui_test.cc60
-rw-r--r--chrome/test/ui/ui_test.h27
-rw-r--r--chrome_frame/chrome_frame.gyp9
-rw-r--r--chrome_frame/chrome_frame_automation.cc11
-rw-r--r--chrome_frame/chrome_frame_automation.h1
-rw-r--r--chrome_frame/test/automation_client_mock.cc4
-rw-r--r--chrome_frame/test/net/test_automation_provider.cc2
-rw-r--r--ipc/ipc_channel.h4
-rw-r--r--ipc/ipc_channel_posix.cc16
24 files changed, 94 insertions, 443 deletions
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index 65dc5a3..ec48e7a 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -113,9 +113,7 @@ using base::Time;
AutomationProvider::AutomationProvider(Profile* profile)
: profile_(profile),
- reply_message_(NULL),
- is_connected_(false),
- initial_loads_complete_(false) {
+ reply_message_(NULL) {
TRACE_EVENT_BEGIN("AutomationProvider::AutomationProvider", 0, "");
browser_tracker_.reset(new AutomationBrowserTracker(this));
@@ -151,38 +149,23 @@ AutomationProvider::~AutomationProvider() {
g_browser_process->ReleaseModule();
}
-bool AutomationProvider::InitializeChannel(const std::string& channel_id) {
- TRACE_EVENT_BEGIN("AutomationProvider::InitializeChannel", 0, "");
-
- std::string effective_channel_id = channel_id;
-
- // If the channel_id starts with kNamedInterfacePrefix, create a named IPC
- // server and listen on it, else connect as client to an existing IPC server
- bool use_named_interface =
- channel_id.find(automation::kNamedInterfacePrefix) == 0;
- if (use_named_interface) {
- effective_channel_id = channel_id.substr(
- strlen(automation::kNamedInterfacePrefix));
- if (effective_channel_id.length() <= 0)
- return false;
- }
+void AutomationProvider::ConnectToChannel(const std::string& channel_id) {
+ TRACE_EVENT_BEGIN("AutomationProvider::ConnectToChannel", 0, "");
if (!automation_resource_message_filter_.get()) {
automation_resource_message_filter_ = new AutomationResourceMessageFilter;
}
- channel_.reset(new IPC::SyncChannel(
- effective_channel_id,
- use_named_interface ? IPC::Channel::MODE_NAMED_SERVER
- : IPC::Channel::MODE_CLIENT,
- this,
- automation_resource_message_filter_,
- g_browser_process->io_thread()->message_loop(),
- true, g_browser_process->shutdown_event()));
+ channel_.reset(
+ new IPC::SyncChannel(channel_id, IPC::Channel::MODE_CLIENT, this,
+ automation_resource_message_filter_,
+ g_browser_process->io_thread()->message_loop(),
+ true, g_browser_process->shutdown_event()));
- TRACE_EVENT_END("AutomationProvider::InitializeChannel", 0, "");
+ // Send a hello message with our current automation protocol version.
+ channel_->Send(new AutomationMsg_Hello(0, GetProtocolVersion().c_str()));
- return true;
+ TRACE_EVENT_END("AutomationProvider::ConnectToChannel", 0, "");
}
std::string AutomationProvider::GetProtocolVersion() {
@@ -191,16 +174,11 @@ std::string AutomationProvider::GetProtocolVersion() {
}
void AutomationProvider::SetExpectedTabCount(size_t expected_tabs) {
- if (expected_tabs == 0)
- OnInitialLoadsComplete();
- else
- initial_load_observer_.reset(new InitialLoadObserver(expected_tabs, this));
-}
-
-void AutomationProvider::OnInitialLoadsComplete() {
- initial_loads_complete_ = true;
- if (is_connected_)
+ if (expected_tabs == 0) {
Send(new AutomationMsg_InitialLoadsComplete(0));
+ } else {
+ initial_load_observer_.reset(new InitialLoadObserver(expected_tabs, this));
+ }
}
NotificationObserver* AutomationProvider::AddNavigationStatusListener(
@@ -349,17 +327,6 @@ const Extension* AutomationProvider::GetDisabledExtension(
return NULL;
}
-void AutomationProvider::OnChannelConnected(int pid) {
- is_connected_ = true;
- LOG(INFO) << "Testing channel connected, sending hello message";
-
- // Send a hello message with our current automation protocol version.
- chrome::VersionInfo version_info;
- channel_->Send(new AutomationMsg_Hello(0, version_info.Version()));
- if (initial_loads_complete_)
- Send(new AutomationMsg_InitialLoadsComplete(0));
-}
-
void AutomationProvider::OnMessageReceived(const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(AutomationProvider, message)
#if !defined(OS_MACOSX)
diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h
index c30fb97..0da77a1 100644
--- a/chrome/browser/automation/automation_provider.h
+++ b/chrome/browser/automation/automation_provider.h
@@ -17,7 +17,6 @@
#include <vector>
#include "base/basictypes.h"
-#include "base/compiler_specific.h"
#include "base/observer_list.h"
#include "base/scoped_ptr.h"
#include "base/string16.h"
@@ -83,23 +82,15 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>,
Profile* profile() const { return profile_; }
- // Initializes a channel for a connection to an AutomationProxy.
- // If channel_id starts with kNamedInterfacePrefix, it will act
- // as a server, create a named IPC socket with channel_id as its
- // path, and will listen on the socket for incoming connections.
- // If channel_id does not, it will act as a client and establish
- // a connection on its primary IPC channel. See ipc/ipc_channel_posix.cc
- // for more information about kPrimaryIPCChannel.
- bool InitializeChannel(const std::string& channel_id) WARN_UNUSED_RESULT;
+ // Establishes a connection to an automation client, if present.
+ // An AutomationProxy should be established (probably in a different process)
+ // before calling this.
+ void ConnectToChannel(const std::string& channel_id);
// Sets the number of tabs that we expect; when this number of tabs has
// loaded, an AutomationMsg_InitialLoadsComplete message is sent.
void SetExpectedTabCount(size_t expected_tabs);
- // Called when the inital set of tabs has finished loading.
- // Call SetExpectedTabCount(0) to set this to true immediately.
- void OnInitialLoadsComplete();
-
// Add a listener for navigation status notification. Currently only
// navigation completion is observed; when the |number_of_navigations|
// complete, the completed_response object is sent; if the server requires
@@ -147,7 +138,6 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>,
// IPC implementations
virtual bool Send(IPC::Message* msg);
- virtual void OnChannelConnected(int pid);
virtual void OnMessageReceived(const IPC::Message& msg);
virtual void OnChannelError();
@@ -416,12 +406,6 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>,
scoped_ptr<AutomationExtensionTracker> extension_tracker_;
PortContainerMap port_containers_;
- // True iff connected to an AutomationProxy.
- bool is_connected_;
-
- // True iff browser finished loading initial set of tabs.
- bool initial_loads_complete_;
-
DISALLOW_COPY_AND_ASSIGN(AutomationProvider);
};
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
index 779b6eb..0bdb00d 100644
--- a/chrome/browser/automation/automation_provider_observers.cc
+++ b/chrome/browser/automation/automation_provider_observers.cc
@@ -140,7 +140,7 @@ DictionaryValue* InitialLoadObserver::GetTimingInformation() const {
void InitialLoadObserver::ConditionMet() {
registrar_.RemoveAll();
- automation_->OnInitialLoadsComplete();
+ automation_->Send(new AutomationMsg_InitialLoadsComplete(0));
}
NewTabUILoadObserver::NewTabUILoadObserver(AutomationProvider* automation)
diff --git a/chrome/browser/ui/browser_init.cc b/chrome/browser/ui/browser_init.cc
index 444de73..c231d46 100644
--- a/chrome/browser/ui/browser_init.cc
+++ b/chrome/browser/ui/browser_init.cc
@@ -967,11 +967,10 @@ bool BrowserInit::ProcessCmdLineImpl(const CommandLine& command_line,
expected_tab_count =
std::max(1, static_cast<int>(command_line.args().size()));
}
- if (!CreateAutomationProvider<TestingAutomationProvider>(
+ CreateAutomationProvider<TestingAutomationProvider>(
testing_channel_id,
profile,
- static_cast<size_t>(expected_tab_count)))
- return false;
+ static_cast<size_t>(expected_tab_count));
}
}
@@ -988,13 +987,11 @@ bool BrowserInit::ProcessCmdLineImpl(const CommandLine& command_line,
silent_launch = true;
if (command_line.HasSwitch(switches::kChromeFrame)) {
- if (!CreateAutomationProvider<ChromeFrameAutomationProvider>(
- automation_channel_id, profile, expected_tabs))
- return false;
+ CreateAutomationProvider<ChromeFrameAutomationProvider>(
+ automation_channel_id, profile, expected_tabs);
} else {
- if (!CreateAutomationProvider<AutomationProvider>(
- automation_channel_id, profile, expected_tabs))
- return false;
+ CreateAutomationProvider<AutomationProvider>(automation_channel_id,
+ profile, expected_tabs);
}
}
@@ -1029,20 +1026,16 @@ bool BrowserInit::ProcessCmdLineImpl(const CommandLine& command_line,
}
template <class AutomationProviderClass>
-bool BrowserInit::CreateAutomationProvider(const std::string& channel_id,
+void BrowserInit::CreateAutomationProvider(const std::string& channel_id,
Profile* profile,
size_t expected_tabs) {
scoped_refptr<AutomationProviderClass> automation =
new AutomationProviderClass(profile);
-
- if (!automation->InitializeChannel(channel_id))
- return false;
+ automation->ConnectToChannel(channel_id);
automation->SetExpectedTabCount(expected_tabs);
AutomationProviderList* list =
g_browser_process->InitAutomationProviderList();
DCHECK(list);
list->AddProvider(automation);
-
- return true;
}
diff --git a/chrome/browser/ui/browser_init.h b/chrome/browser/ui/browser_init.h
index 746320c..07e99e9 100644
--- a/chrome/browser/ui/browser_init.h
+++ b/chrome/browser/ui/browser_init.h
@@ -53,7 +53,7 @@ class BrowserInit {
}
template <class AutomationProviderClass>
- static bool CreateAutomationProvider(const std::string& channel_id,
+ static void CreateAutomationProvider(const std::string& channel_id,
Profile* profile,
size_t expected_tabs);
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index abb7b99..9a1dd4c 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -167,8 +167,6 @@
'sources': [
'test/automated_ui_tests/automated_ui_test_base.cc',
'test/automated_ui_tests/automated_ui_test_base.h',
- 'test/automation/proxy_launcher.cc',
- 'test/automation/proxy_launcher.h',
'test/testing_browser_process.h',
'test/ui/javascript_test_util.cc',
'test/ui/npapi_test_helper.cc',
@@ -514,7 +512,6 @@
'test/ui/dromaeo_benchmark_uitest.cc',
'test/ui/history_uitest.cc',
'test/ui/layout_plugin_uitest.cc',
- 'test/ui/named_interface_uitest.cc',
'test/ui/npapi_uitest.cc',
'test/ui/omnibox_uitest.cc',
'test/ui/pepper_uitest.cc',
@@ -600,10 +597,6 @@
},
},
},
- 'sources!': [
- # TODO(dtu): port to windows http://crosbug.com/8515
- 'test/ui/named_interface_uitest.cc',
- ],
}, { # else: OS != "win"
'sources!': [
# TODO(port): http://crbug.com/45770
@@ -3109,8 +3102,6 @@
'-Wno-uninitialized',
],
'sources': [
- 'test/automation/proxy_launcher.cc',
- 'test/automation/proxy_launcher.h',
'test/pyautolib/pyautolib.cc',
'test/pyautolib/pyautolib.h',
'test/ui/ui_test.cc',
diff --git a/chrome/common/automation_constants.cc b/chrome/common/automation_constants.cc
index 9480254..c253871 100644
--- a/chrome/common/automation_constants.cc
+++ b/chrome/common/automation_constants.cc
@@ -5,7 +5,6 @@
#include "chrome/common/automation_constants.h"
namespace automation {
-
// JSON value labels for proxy settings that are passed in via
// AutomationMsg_SetProxyConfig.
const char kJSONProxyAutoconfig[] = "proxy.autoconfig";
@@ -13,10 +12,4 @@ const char kJSONProxyNoProxy[] = "proxy.no_proxy";
const char kJSONProxyPacUrl[] = "proxy.pac_url";
const char kJSONProxyBypassList[] = "proxy.bypass_list";
const char kJSONProxyServer[] = "proxy.server";
-
-// Named testing interface is used when you want to connect an
-// AutomationProxy to an already-running browser instance.
-const char kNamedInterfacePrefix[] = "NamedTestingInterface:";
-
-} // namespace automation
-
+}
diff --git a/chrome/common/automation_constants.h b/chrome/common/automation_constants.h
index 6579776..13b120e 100644
--- a/chrome/common/automation_constants.h
+++ b/chrome/common/automation_constants.h
@@ -7,7 +7,6 @@
#pragma once
namespace automation {
-
// JSON value labels for proxy settings that are passed in via
// AutomationMsg_SetProxyConfig. These are here since they are used by both
// AutomationProvider and AutomationProxy.
@@ -17,16 +16,9 @@ extern const char kJSONProxyPacUrl[];
extern const char kJSONProxyBypassList[];
extern const char kJSONProxyServer[];
-// When passing the kTestingChannelID switch to the browser, prepend
-// this prefix to the channel id to enable the named testing interface.
-// Named testing interface is used when you want to connect an
-// AutomationProxy to an already-running browser instance.
-extern const char kNamedInterfacePrefix[];
-
// Amount of time to wait before querying the browser.
static const int kSleepTime = 250;
-
-} // namespace automation
+}
// Used by AutomationProxy, declared here so that other headers don't need
// to include automation_proxy.h.
diff --git a/chrome/test/automation/automation_proxy.cc b/chrome/test/automation/automation_proxy.cc
index a33f095..fbdde25 100644
--- a/chrome/test/automation/automation_proxy.cc
+++ b/chrome/test/automation/automation_proxy.cc
@@ -107,8 +107,10 @@ AutomationProxy::AutomationProxy(int command_execution_timeout_ms,
// least it is legal... ;-)
DCHECK_GE(command_execution_timeout_ms, 0);
listener_thread_id_ = PlatformThread::CurrentId();
+ InitializeChannelID();
InitializeHandleTracker();
InitializeThread();
+ InitializeChannel();
}
AutomationProxy::~AutomationProxy() {
@@ -120,7 +122,7 @@ AutomationProxy::~AutomationProxy() {
tracker_.reset();
}
-std::string AutomationProxy::GenerateChannelID() {
+void AutomationProxy::InitializeChannelID() {
// The channel counter keeps us out of trouble if we create and destroy
// several AutomationProxies sequentially over the course of a test run.
// (Creating the channel sometimes failed before when running a lot of
@@ -131,7 +133,7 @@ std::string AutomationProxy::GenerateChannelID() {
std::ostringstream buf;
buf << "ChromeTestingInterface:" << base::GetCurrentProcId() <<
"." << ++channel_counter;
- return buf.str();
+ channel_id_ = buf.str();
}
void AutomationProxy::InitializeThread() {
@@ -144,8 +146,7 @@ void AutomationProxy::InitializeThread() {
thread_.swap(thread);
}
-void AutomationProxy::InitializeChannel(const std::string& channel_id,
- bool use_named_interface) {
+void AutomationProxy::InitializeChannel() {
DCHECK(shutdown_event_.get() != NULL);
// TODO(iyengar)
@@ -153,9 +154,8 @@ void AutomationProxy::InitializeChannel(const std::string& channel_id,
// provider, where we use the shutdown event provided by the chrome browser
// process.
channel_.reset(new IPC::SyncChannel(
- channel_id,
- use_named_interface ? IPC::Channel::MODE_NAMED_CLIENT
- : IPC::Channel::MODE_SERVER,
+ channel_id_,
+ IPC::Channel::MODE_SERVER,
this, // we are the listener
new AutomationMessageFilter(this),
thread_->message_loop(),
diff --git a/chrome/test/automation/automation_proxy.h b/chrome/test/automation/automation_proxy.h
index 7902ef0..853a6d3 100644
--- a/chrome/test/automation/automation_proxy.h
+++ b/chrome/test/automation/automation_proxy.h
@@ -61,17 +61,6 @@ class AutomationProxy : public IPC::Channel::Listener,
AutomationProxy(int command_execution_timeout_ms, bool disconnect_on_failure);
virtual ~AutomationProxy();
- // Creates a previously unused channel id.
- static std::string GenerateChannelID();
-
- // Initializes a channel for a connection to an AutomationProvider.
- // If use_named_interface is false, it will act as a client
- // and connect to the named IPC socket with channel_id as its path.
- // If use_named_interface is true, it will act as a server and
- // use an anonymous socketpair instead.
- void InitializeChannel(const std::string& channel_id,
- bool use_named_interface);
-
// IPC callback
virtual void OnMessageReceived(const IPC::Message& msg);
virtual void OnChannelError();
@@ -219,6 +208,10 @@ class AutomationProxy : public IPC::Channel::Listener,
const std::string& password) WARN_UNUSED_RESULT;
#endif
+ // Returns the ID of the automation IPC channel, so that it can be
+ // passed to the app as a launch parameter.
+ const std::string& channel_id() const { return channel_id_; }
+
#if defined(OS_POSIX)
base::file_handle_mapping_vector fds_to_map() const;
#endif
@@ -270,9 +263,12 @@ class AutomationProxy : public IPC::Channel::Listener,
protected:
template <class T> scoped_refptr<T> ProxyObjectFromHandle(int handle);
+ void InitializeChannelID();
void InitializeThread();
+ void InitializeChannel();
void InitializeHandleTracker();
+ std::string channel_id_;
scoped_ptr<base::Thread> thread_;
scoped_ptr<IPC::SyncChannel> channel_;
scoped_ptr<AutomationHandleTracker> tracker_;
diff --git a/chrome/test/automation/automation_proxy_uitest.cc b/chrome/test/automation/automation_proxy_uitest.cc
index f94e442..db6a18e4 100644
--- a/chrome/test/automation/automation_proxy_uitest.cc
+++ b/chrome/test/automation/automation_proxy_uitest.cc
@@ -841,27 +841,11 @@ template <typename T> T** ReceivePointer(scoped_refptr<T>& p) { // NOLINT
return reinterpret_cast<T**>(&p);
}
-// Replace the default automation proxy with our mock client.
-ProxyLauncher* ExternalTabUITest::CreateProxyLauncher() {
- channel_id_ = AutomationProxy::GenerateChannelID();
- return this;
-}
-
-AutomationProxy* ExternalTabUITest::CreateAutomationProxy(
- int execution_timeout) {
- mock_ = new ExternalTabUITestMockClient(execution_timeout);
- mock_->InitializeChannel(channel_id_, false);
+AutomationProxy* ExternalTabUITest::CreateAutomationProxy(int exec_timeout) {
+ mock_ = new ExternalTabUITestMockClient(exec_timeout);
return mock_;
}
-void ExternalTabUITest::InitializeConnection(UITestBase* ui_test_base) const {
- ui_test_base->LaunchBrowserAndServer();
-}
-
-std::string ExternalTabUITest::PrefixedChannelID() const {
- return channel_id_;
-}
-
// Create with specifying a url
// Flaky, http://crbug.com/32293
TEST_F(ExternalTabUITest, FLAKY_CreateExternalTab1) {
diff --git a/chrome/test/automation/automation_proxy_uitest.h b/chrome/test/automation/automation_proxy_uitest.h
index 073cd5b..55da8cc 100644
--- a/chrome/test/automation/automation_proxy_uitest.h
+++ b/chrome/test/automation/automation_proxy_uitest.h
@@ -12,7 +12,6 @@
#include "base/platform_thread.h"
#include "base/time.h"
#include "chrome/test/automation/automation_proxy.h"
-#include "chrome/test/automation/proxy_launcher.h"
#include "chrome/test/ui/ui_test.h"
#include "gfx/native_widget_types.h"
#include "googleurl/src/gurl.h"
@@ -110,26 +109,19 @@ class ExternalTabUITestMockClient : public AutomationProxy {
};
// Base your external tab UI tests on this.
-class ExternalTabUITest : public UITest, public ProxyLauncher {
+class ExternalTabUITest : public UITest {
public:
ExternalTabUITest() : UITest(MessageLoop::TYPE_UI) {}
-
- // Override UITest's CreateProxyLauncher to provide the unit test
+ // Override UITest's CreateAutomationProxy to provide the unit test
// with our special implementation of AutomationProxy.
- // This function is called from within UITest::SetUp().
- virtual ProxyLauncher* CreateProxyLauncher();
-
- // ProxyLauncher functions
+ // This function is called from within UITest::LaunchBrowserAndServer.
virtual AutomationProxy* CreateAutomationProxy(int execution_timeout);
- virtual void InitializeConnection(UITestBase* ui_test_base) const;
- virtual std::string PrefixedChannelID() const;
protected:
// Filtered Inet will override automation callbacks for network resources.
virtual bool ShouldFilterInet() {
return false;
}
ExternalTabUITestMockClient* mock_;
- std::string channel_id_; // Channel id of automation proxy.
};
#endif // CHROME_TEST_AUTOMATION_AUTOMATION_PROXY_UITEST_H_
diff --git a/chrome/test/automation/proxy_launcher.cc b/chrome/test/automation/proxy_launcher.cc
deleted file mode 100644
index 2325958..0000000
--- a/chrome/test/automation/proxy_launcher.cc
+++ /dev/null
@@ -1,75 +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/test/automation/proxy_launcher.h"
-
-#include "chrome/common/automation_constants.h"
-#include "chrome/common/logging_chrome.h"
-#include "chrome/test/automation/automation_proxy.h"
-#include "chrome/test/ui/ui_test.h"
-
-// Default path of named testing interface.
-static const char kInterfacePath[] = "/var/tmp/ChromeTestingInterface";
-
-// NamedProxyLauncher functions
-
-NamedProxyLauncher::NamedProxyLauncher(bool launch_browser,
- bool disconnect_on_failure)
- : launch_browser_(launch_browser),
- disconnect_on_failure_(disconnect_on_failure) {
- channel_id_ = kInterfacePath;
-}
-
-AutomationProxy* NamedProxyLauncher::CreateAutomationProxy(
- int execution_timeout) {
- AutomationProxy* proxy = new AutomationProxy(execution_timeout,
- disconnect_on_failure_);
- proxy->InitializeChannel(channel_id_, true);
- return proxy;
-}
-
-void NamedProxyLauncher::InitializeConnection(UITestBase* ui_test_base) const {
- if (launch_browser_) {
- // Set up IPC testing interface as a client.
- ui_test_base->LaunchBrowser();
-
- // Wait for browser to be ready for connections.
- struct stat file_info;
- while (stat(kInterfacePath, &file_info))
- PlatformThread::Sleep(automation::kSleepTime);
- }
-
- ui_test_base->ConnectToRunningBrowser();
-}
-
-std::string NamedProxyLauncher::PrefixedChannelID() const {
- std::string channel_id;
- channel_id.append(automation::kNamedInterfacePrefix).append(channel_id_);
- return channel_id;
-}
-
-// AnonymousProxyLauncher functions
-
-AnonymousProxyLauncher::AnonymousProxyLauncher(bool disconnect_on_failure)
- : disconnect_on_failure_(disconnect_on_failure) {
- channel_id_ = AutomationProxy::GenerateChannelID();
-}
-
-AutomationProxy* AnonymousProxyLauncher::CreateAutomationProxy(
- int execution_timeout) {
- AutomationProxy* proxy = new AutomationProxy(execution_timeout,
- disconnect_on_failure_);
- proxy->InitializeChannel(channel_id_, false);
- return proxy;
-}
-
-void AnonymousProxyLauncher::InitializeConnection(
- UITestBase* ui_test_base) const {
- ui_test_base->LaunchBrowserAndServer();
-}
-
-std::string AnonymousProxyLauncher::PrefixedChannelID() const {
- return channel_id_;
-}
-
diff --git a/chrome/test/automation/proxy_launcher.h b/chrome/test/automation/proxy_launcher.h
deleted file mode 100644
index 0f4d04d..0000000
--- a/chrome/test/automation/proxy_launcher.h
+++ /dev/null
@@ -1,78 +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_TEST_AUTOMATION_PROXY_LAUNCHER_H_
-#define CHROME_TEST_AUTOMATION_PROXY_LAUNCHER_H_
-
-#include <string>
-
-#include "base/basictypes.h"
-
-class AutomationProxy;
-class UITestBase;
-
-// Subclass from this class to use a different implementation of AutomationProxy
-// or to use different channel IDs inside a class that derives from UITest.
-class ProxyLauncher {
- public:
- ProxyLauncher() {}
- virtual ~ProxyLauncher() {}
-
- // Creates an automation proxy.
- virtual AutomationProxy* CreateAutomationProxy(
- int execution_timeout) = 0;
-
- // Launches the browser if needed and establishes a connection
- // connection with it using the specified UITestBase.
- virtual void InitializeConnection(UITestBase* ui_test_base) const = 0;
-
- // Returns the automation proxy's channel with any prefixes prepended,
- // for passing as a command line parameter over to the browser.
- virtual std::string PrefixedChannelID() const = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ProxyLauncher);
-};
-
-// Uses an automation proxy that communicates over a named socket.
-// This is used if you want to connect an AutomationProxy
-// to a browser process that is already running.
-// The channel id of the proxy is a constant specified by kInterfacePath.
-class NamedProxyLauncher : public ProxyLauncher {
- public:
- // If launch_browser is true, launches Chrome with named interface enabled.
- // Otherwise, there should be an existing instance the proxy can connect to.
- NamedProxyLauncher(bool launch_browser, bool disconnect_on_failure);
-
- virtual AutomationProxy* CreateAutomationProxy(int execution_timeout);
- virtual void InitializeConnection(UITestBase* ui_test_base) const;
- virtual std::string PrefixedChannelID() const;
-
- protected:
- std::string channel_id_; // Channel id of automation proxy.
- bool launch_browser_; // True if we should launch the browser too.
- bool disconnect_on_failure_; // True if we disconnect on IPC channel failure.
-
- private:
- DISALLOW_COPY_AND_ASSIGN(NamedProxyLauncher);
-};
-
-// Uses an automation proxy that communicates over an anonymous socket.
-class AnonymousProxyLauncher : public ProxyLauncher {
- public:
- explicit AnonymousProxyLauncher(bool disconnect_on_failure);
- virtual AutomationProxy* CreateAutomationProxy(int execution_timeout);
- virtual void InitializeConnection(UITestBase* ui_test_base) const;
- virtual std::string PrefixedChannelID() const;
-
- protected:
- std::string channel_id_; // Channel id of automation proxy.
- bool disconnect_on_failure_; // True if we disconnect on IPC channel failure.
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AnonymousProxyLauncher);
-};
-
-#endif // CHROME_TEST_AUTOMATION_PROXY_LAUNCHER_H_
-
diff --git a/chrome/test/ui/named_interface_uitest.cc b/chrome/test/ui/named_interface_uitest.cc
deleted file mode 100644
index ee44820..0000000
--- a/chrome/test/ui/named_interface_uitest.cc
+++ /dev/null
@@ -1,42 +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/test/ui/ui_test.h"
-
-#include "chrome/common/url_constants.h"
-#include "chrome/test/automation/proxy_launcher.h"
-
-// The named testing interface enables the use of a named socket for controlling
-// the browser. This eliminates the dependency that the browser must be forked
-// from the controlling process.
-namespace {
-
-class NamedInterfaceTest : public UITest {
- public:
- NamedInterfaceTest() {
- show_window_ = true;
- }
-
- virtual ProxyLauncher *CreateProxyLauncher() {
- return new NamedProxyLauncher(true, true);
- }
-};
-
-// Basic sanity test for named testing interface which
-// launches a browser instance that uses a named socket, then
-// sends it some commands to open some tabs over that socket.
-TEST_F(NamedInterfaceTest, BasicNamedInterface) {
- scoped_refptr<BrowserProxy> browser_proxy(
- automation()->GetBrowserWindow(0));
- ASSERT_TRUE(browser_proxy.get());
-
- for (int i = 0; i < 10; ++i)
- ASSERT_TRUE(browser_proxy->AppendTab(GURL(chrome::kAboutBlankURL)));
-}
-
-// TODO(dtu): crosbug.com/8514: Write a test that makes sure you can disconnect,
-// then reconnect with a new connection and continue automation.
-
-} // namespace
-
diff --git a/chrome/test/ui/ui_test.cc b/chrome/test/ui/ui_test.cc
index e6aff60..9fbb857 100644
--- a/chrome/test/ui/ui_test.cc
+++ b/chrome/test/ui/ui_test.cc
@@ -43,7 +43,6 @@
#include "chrome/test/automation/automation_proxy.h"
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/javascript_execution_controller.h"
-#include "chrome/test/automation/proxy_launcher.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/chrome_process_util.h"
@@ -141,9 +140,7 @@ void UITestBase::SetUp() {
JavaScriptExecutionController::set_timeout(
TestTimeouts::action_max_timeout_ms());
test_start_time_ = Time::NowFromSystemTime();
-
- launcher_.reset(CreateProxyLauncher());
- launcher_->InitializeConnection(this);
+ LaunchBrowserAndServer();
}
void UITestBase::TearDown() {
@@ -178,39 +175,24 @@ void UITestBase::TearDown() {
// TODO(phajdan.jr): get rid of set_command_execution_timeout_ms.
void UITestBase::set_command_execution_timeout_ms(int timeout) {
- automation_proxy_->set_command_execution_timeout_ms(timeout);
+ server_->set_command_execution_timeout_ms(timeout);
VLOG(1) << "Automation command execution timeout set to " << timeout << " ms";
}
-ProxyLauncher* UITestBase::CreateProxyLauncher() {
- return new AnonymousProxyLauncher(false);
-}
-
-void UITestBase::LaunchBrowser() {
- LaunchBrowser(launch_arguments_, clear_profile_);
+AutomationProxy* UITestBase::CreateAutomationProxy(int execution_timeout) {
+ return new AutomationProxy(execution_timeout, false);
}
void UITestBase::LaunchBrowserAndServer() {
- // Set up IPC testing interface as a server.
- automation_proxy_.reset(launcher_->CreateAutomationProxy(
- TestTimeouts::command_execution_timeout_ms()));
+ // Set up IPC testing interface server.
+ server_.reset(CreateAutomationProxy(
+ TestTimeouts::command_execution_timeout_ms()));
LaunchBrowser(launch_arguments_, clear_profile_);
- WaitForBrowserLaunch();
-}
-
-void UITestBase::ConnectToRunningBrowser() {
- // Set up IPC testing interface as a client.
- automation_proxy_.reset(launcher_->CreateAutomationProxy(
- TestTimeouts::command_execution_timeout_ms()));
- WaitForBrowserLaunch();
-}
-
-void UITestBase::WaitForBrowserLaunch() {
- ASSERT_EQ(AUTOMATION_SUCCESS, automation_proxy_->WaitForAppLaunch())
+ ASSERT_EQ(AUTOMATION_SUCCESS, server_->WaitForAppLaunch())
<< "Error while awaiting automation ping from browser process";
if (wait_for_initial_loads_)
- ASSERT_TRUE(automation_proxy_->WaitForInitialLoads());
+ ASSERT_TRUE(server_->WaitForInitialLoads());
else
PlatformThread::Sleep(sleep_timeout_ms());
@@ -228,7 +210,7 @@ void UITestBase::CloseBrowserAndServer() {
AssertAppNotRunning(StringPrintf(
L"Unable to quit all browser processes. Original PID %d", process_id_));
- automation_proxy_.reset(); // Shut down IPC testing interface.
+ server_.reset(); // Shut down IPC testing interface.
}
void UITestBase::LaunchBrowser(const CommandLine& arguments,
@@ -585,7 +567,7 @@ FilePath UITestBase::GetDownloadDirectory() {
}
void UITestBase::CloseBrowserAsync(BrowserProxy* browser) const {
- ASSERT_TRUE(automation_proxy_->Send(
+ ASSERT_TRUE(server_->Send(
new AutomationMsg_CloseBrowserRequestAsync(0, browser->handle())));
}
@@ -597,7 +579,7 @@ bool UITestBase::CloseBrowser(BrowserProxy* browser,
bool result = true;
- bool succeeded = automation_proxy_->Send(new AutomationMsg_CloseBrowser(
+ bool succeeded = server_->Send(new AutomationMsg_CloseBrowser(
0, browser->handle(), &result, application_closed));
if (!succeeded)
@@ -712,9 +694,10 @@ void UITestBase::PrepareTestCommandline(CommandLine* command_line) {
if (dom_automation_enabled_)
command_line->AppendSwitch(switches::kDomAutomationController);
- if (include_testing_id_)
+ if (include_testing_id_) {
command_line->AppendSwitchASCII(switches::kTestingChannelID,
- launcher_->PrefixedChannelID());
+ server_->channel_id());
+ }
if (!show_error_dialogs_ &&
!CommandLine::ForCurrentProcess()->HasSwitch(
@@ -803,11 +786,10 @@ bool UITestBase::LaunchBrowserHelper(const CommandLine& arguments,
<< browser_wrapper;
}
- base::file_handle_mapping_vector fds;
- if (automation_proxy_.get())
- fds = automation_proxy_->fds_to_map();
-
- bool started = base::LaunchApp(command_line.argv(), fds, wait, process);
+ bool started = base::LaunchApp(command_line.argv(),
+ server_->fds_to_map(),
+ wait,
+ process);
#endif
return started;
@@ -885,11 +867,11 @@ void UITest::TearDown() {
PlatformTest::TearDown();
}
-ProxyLauncher* UITest::CreateProxyLauncher() {
+AutomationProxy* UITest::CreateAutomationProxy(int execution_timeout) {
// Make the AutomationProxy disconnect the channel on the first error,
// so that we avoid spending a lot of time in timeouts. The browser is likely
// hosed if we hit those errors.
- return new AnonymousProxyLauncher(true);
+ return new AutomationProxy(execution_timeout, true);
}
static CommandLine* CreatePythonCommandLine() {
diff --git a/chrome/test/ui/ui_test.h b/chrome/test/ui/ui_test.h
index 3305cc5..ced9f34 100644
--- a/chrome/test/ui/ui_test.h
+++ b/chrome/test/ui/ui_test.h
@@ -38,7 +38,6 @@ class BrowserProxy;
class DictionaryValue;
class FilePath;
class GURL;
-class ProxyLauncher;
class ScopedTempDir;
class TabProxy;
@@ -69,21 +68,14 @@ class UITestBase {
public:
// ********* Utility functions *********
- // Launches the browser only.
- void LaunchBrowser();
-
- // Launches the browser and IPC testing connection in server mode.
+ // Launches the browser and IPC testing server.
void LaunchBrowserAndServer();
- // Launches the IPC testing connection in client mode,
- // which then attempts to connect to a browser.
- void ConnectToRunningBrowser();
-
// Only for pyauto.
void set_command_execution_timeout_ms(int timeout);
- // Overridable so that derived classes can provide their own ProxyLauncher.
- virtual ProxyLauncher* CreateProxyLauncher();
+ // Overridable so that derived classes can provide their own AutomationProxy.
+ virtual AutomationProxy* CreateAutomationProxy(int execution_timeout);
// Closes the browser and IPC testing server.
void CloseBrowserAndServer();
@@ -110,7 +102,7 @@ class UITestBase {
// Terminates the browser, simulates end of session.
void TerminateBrowser();
- // Tells the browser to navigate to the given URL in the active tab
+ // Tells the browser to navigato to the givne URL in the active tab
// of the first app window.
// Does not wait for the navigation to complete to return.
void NavigateToURLAsync(const GURL& url);
@@ -369,8 +361,8 @@ class UITestBase {
protected:
AutomationProxy* automation() {
- EXPECT_TRUE(automation_proxy_.get());
- return automation_proxy_.get();
+ EXPECT_TRUE(server_.get());
+ return server_.get();
}
virtual bool ShouldFilterInet() {
@@ -420,7 +412,6 @@ class UITestBase {
// id on the command line? Default is
// true.
bool enable_file_cookies_; // Enable file cookies, default is true.
- scoped_ptr<ProxyLauncher> launcher_; // Launches browser and AutomationProxy.
ProfileType profile_type_; // Are we using a profile with a
// complex theme?
FilePath websocket_pid_file_; // PID file for websocket server.
@@ -428,8 +419,6 @@ class UITestBase {
// the browser. Used in ShutdownTest.
private:
- void WaitForBrowserLaunch();
-
bool LaunchBrowserHelper(const CommandLine& arguments,
bool wait,
base::ProcessHandle* process);
@@ -461,7 +450,7 @@ class UITestBase {
static std::string js_flags_; // Flags passed to the JS engine.
static std::string log_level_; // Logging level.
- scoped_ptr<AutomationProxy> automation_proxy_;
+ scoped_ptr<AutomationProxy> server_;
std::string ui_test_name_;
@@ -479,7 +468,7 @@ class UITest : public UITestBase, public PlatformTest {
virtual void SetUp();
virtual void TearDown();
- virtual ProxyLauncher* CreateProxyLauncher();
+ virtual AutomationProxy* CreateAutomationProxy(int execution_timeout);
// Synchronously launches local http server normally used to run LayoutTests.
void StartHttpServer(const FilePath& root_directory);
diff --git a/chrome_frame/chrome_frame.gyp b/chrome_frame/chrome_frame.gyp
index 8db3abd..0cfe895 100644
--- a/chrome_frame/chrome_frame.gyp
+++ b/chrome_frame/chrome_frame.gyp
@@ -335,7 +335,7 @@
},
},
'dependencies': [
- '../chrome/chrome.gyp:crash_service',
+ '../chrome/chrome.gyp:crash_service',
'../chrome/chrome.gyp:automation',
'../chrome/chrome.gyp:installer_util',
'../google_update/google_update.gyp:google_update',
@@ -429,7 +429,7 @@
'dependencies': [
'../breakpad/breakpad.gyp:breakpad_handler',
'../chrome/chrome.gyp:automation',
- '../chrome/chrome.gyp:crash_service',
+ '../chrome/chrome.gyp:crash_service',
'../chrome/chrome.gyp:installer_util',
'../google_update/google_update.gyp:google_update',
],
@@ -497,7 +497,7 @@
'dependencies': [
'../breakpad/breakpad.gyp:breakpad_handler',
'../chrome/chrome.gyp:automation',
- '../chrome/chrome.gyp:crash_service',
+ '../chrome/chrome.gyp:crash_service',
'../chrome/chrome.gyp:chrome_dll_version',
'../chrome/chrome.gyp:installer_util',
'../google_update/google_update.gyp:google_update',
@@ -550,10 +550,7 @@
'test/win_event_receiver.h',
'chrome_tab.h',
'../base/test/test_file_util_win.cc',
- '../chrome/test/automation/proxy_launcher.cc',
- '../chrome/test/automation/proxy_launcher.h',
'../chrome/test/ui/ui_test.cc',
- '../chrome/test/ui/ui_test.h',
'../chrome/test/ui/ui_test_suite.cc',
'../chrome/test/ui/ui_test_suite.h',
'../chrome/test/chrome_process_util.cc',
diff --git a/chrome_frame/chrome_frame_automation.cc b/chrome_frame/chrome_frame_automation.cc
index 94d30b8..7a49f18 100644
--- a/chrome_frame/chrome_frame_automation.cc
+++ b/chrome_frame/chrome_frame_automation.cc
@@ -144,13 +144,10 @@ class ChromeFrameAutomationProxyImpl::CFMsgDispatcher
};
ChromeFrameAutomationProxyImpl::ChromeFrameAutomationProxyImpl(
- AutomationProxyCacheEntry* entry,
- std::string channel_id, int launch_timeout)
+ AutomationProxyCacheEntry* entry, int launch_timeout)
: AutomationProxy(launch_timeout, false), proxy_entry_(entry) {
TRACE_EVENT_BEGIN("chromeframe.automationproxy", this, "");
- InitializeChannel(channel_id, false);
-
sync_ = new CFMsgDispatcher();
message_filter_ = new TabProxyNotificationMessageFilter(tracker_.get());
@@ -274,10 +271,8 @@ void AutomationProxyCacheEntry::CreateProxy(ChromeFrameLaunchParams* params,
// destruction notification.
// At same time we must destroy/stop the thread from another thread.
- std::string channel_id = AutomationProxy::GenerateChannelID();
ChromeFrameAutomationProxyImpl* proxy =
- new ChromeFrameAutomationProxyImpl(this, channel_id,
- params->launch_timeout());
+ new ChromeFrameAutomationProxyImpl(this, params->launch_timeout());
// Ensure that the automation proxy actually respects our choice on whether
// or not to check the version.
@@ -287,7 +282,7 @@ void AutomationProxyCacheEntry::CreateProxy(ChromeFrameLaunchParams* params,
scoped_ptr<CommandLine> command_line(
chrome_launcher::CreateLaunchCommandLine());
command_line->AppendSwitchASCII(switches::kAutomationClientChannelID,
- channel_id);
+ proxy->channel_id());
// Run Chrome in Chrome Frame mode. In practice, this modifies the paths
// and registry keys that Chrome looks in via the BrowserDistribution
diff --git a/chrome_frame/chrome_frame_automation.h b/chrome_frame/chrome_frame_automation.h
index 5cf1304..cb1b282 100644
--- a/chrome_frame/chrome_frame_automation.h
+++ b/chrome_frame/chrome_frame_automation.h
@@ -92,7 +92,6 @@ class ChromeFrameAutomationProxyImpl
protected:
friend class AutomationProxyCacheEntry;
ChromeFrameAutomationProxyImpl(AutomationProxyCacheEntry* entry,
- std::string channel_id,
int launch_timeout);
class CFMsgDispatcher;
diff --git a/chrome_frame/test/automation_client_mock.cc b/chrome_frame/test/automation_client_mock.cc
index 2cf981b..7e8f317 100644
--- a/chrome_frame/test/automation_client_mock.cc
+++ b/chrome_frame/test/automation_client_mock.cc
@@ -315,8 +315,7 @@ class TestChromeFrameAutomationProxyImpl
public:
TestChromeFrameAutomationProxyImpl()
// 1 is an unneeded timeout.
- : ChromeFrameAutomationProxyImpl(
- NULL, AutomationProxy::GenerateChannelID(), 1) {
+ : ChromeFrameAutomationProxyImpl(NULL, 1) {
}
MOCK_METHOD3(
SendAsAsync,
@@ -470,3 +469,4 @@ TEST_F(CFACMockTest, NavigateTwiceAfterInitToSameUrl) {
EXPECT_CALL(mock_proxy_, ReleaseTabProxy(testing::Eq(tab_handle_))).Times(1);
client_->Uninitialize();
}
+
diff --git a/chrome_frame/test/net/test_automation_provider.cc b/chrome_frame/test/net/test_automation_provider.cc
index d6a0676..5b8a9a6 100644
--- a/chrome_frame/test/net/test_automation_provider.cc
+++ b/chrome_frame/test/net/test_automation_provider.cc
@@ -119,7 +119,7 @@ TestAutomationProvider* TestAutomationProvider::NewAutomationProvider(
Profile* p, const std::string& channel,
TestAutomationProviderDelegate* delegate) {
TestAutomationProvider* automation = new TestAutomationProvider(p, delegate);
- automation->InitializeChannel(channel);
+ automation->ConnectToChannel(channel);
automation->SetExpectedTabCount(1);
return automation;
}
diff --git a/ipc/ipc_channel.h b/ipc/ipc_channel.h
index 27b055c1..2445e51 100644
--- a/ipc/ipc_channel.h
+++ b/ipc/ipc_channel.h
@@ -38,9 +38,7 @@ class Channel : public Message::Sender {
enum Mode {
MODE_NONE,
MODE_SERVER,
- MODE_CLIENT,
- MODE_NAMED_SERVER,
- MODE_NAMED_CLIENT
+ MODE_CLIENT
};
enum {
diff --git a/ipc/ipc_channel_posix.cc b/ipc/ipc_channel_posix.cc
index 65a04e1..86d1673 100644
--- a/ipc/ipc_channel_posix.cc
+++ b/ipc/ipc_channel_posix.cc
@@ -273,9 +273,8 @@ Channel::ChannelImpl::ChannelImpl(const std::string& channel_id, Mode mode,
: mode_(mode),
is_blocked_on_write_(false),
message_send_bytes_written_(0),
- uses_fifo_(
- CommandLine::ForCurrentProcess()->HasSwitch(switches::kIPCUseFIFO) ||
- mode == MODE_NAMED_SERVER || mode == MODE_NAMED_CLIENT),
+ uses_fifo_(CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kIPCUseFIFO)),
server_listen_pipe_(-1),
pipe_(-1),
client_pipe_(-1),
@@ -286,15 +285,10 @@ Channel::ChannelImpl::ChannelImpl(const std::string& channel_id, Mode mode,
listener_(listener),
waiting_connect_(true),
factory_(this) {
- if (mode_ == MODE_NAMED_SERVER)
- mode_ = MODE_SERVER;
- if (mode_ == MODE_NAMED_CLIENT)
- mode_ = MODE_CLIENT;
-
- if (!CreatePipe(channel_id, mode_)) {
+ if (!CreatePipe(channel_id, mode)) {
// The pipe may have been closed already.
PLOG(WARNING) << "Unable to create pipe named \"" << channel_id
- << "\" in " << (mode_ == MODE_SERVER ? "server" : "client")
+ << "\" in " << (mode == MODE_SERVER ? "server" : "client")
<< " mode";
}
}
@@ -352,7 +346,7 @@ bool Channel::ChannelImpl::CreatePipe(const std::string& channel_id,
// TODO(playmobil): We shouldn't need to create fifos on disk.
// TODO(playmobil): If we do, they should be in the user data directory.
// TODO(playmobil): Cleanup any stale fifos.
- pipe_name_ = channel_id;
+ pipe_name_ = "/var/tmp/chrome_" + channel_id;
if (mode == MODE_SERVER) {
if (!CreateServerFifo(pipe_name_, &server_listen_pipe_)) {
return false;