summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/prerender/prerender_browsertest.cc5
-rw-r--r--chrome/browser/resources/net_internals/browser_bridge.js28
-rw-r--r--chrome/browser/resources/net_internals/test_view.html2
-rw-r--r--chrome/browser/ui/webui/net_internals_ui_browsertest.cc240
4 files changed, 267 insertions, 8 deletions
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 2ea4ab0..cb117e5 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -1552,10 +1552,11 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderFavicon) {
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) {
set_loader_path("files/prerender/prerender_loader_with_unload.html");
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
+ string16 expected_title = ASCIIToUTF16("Unloaded");
ui_test_utils::TitleWatcher title_watcher(browser()->GetSelectedTabContents(),
- ASCIIToUTF16("Unloaded"));
+ expected_title);
NavigateToDestURL();
- EXPECT_TRUE(title_watcher.Wait());
+ EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
}
// Checks that when the history is cleared, prerendering is cancelled and
diff --git a/chrome/browser/resources/net_internals/browser_bridge.js b/chrome/browser/resources/net_internals/browser_bridge.js
index 4616400..024f34b 100644
--- a/chrome/browser/resources/net_internals/browser_bridge.js
+++ b/chrome/browser/resources/net_internals/browser_bridge.js
@@ -69,6 +69,9 @@ var BrowserBridge = (function() {
// and no messages will be sent to the browser, either. Intended for use
// when viewing log files.
this.disabled_ = false;
+
+ // Interval id returned by window.setInterval for polling timer.
+ this.pollIntervalId_ = null;
}
cr.addSingletonGetter(BrowserBridge);
@@ -96,12 +99,26 @@ var BrowserBridge = (function() {
sendReady: function() {
this.send('notifyReady');
+ this.setPollInterval(POLL_INTERVAL_MS);
+ },
- // Some of the data we are interested is not currently exposed as a
- // stream, so we will poll the browser to find out when it changes and
- // then notify the observers.
- window.setInterval(this.checkForUpdatedInfo.bind(this, false),
- POLL_INTERVAL_MS);
+ /**
+ * Some of the data we are interested is not currently exposed as a
+ * stream. This starts polling those with active observers (visible
+ * views) every |intervalMs|. Subsequent calls override previous calls
+ * to this function. If |intervalMs| is 0, stops polling.
+ */
+ setPollInterval: function(intervalMs) {
+ if (this.pollIntervalId_ !== null) {
+ window.clearInterval(this.pollIntervalId_);
+ this.pollIntervalId_ = null;
+ }
+
+ if (intervalMs > 0) {
+ this.pollIntervalId_ =
+ window.setInterval(this.checkForUpdatedInfo.bind(this, false),
+ intervalMs);
+ }
},
sendGetProxySettings: function() {
@@ -312,6 +329,7 @@ var BrowserBridge = (function() {
*/
disable: function() {
this.disabled_ = true;
+ this.setPollInterval(0);
},
/**
diff --git a/chrome/browser/resources/net_internals/test_view.html b/chrome/browser/resources/net_internals/test_view.html
index bade39a..9f184a6 100644
--- a/chrome/browser/resources/net_internals/test_view.html
+++ b/chrome/browser/resources/net_internals/test_view.html
@@ -4,7 +4,7 @@
tests for why it failed.</p>
<form id=test-view-connection-tests-form>
URL: <input type=text id=test-view-url-input />
- <input type=submit value="Start tests" />
+ <input id=test-view-connection-tests-submit type=submit value="Start tests" />
</form>
<div id=test-view-summary></div>
</div>
diff --git a/chrome/browser/ui/webui/net_internals_ui_browsertest.cc b/chrome/browser/ui/webui/net_internals_ui_browsertest.cc
new file mode 100644
index 0000000..e4f16bc
--- /dev/null
+++ b/chrome/browser/ui/webui/net_internals_ui_browsertest.cc
@@ -0,0 +1,240 @@
+// Copyright (c) 2011 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/command_line.h"
+#include "base/file_path.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/webui/web_ui_browsertest.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "googleurl/src/gurl.h"
+#include "net/base/net_errors.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+const string16 kPassTitle = ASCIIToUTF16("Test Passed");
+const string16 kFailTitle = ASCIIToUTF16("Test Failed");
+
+// Each test involves calls a single Javascript function and then waits for the
+// title to be changed to "Test Passed" or "Test Failed" when done.
+class NetInternalsTest : public WebUIBrowserTest {
+ public:
+ NetInternalsTest();
+ virtual ~NetInternalsTest();
+
+ // InProcessBrowserTest overrides.
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
+ virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
+ virtual void SetUpOnMainThread() OVERRIDE;
+
+ // Runs the specified Javascript test function with the specified arguments
+ // and waits for the title to change to "Test Passed" or "Test Failed".
+ void RunTestAndWaitForTitle(const std::string& function_name,
+ const ListValue& function_arguments);
+
+ // Same as above, with constant number of arguments for easy use. Will also
+ // free arguments.
+ void RunTestAndWaitForTitle(const std::string& function_name);
+ void RunTestAndWaitForTitle(const std::string& function_name, Value* arg);
+ void RunTestAndWaitForTitle(const std::string& function_name,
+ Value* arg1, Value* arg2);
+ void RunTestAndWaitForTitle(const std::string& function_name,
+ Value* arg1, Value* arg2, Value* arg3);
+
+ void set_expected_title_(const string16& value) { expected_title_ = value; }
+
+ private:
+ // The expected title at the end of the test. Defaults to kPassTitle.
+ string16 expected_title_;
+
+ DISALLOW_COPY_AND_ASSIGN(NetInternalsTest);
+};
+
+NetInternalsTest::NetInternalsTest() : expected_title_(kPassTitle) {
+}
+
+NetInternalsTest::~NetInternalsTest() {
+}
+
+void NetInternalsTest::SetUpCommandLine(CommandLine* command_line) {
+ WebUIBrowserTest::SetUpCommandLine(command_line);
+ // Needed to test the prerender view.
+ command_line->AppendSwitchASCII(switches::kPrerender,
+ switches::kPrerenderSwitchValueEnabled);
+}
+
+void NetInternalsTest::SetUpInProcessBrowserTestFixture() {
+ // Adds libraries needed for testing, so much be first.
+ WebUIBrowserTest::SetUpInProcessBrowserTestFixture();
+
+ // Framework for net-internals tests.
+ AddLibrary(FilePath(FILE_PATH_LITERAL(
+ "net_internals/net_internals_test.js")));
+
+ // Add Javascript files needed for individual tests.
+ AddLibrary(FilePath(FILE_PATH_LITERAL("net_internals/log_view_painter.js")));
+ AddLibrary(FilePath(FILE_PATH_LITERAL("net_internals/prerender_view.js")));
+ AddLibrary(FilePath(FILE_PATH_LITERAL("net_internals/test_view.js")));
+}
+
+void NetInternalsTest::SetUpOnMainThread() {
+ // Navigate to chrome://net-internals.
+ ui_test_utils::NavigateToURL(browser(),
+ GURL(chrome::kChromeUINetInternalsURL));
+}
+
+void NetInternalsTest::RunTestAndWaitForTitle(
+ const std::string& function_name,
+ const ListValue& function_arguments) {
+ ui_test_utils::TitleWatcher title_watcher(browser()->GetTabContentsAt(0),
+ kPassTitle);
+ title_watcher.AlsoWaitForTitle(kFailTitle);
+
+ ConstValueVector arguments;
+ StringValue function_name_arg(function_name);
+ arguments.push_back(&function_name_arg);
+ arguments.push_back(&function_arguments);
+
+ ASSERT_TRUE(RunJavascriptFunction("netInternalsTest.runTest", arguments));
+ ASSERT_EQ(expected_title_, title_watcher.WaitAndGetTitle());
+}
+
+void NetInternalsTest::RunTestAndWaitForTitle(
+ const std::string& function_name) {
+ ListValue test_arguments;
+ RunTestAndWaitForTitle(function_name, test_arguments);
+}
+
+void NetInternalsTest::RunTestAndWaitForTitle(const std::string& function_name,
+ Value* arg) {
+ ListValue test_arguments;
+ test_arguments.Append(arg);
+ RunTestAndWaitForTitle(function_name, test_arguments);
+}
+
+void NetInternalsTest::RunTestAndWaitForTitle(const std::string& function_name,
+ Value* arg1, Value* arg2) {
+ ListValue test_arguments;
+ test_arguments.Append(arg1);
+ test_arguments.Append(arg2);
+ RunTestAndWaitForTitle(function_name, test_arguments);
+}
+
+void NetInternalsTest::RunTestAndWaitForTitle(const std::string& function_name,
+ Value* arg1, Value* arg2,
+ Value* arg3) {
+ ListValue test_arguments;
+ test_arguments.Append(arg1);
+ test_arguments.Append(arg2);
+ test_arguments.Append(arg3);
+ RunTestAndWaitForTitle(function_name, test_arguments);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// framework.js
+////////////////////////////////////////////////////////////////////////////////
+
+// Checks testDone.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsDone) {
+ RunTestAndWaitForTitle("NetInternalsDone");
+}
+
+// Checks a failed expect statement.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsExpectFail) {
+ set_expected_title_(kFailTitle);
+ RunTestAndWaitForTitle("NetInternalsExpectFail");
+}
+
+// Checks a failed assert statement.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsAssertFail) {
+ set_expected_title_(kFailTitle);
+ RunTestAndWaitForTitle("NetInternalsAssertFail");
+}
+
+// Checks that testDone works when called by an observer in response to an
+// event.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsObserverDone) {
+ RunTestAndWaitForTitle("NetInternalsObserverDone");
+}
+
+// Checks that a failed expect works when called by an observer in response
+// to an event.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsObserverExpectFail) {
+ set_expected_title_(kFailTitle);
+ RunTestAndWaitForTitle("NetInternalsObserverExpectFail");
+}
+
+// Checks that a failed assertion works when called by an observer in response
+// to an event.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsObserverAssertFail) {
+ set_expected_title_(kFailTitle);
+ RunTestAndWaitForTitle("NetInternalsObserverAssertFail");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// test_view.js
+////////////////////////////////////////////////////////////////////////////////
+
+// Runs the test suite twice, expecting a passing result the first time. Checks
+// the first result, the order of events that occur, and the number of rows in
+// the table.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsTestViewPassTwice) {
+ ASSERT_TRUE(test_server()->Start());
+ RunTestAndWaitForTitle(
+ "NetInternalsTestView",
+ // URL that results in success.
+ Value::CreateStringValue(
+ test_server()->GetURL("files/title1.html").spec()),
+ // Resulting error code of the first test.
+ Value::CreateIntegerValue(net::OK),
+ // Number of times to run the test suite.
+ Value::CreateIntegerValue(2));
+}
+
+// Runs the test suite twice, expecting a failing result the first time. Checks
+// the first result, the order of events that occur, and the number of rows in
+// the table.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsTestViewFailTwice) {
+ RunTestAndWaitForTitle(
+ "NetInternalsTestView",
+ // URL that results in an error, due to the port.
+ Value::CreateStringValue("http://127.0.0.1:7/"),
+ // Resulting error code of the first test.
+ Value::CreateIntegerValue(net::ERR_UNSAFE_PORT),
+ // Number of times to run the test suite.
+ Value::CreateIntegerValue(2));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// prerender_view.js
+////////////////////////////////////////////////////////////////////////////////
+
+// Prerender two pages and check PrerenderView behavior. The first is expected
+// to fail, the second is expected to succeed.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest, NetInternalsPrerenderView) {
+ ASSERT_TRUE(test_server()->Start());
+ RunTestAndWaitForTitle(
+ "NetInternalsPrerenderView",
+ // URL that can't be prerendered, since it triggers a download.
+ Value::CreateStringValue(
+ test_server()->GetURL("files/download-test1.lib").spec()),
+ // URL that can be prerendered.
+ Value::CreateStringValue(
+ test_server()->GetURL("files/title1.html").spec()));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// log_view_painter.js
+////////////////////////////////////////////////////////////////////////////////
+
+// Check that we correctly remove cookies and login information.
+IN_PROC_BROWSER_TEST_F(NetInternalsTest,
+ NetInternalsLogViewPainterStripInfo) {
+ RunTestAndWaitForTitle("NetInternalsLogViewPainterStripInfo");
+}
+
+} // namespace