summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/search_engines/template_url_scraper_unittest.cc90
-rw-r--r--chrome/test/in_process_browser_test.cc15
-rw-r--r--chrome/test/in_process_browser_test.h8
-rw-r--r--chrome/test/ui_test_utils.cc31
-rw-r--r--chrome/test/ui_test_utils.h10
-rw-r--r--chrome/test/unit/unittests.vcproj4
-rw-r--r--net/base/ssl_client_socket_unittest.cc6
-rw-r--r--net/base/ssl_test_util.cc8
-rw-r--r--net/base/ssl_test_util.h5
-rw-r--r--net/tools/testserver/testserver.py7
-rw-r--r--net/url_request/url_request_unittest.h27
-rw-r--r--webkit/glue/searchable_form_data.cc6
-rw-r--r--webkit/glue/unittest_test_server.h2
13 files changed, 188 insertions, 31 deletions
diff --git a/chrome/browser/search_engines/template_url_scraper_unittest.cc b/chrome/browser/search_engines/template_url_scraper_unittest.cc
new file mode 100644
index 0000000..71aace7
--- /dev/null
+++ b/chrome/browser/search_engines/template_url_scraper_unittest.cc
@@ -0,0 +1,90 @@
+// 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/browser/browser.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/search_engines/template_url_model.h"
+#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/notification_source.h"
+#include "chrome/common/notification_type.h"
+#include "chrome/test/in_process_browser_test.h"
+#include "chrome/test/ui_test_utils.h"
+#include "net/base/host_resolver_unittest.h"
+#include "net/base/net_util.h"
+
+namespace {
+class TemplateURLScraperTest : public InProcessBrowserTest {
+ public:
+ TemplateURLScraperTest() {
+ }
+
+ protected:
+ virtual void ConfigureHostMapper(net::RuleBasedHostMapper* host_mapper) {
+ InProcessBrowserTest::ConfigureHostMapper(host_mapper);
+ // We use foo.com in our tests.
+ host_mapper->AddRule("*.foo.com", "localhost");
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TemplateURLScraperTest);
+};
+
+class TemplateURLModelLoader : public NotificationObserver {
+ public:
+ explicit TemplateURLModelLoader(TemplateURLModel* model) : model_(model) {
+ registrar_.Add(this, NotificationType::TEMPLATE_URL_MODEL_LOADED,
+ Source<TemplateURLModel>(model));
+ model_->Load();
+ ui_test_utils::RunMessageLoop();
+ }
+
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == NotificationType::TEMPLATE_URL_MODEL_LOADED &&
+ Source<TemplateURLModel>(source).ptr() == model_) {
+ MessageLoop::current()->Quit();
+ }
+ }
+
+ private:
+ NotificationRegistrar registrar_;
+
+ TemplateURLModel* model_;
+
+ DISALLOW_COPY_AND_ASSIGN(TemplateURLModelLoader);
+};
+
+} // namespace
+
+/*
+IN_PROC_BROWSER_TEST_F(TemplateURLScraperTest, ScrapeWithOnSubmit) {
+ TemplateURLModel* template_urls = browser()->profile()->GetTemplateURLModel();
+ TemplateURLModelLoader loader(template_urls);
+
+ std::vector<const TemplateURL*> all_urls = template_urls->GetTemplateURLs();
+
+ // We need to substract the default pre-populated engines that the profile is
+ // set up with.
+ size_t default_index = 0;
+ std::vector<TemplateURL*> prepopulate_urls;
+ TemplateURLPrepopulateData::GetPrepopulatedEngines(
+ browser()->profile()->GetPrefs(),
+ &prepopulate_urls,
+ &default_index);
+
+ EXPECT_EQ(prepopulate_urls.size(), all_urls.size());
+
+ scoped_refptr<HTTPTestServer> server(
+ HTTPTestServer::CreateServerWithFileRootURL(
+ L"chrome/test/data/template_url_scraper/submit_handler", L"/",
+ g_browser_process->io_thread()->message_loop()));
+ ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+ browser(), GURL("http://www.foo.com:1337/"), 2);
+
+ all_urls = template_urls->GetTemplateURLs();
+ EXPECT_EQ(1, all_urls.size() - prepopulate_urls.size());
+}
+*/
diff --git a/chrome/test/in_process_browser_test.cc b/chrome/test/in_process_browser_test.cc
index 39114ee..6699144 100644
--- a/chrome/test/in_process_browser_test.cc
+++ b/chrome/test/in_process_browser_test.cc
@@ -125,12 +125,7 @@ void InProcessBrowserTest::SetUp() {
scoped_refptr<net::RuleBasedHostMapper> host_mapper(
new net::RuleBasedHostMapper());
- // TODO(sky): Don't make a real dns lookup here or simulate a failing
- // lookup.
- host_mapper->AllowDirectLookup("*.google.com");
- // See http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol
- // We don't want the test code to use it.
- host_mapper->AddSimulatedFailure("wpad");
+ ConfigureHostMapper(host_mapper.get());
net::ScopedHostMapper scoped_host_mapper(host_mapper.get());
BrowserMain(params);
}
@@ -221,3 +216,11 @@ void InProcessBrowserTest::RunTestOnMainThreadLoop() {
MessageLoopForUI::current()->Quit();
}
+
+void InProcessBrowserTest::ConfigureHostMapper(
+ net::RuleBasedHostMapper* host_mapper) {
+ host_mapper->AllowDirectLookup("*.google.com");
+ // See http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol
+ // We don't want the test code to use it.
+ host_mapper->AddSimulatedFailure("wpad");
+}
diff --git a/chrome/test/in_process_browser_test.h b/chrome/test/in_process_browser_test.h
index 89de9b9..457516e 100644
--- a/chrome/test/in_process_browser_test.h
+++ b/chrome/test/in_process_browser_test.h
@@ -12,6 +12,9 @@
class Browser;
class Profile;
+namespace net {
+class RuleBasedHostMapper;
+}
// Base class for tests wanting to bring up a browser in the unit test process.
// Writing tests with InProcessBrowserTest is slightly different than that of
@@ -64,6 +67,11 @@ class InProcessBrowserTest : public testing::Test, public NotificationObserver {
// Override this rather than TestBody.
virtual void RunTestOnMainThread() = 0;
+ // Allows subclasses to configure the host mapper. By default this blocks
+ // requests to google.com as Chrome pings that on startup and we don't want to
+ // do that during testing.
+ virtual void ConfigureHostMapper(net::RuleBasedHostMapper* host_mapper);
+
// Starts an HTTP server.
HTTPTestServer* StartHTTPServer();
diff --git a/chrome/test/ui_test_utils.cc b/chrome/test/ui_test_utils.cc
index 47e3ef2..6af1091 100644
--- a/chrome/test/ui_test_utils.cc
+++ b/chrome/test/ui_test_utils.cc
@@ -20,8 +20,11 @@ namespace {
// Used to block until a navigation completes.
class NavigationNotificationObserver : public NotificationObserver {
public:
- explicit NavigationNotificationObserver(NavigationController* controller)
- : navigation_started_(false) {
+ NavigationNotificationObserver(NavigationController* controller,
+ int number_of_navigations)
+ : navigation_started_(false),
+ navigations_completed_(0),
+ number_of_navigations_(number_of_navigations) {
registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED,
Source<NavigationController>(controller));
registrar_.Add(this, NotificationType::LOAD_START,
@@ -38,7 +41,8 @@ class NavigationNotificationObserver : public NotificationObserver {
type == NotificationType::LOAD_START) {
navigation_started_ = true;
} else if (type == NotificationType::LOAD_STOP) {
- if (navigation_started_) {
+ if (navigation_started_ &&
+ ++navigations_completed_ == number_of_navigations_) {
navigation_started_ = false;
MessageLoopForUI::current()->Quit();
}
@@ -51,6 +55,12 @@ class NavigationNotificationObserver : public NotificationObserver {
// If true the navigation has started.
bool navigation_started_;
+ // The number of navigations that have been completed.
+ int navigations_completed_;
+
+ // The number of navigations to wait for.
+ int number_of_navigations_;
+
DISALLOW_COPY_AND_ASSIGN(NavigationNotificationObserver);
};
@@ -66,15 +76,26 @@ void RunMessageLoop() {
}
void WaitForNavigation(NavigationController* controller) {
- NavigationNotificationObserver observer(controller);
+ WaitForNavigations(controller, 1);
+}
+
+void WaitForNavigations(NavigationController* controller,
+ int number_of_navigations) {
+ NavigationNotificationObserver observer(controller, number_of_navigations);
}
void NavigateToURL(Browser* browser, const GURL& url) {
+ NavigateToURLBlockUntilNavigationsComplete(browser, url, 1);
+}
+
+void NavigateToURLBlockUntilNavigationsComplete(Browser* browser,
+ const GURL& url,
+ int number_of_navigations) {
NavigationController* controller =
browser->GetSelectedTabContents()->controller();
browser->OpenURLFromTab(browser->GetSelectedTabContents(), url, GURL(),
CURRENT_TAB, PageTransition::TYPED);
- WaitForNavigation(controller);
+ WaitForNavigations(controller, number_of_navigations);
}
} // namespace ui_test_utils
diff --git a/chrome/test/ui_test_utils.h b/chrome/test/ui_test_utils.h
index f0433b0..ced32d2 100644
--- a/chrome/test/ui_test_utils.h
+++ b/chrome/test/ui_test_utils.h
@@ -21,10 +21,20 @@ void RunMessageLoop();
// the navigation finishes.
void WaitForNavigation(NavigationController* controller);
+// Waits for |controller| to complete a navigation. This blocks until
+// the specified number of navigations complete.
+void WaitForNavigations(NavigationController* controller,
+ int number_of_navigations);
+
// Navigates the selected tab of |browser| to |url|, blocking until the
// navigation finishes.
void NavigateToURL(Browser* browser, const GURL& url);
+// Navigates the selected tab of |browser| to |url|, blocking until the
+// number of navigations specified complete.
+void NavigateToURLBlockUntilNavigationsComplete(Browser* browser,
+ const GURL& url,
+ int number_of_navigations);
}
#endif // CHROME_TEST_UI_TEST_UTILS_H_
diff --git a/chrome/test/unit/unittests.vcproj b/chrome/test/unit/unittests.vcproj
index 3f4dcec..2bf265e 100644
--- a/chrome/test/unit/unittests.vcproj
+++ b/chrome/test/unit/unittests.vcproj
@@ -708,6 +708,10 @@
>
</File>
<File
+ RelativePath="..\..\browser\search_engines\template_url_scraper_unittest.cc"
+ >
+ </File>
+ <File
RelativePath="..\..\browser\search_engines\template_url_unittest.cc"
>
</File>
diff --git a/net/base/ssl_client_socket_unittest.cc b/net/base/ssl_client_socket_unittest.cc
index 7c7b170..2399466 100644
--- a/net/base/ssl_client_socket_unittest.cc
+++ b/net/base/ssl_client_socket_unittest.cc
@@ -27,21 +27,21 @@ class SSLClientSocketTest : public PlatformTest {
void StartOKServer() {
bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
server_.kHostName, server_.kOKHTTPSPort,
- FilePath(), server_.GetOKCertPath());
+ FilePath(), server_.GetOKCertPath(), std::wstring());
ASSERT_TRUE(success);
}
void StartMismatchedServer() {
bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
server_.kMismatchedHostName, server_.kOKHTTPSPort,
- FilePath(), server_.GetOKCertPath());
+ FilePath(), server_.GetOKCertPath(), std::wstring());
ASSERT_TRUE(success);
}
void StartExpiredServer() {
bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
server_.kHostName, server_.kBadHTTPSPort,
- FilePath(), server_.GetExpiredCertPath());
+ FilePath(), server_.GetExpiredCertPath(), std::wstring());
ASSERT_TRUE(success);
}
diff --git a/net/base/ssl_test_util.cc b/net/base/ssl_test_util.cc
index 71edb6a..a3fe3b9 100644
--- a/net/base/ssl_test_util.cc
+++ b/net/base/ssl_test_util.cc
@@ -152,7 +152,8 @@ void TestServerLauncher::SetPythonPath() {
bool TestServerLauncher::Start(Protocol protocol,
const std::string& host_name, int port,
const FilePath& document_root,
- const FilePath& cert_path) {
+ const FilePath& cert_path,
+ const std::wstring& file_root_url) {
if (!cert_path.value().empty()) {
if (!LoadTestRootCert())
return false;
@@ -198,6 +199,11 @@ bool TestServerLauncher::Start(Protocol protocol,
command_line.append(cert_path.ToWStringHack());
command_line.append(L"\"");
}
+ if (!file_root_url.empty()) {
+ command_line.append(L" --file-root-url=\"");
+ command_line.append(file_root_url);
+ command_line.append(L"\"");
+ }
if (!base::LaunchApp(command_line, false, true, &process_handle_)) {
LOG(ERROR) << "Failed to launch " << command_line;
diff --git a/net/base/ssl_test_util.h b/net/base/ssl_test_util.h
index b75453b..54449ee 100644
--- a/net/base/ssl_test_util.h
+++ b/net/base/ssl_test_util.h
@@ -39,12 +39,15 @@ class TestServerLauncher {
// Start src/net/tools/testserver/testserver.py and
// ask it to serve the given protocol.
// If protocol is HTTP, and cert_path is not empty, serves HTTPS.
+ // file_root_url specifies the root url on the server that documents will be
+ // served out of. This is /files/ by default.
// Returns true on success, false if files not found or root cert
// not trusted.
bool Start(Protocol protocol,
const std::string& host_name, int port,
const FilePath& document_root,
- const FilePath& cert_path);
+ const FilePath& cert_path,
+ const std::wstring& file_root_url);
// Stop the server started by Start().
bool Stop();
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
index 5784059..9ab77a8 100644
--- a/net/tools/testserver/testserver.py
+++ b/net/tools/testserver/testserver.py
@@ -565,13 +565,15 @@ class TestPageHandler(BaseHTTPServer.BaseHTTPRequestHandler):
"""This handler sends the contents of the requested file. Wow, it's like
a real webserver!"""
- prefix='/files/'
+ prefix = self.server.file_root_url
if not self.path.startswith(prefix):
return False
file = self.path[len(prefix):]
entries = file.split('/');
path = os.path.join(self.server.data_dir, *entries)
+ if os.path.isdir(path):
+ path = os.path.join(path, 'index.html')
if not os.path.isfile(path):
print "File not found " + file + " full path:" + path
@@ -1047,6 +1049,7 @@ def main(options, args):
print 'HTTP server started on port %d...' % port
server.data_dir = MakeDataDir()
+ server.file_root_url = options.file_root_url
MakeDumpDir(server.data_dir)
# means FTP Server
@@ -1102,6 +1105,8 @@ if __name__ == '__main__':
help='Specify that https should be used, specify '
'the path to the cert containing the private key '
'the server should use')
+ option_parser.add_option('', '--file-root-url', default='/files/',
+ help='Specify a root URL for files served.')
options, args = option_parser.parse_args()
sys.exit(main(options, args))
diff --git a/net/url_request/url_request_unittest.h b/net/url_request/url_request_unittest.h
index 88b83a6..e661153 100644
--- a/net/url_request/url_request_unittest.h
+++ b/net/url_request/url_request_unittest.h
@@ -260,20 +260,22 @@ class BaseTestServer : public base::RefCounted<BaseTestServer> {
bool Start(net::TestServerLauncher::Protocol protocol,
const std::string& host_name, int port,
const FilePath& document_root,
- const FilePath& cert_path) {
+ const FilePath& cert_path,
+ const std::wstring& file_root_url) {
std::string blank;
return Start(protocol, host_name, port, document_root, cert_path,
- blank, blank);
+ file_root_url, blank, blank);
}
bool Start(net::TestServerLauncher::Protocol protocol,
const std::string& host_name, int port,
const FilePath& document_root,
const FilePath& cert_path,
+ const std::wstring& file_root_url,
const std::string& url_user,
const std::string& url_password) {
if (!launcher_.Start(protocol,
- host_name, port, document_root, cert_path))
+ host_name, port, document_root, cert_path, file_root_url))
return false;
std::string scheme;
@@ -338,13 +340,20 @@ class HTTPTestServer : public BaseTestServer {
static scoped_refptr<HTTPTestServer> CreateServer(
const std::wstring& document_root,
MessageLoop* loop) {
+ return CreateServerWithFileRootURL(document_root, std::wstring(), loop);
+ }
+
+ static scoped_refptr<HTTPTestServer> CreateServerWithFileRootURL(
+ const std::wstring& document_root,
+ const std::wstring& file_root_url,
+ MessageLoop* loop) {
scoped_refptr<HTTPTestServer> test_server = new HTTPTestServer();
test_server->loop_ = loop;
FilePath no_cert;
FilePath docroot = FilePath::FromWStringHack(document_root);
if (!test_server->Start(net::TestServerLauncher::ProtoHTTP,
kDefaultHostName, kHTTPDefaultPort,
- docroot, no_cert)) {
+ docroot, no_cert, file_root_url)) {
return NULL;
}
return test_server;
@@ -438,7 +447,7 @@ class HTTPSTestServer : public HTTPTestServer {
if (!test_server->Start(net::TestServerLauncher::ProtoHTTP,
net::TestServerLauncher::kHostName,
net::TestServerLauncher::kOKHTTPSPort,
- docroot, certpath)) {
+ docroot, certpath, std::wstring())) {
return NULL;
}
return test_server;
@@ -454,7 +463,7 @@ class HTTPSTestServer : public HTTPTestServer {
if (!test_server->Start(net::TestServerLauncher::ProtoHTTP,
net::TestServerLauncher::kMismatchedHostName,
net::TestServerLauncher::kOKHTTPSPort,
- docroot, certpath)) {
+ docroot, certpath, std::wstring())) {
return NULL;
}
return test_server;
@@ -469,7 +478,7 @@ class HTTPSTestServer : public HTTPTestServer {
if (!test_server->Start(net::TestServerLauncher::ProtoHTTP,
net::TestServerLauncher::kHostName,
net::TestServerLauncher::kBadHTTPSPort,
- docroot, certpath)) {
+ docroot, certpath, std::wstring())) {
return NULL;
}
return test_server;
@@ -484,7 +493,7 @@ class HTTPSTestServer : public HTTPTestServer {
FilePath docroot = FilePath::FromWStringHack(document_root);
FilePath certpath = FilePath::FromWStringHack(cert_path);
if (!test_server->Start(net::TestServerLauncher::ProtoHTTP,
- host_name, port, docroot, certpath)) {
+ host_name, port, docroot, certpath, std::wstring())) {
return NULL;
}
return test_server;
@@ -517,7 +526,7 @@ class FTPTestServer : public BaseTestServer {
FilePath docroot = FilePath::FromWStringHack(document_root);
FilePath no_cert;
if (!test_server->Start(net::TestServerLauncher::ProtoFTP,
- kDefaultHostName, kFTPDefaultPort, docroot, no_cert,
+ kDefaultHostName, kFTPDefaultPort, docroot, no_cert, std::wstring(),
url_user, url_password)) {
return NULL;
}
diff --git a/webkit/glue/searchable_form_data.cc b/webkit/glue/searchable_form_data.cc
index 3c787b2..6187897 100644
--- a/webkit/glue/searchable_form_data.cc
+++ b/webkit/glue/searchable_form_data.cc
@@ -320,10 +320,8 @@ SearchableFormData* SearchableFormData::Create(WebCore::HTMLFormElement* form) {
if (frame == NULL)
return NULL;
- // Only consider forms that GET data, do not have script for onsubmit, and
- // the action targets an http page.
- if (!IsFormMethodGet(form) || FormHasOnSubmit(form) ||
- !IsHTTPFormSubmit(form))
+ // Only consider forms that GET data and the action targets an http page.
+ if (!IsFormMethodGet(form) || !IsHTTPFormSubmit(form))
return NULL;
Vector<char> enc_string;
diff --git a/webkit/glue/unittest_test_server.h b/webkit/glue/unittest_test_server.h
index c8e622b..583abf9 100644
--- a/webkit/glue/unittest_test_server.h
+++ b/webkit/glue/unittest_test_server.h
@@ -26,7 +26,7 @@ class UnittestTestServer : public HTTPTestServer {
FilePath no_cert;
FilePath docroot = FilePath::FromWStringHack(L"webkit/data");
if (!test_server->Start(net::TestServerLauncher::ProtoHTTP,
- "localhost", 1337, docroot, no_cert)) {
+ "localhost", 1337, docroot, no_cert, std::wstring())) {
delete test_server;
return NULL;
}