Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(704)

Unified Diff: content/browser/media/webrtc_internals_browsertest.cc

Issue 13859011: Fixes webrtc-internals stats reporting for the new stats API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more tests Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/browser/resources/media/stats_graph_helper.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/webrtc_internals_browsertest.cc
diff --git a/content/browser/media/webrtc_internals_browsertest.cc b/content/browser/media/webrtc_internals_browsertest.cc
index a497c3d2661a022c0760f323ce3cf845efe3428d..c6348d769a77bfc14e85ab82408152720ccce7f4 100644
--- a/content/browser/media/webrtc_internals_browsertest.cc
+++ b/content/browser/media/webrtc_internals_browsertest.cc
@@ -2,12 +2,15 @@
// 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/time.h"
#include "base/utf_string_conversions.h"
+#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test_utils.h"
#include "content/shell/shell.h"
#include "content/test/content_browser_test.h"
#include "content/test/content_browser_test_utils.h"
+#include "net/test/test_server.h"
using std::string;
namespace content {
@@ -36,8 +39,7 @@ struct StatsUnit {
struct StatsEntry {
string type;
string id;
- StatsUnit local;
- StatsUnit remote;
+ StatsUnit stats;
};
typedef std::map<string, std::vector<string> > StatsMap;
@@ -91,11 +93,26 @@ class WebRTCInternalsBrowserTest: public ContentBrowserTest {
WebRTCInternalsBrowserTest() {}
virtual ~WebRTCInternalsBrowserTest() {}
+ virtual void SetUpOnMainThread() OVERRIDE {
+ // We need fake devices in this test since we want to run on naked VMs. We
+ // assume this switch is set by default in content_browsertests.
+ ASSERT_TRUE(CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kUseFakeDeviceForMediaStream));
+
+ ASSERT_TRUE(test_server()->Start());
+ }
+
protected:
bool ExecuteJavascript(const string& javascript) {
return ExecuteScript(shell()->web_contents(), javascript);
}
+ void ExpectTitle(const std::string& expected_title) const {
+ string16 expected_title16(ASCIIToUTF16(expected_title));
+ TitleWatcher title_watcher(shell()->web_contents(), expected_title16);
+ EXPECT_EQ(expected_title16, title_watcher.WaitAndGetTitle());
+ }
+
// Execute the javascript of addPeerConnection.
void ExecuteAddPeerConnectionJs(const PeerConnectionEntry& pc) {
std::stringstream ss;
@@ -170,23 +187,18 @@ class WebRTCInternalsBrowserTest: public ContentBrowserTest {
// Execute addStats and verifies that the stats table has the right content.
void ExecuteAndVerifyAddStats(
PeerConnectionEntry& pc, const string& type, const string& id,
- StatsUnit& local, StatsUnit& remote) {
- StatsEntry entry = {type, id, local, remote};
+ StatsUnit& stats) {
+ StatsEntry entry = {type, id, stats};
// Adds each new value to the map of stats history.
std::map<string, string>::iterator iter;
- for (iter = local.values.begin(); iter != local.values.end(); iter++) {
- pc.stats_[type + "-" + id][iter->first].push_back(iter->second);
- }
- for (iter = remote.values.begin(); iter != remote.values.end(); iter++) {
+ for (iter = stats.values.begin(); iter != stats.values.end(); iter++) {
pc.stats_[type + "-" + id][iter->first].push_back(iter->second);
}
-
std::stringstream ss;
ss << "{pid:" << pc.pid_ << ", lid:" << pc.lid_ << ","
"reports:[" << "{id:'" << id << "', type:'" << type << "', "
- "local:" << local.GetString() << ", "
- "remote:" << remote.GetString() << "}]}";
+ "stats:" << stats.GetString() << "}]}";
ASSERT_TRUE(ExecuteJavascript("addStats(" + ss.str() + ")"));
VerifyStatsTable(pc, entry);
@@ -195,18 +207,14 @@ class WebRTCInternalsBrowserTest: public ContentBrowserTest {
// Verifies that the stats table has the right content.
void VerifyStatsTable(const PeerConnectionEntry& pc,
- const StatsEntry& report) {
+ const StatsEntry& report) {
string table_id =
pc.getIdString() + "-table-" + report.type + "-" + report.id;
VerifyElementWithId(table_id);
std::map<string, string>::const_iterator iter;
- for (iter = report.local.values.begin();
- iter != report.local.values.end(); iter++) {
- VerifyStatsTableRow(table_id, iter->first, iter->second);
- }
- for (iter = report.remote.values.begin();
- iter != report.remote.values.end(); iter++) {
+ for (iter = report.stats.values.begin();
+ iter != report.stats.values.end(); iter++) {
VerifyStatsTableRow(table_id, iter->first, iter->second);
}
}
@@ -335,21 +343,18 @@ IN_PROC_BROWSER_TEST_F(WebRTCInternalsBrowserTest, AddStats) {
const string type = "ssrc";
const string id = "1234";
- StatsUnit local = {FAKE_TIME_STAMP};
- local.values["bitrate"] = "2000";
- local.values["framerate"] = "30";
- StatsUnit remote = {FAKE_TIME_STAMP};
- remote.values["jitter"] = "1";
- remote.values["rtt"] = "20";
+ StatsUnit stats = {FAKE_TIME_STAMP};
+ stats.values["bitrate"] = "2000";
+ stats.values["framerate"] = "30";
// Add new stats and verify the stats table and graphs.
- ExecuteAndVerifyAddStats(pc, type, id, local, remote);
+ ExecuteAndVerifyAddStats(pc, type, id, stats);
VerifyStatsGraph(pc);
// Update existing stats and verify the stats table and graphs.
- local.values["bitrate"] = "2001";
- local.values["framerate"] = "31";
- ExecuteAndVerifyAddStats(pc, type, id, local, remote);
+ stats.values["bitrate"] = "2001";
+ stats.values["framerate"] = "31";
+ ExecuteAndVerifyAddStats(pc, type, id, stats);
VerifyStatsGraph(pc);
}
@@ -361,15 +366,15 @@ IN_PROC_BROWSER_TEST_F(WebRTCInternalsBrowserTest, BweCompoundGraph) {
PeerConnectionEntry pc(1, 0);
ExecuteAddPeerConnectionJs(pc);
- StatsUnit local = {FAKE_TIME_STAMP};
- local.values["googAvailableSendBandwidth"] = "1000000";
- local.values["googTargetEncBitrate"] = "1000";
- local.values["googActualEncBitrate"] = "1000000";
- local.values["googRetransmitBitrate"] = "10";
- local.values["googTransmitBitrate"] = "1000000";
+ StatsUnit stats = {FAKE_TIME_STAMP};
+ stats.values["googAvailableSendBandwidth"] = "1000000";
+ stats.values["googTargetEncBitrate"] = "1000";
+ stats.values["googActualEncBitrate"] = "1000000";
+ stats.values["googRetransmitBitrate"] = "10";
+ stats.values["googTransmitBitrate"] = "1000000";
const string stats_type = "bwe";
const string stats_id = "videobwe";
- ExecuteAndVerifyAddStats(pc, stats_type, stats_id, local, local);
+ ExecuteAndVerifyAddStats(pc, stats_type, stats_id, stats);
string graph_id =
pc.getIdString() + "-" + stats_type + "-" + stats_id + "-bweCompound";
@@ -389,7 +394,7 @@ IN_PROC_BROWSER_TEST_F(WebRTCInternalsBrowserTest, BweCompoundGraph) {
"window.domAutomationController.send("
" graphViews['" + graph_id + "'].getDataSeriesCount())",
&count));
- EXPECT_EQ((int)local.values.size(), count);
+ EXPECT_EQ((int)stats.values.size(), count);
}
// Tests that the total packet/byte count is converted to count per second,
@@ -414,18 +419,17 @@ IN_PROC_BROWSER_TEST_F(WebRTCInternalsBrowserTest, ConvertedGraphs) {
const string converted_values[] = {"1000", "8000", "1000", "8000"};
// Send the first data point.
- StatsUnit remote = {FAKE_TIME_STAMP};
- StatsUnit local = {FAKE_TIME_STAMP};
+ StatsUnit stats = {FAKE_TIME_STAMP};
for (int i = 0; i < num_converted_stats; ++i)
- local.values[stats_names[i]] = first_value;
+ stats.values[stats_names[i]] = first_value;
- ExecuteAndVerifyAddStats(pc, stats_type, stats_id, local, remote);
+ ExecuteAndVerifyAddStats(pc, stats_type, stats_id, stats);
// Send the second data point at 1000ms after the first data point.
- local.timestamp += 1000;
+ stats.timestamp += 1000;
for (int i = 0; i < num_converted_stats; ++i)
- local.values[stats_names[i]] = second_value;
- ExecuteAndVerifyAddStats(pc, stats_type, stats_id, local, remote);
+ stats.values[stats_names[i]] = second_value;
+ ExecuteAndVerifyAddStats(pc, stats_type, stats_id, stats);
// Verifies the graph data matches converted_values.
string graph_id_prefix = pc.getIdString() + "-" + stats_type + "-" + stats_id;
@@ -435,4 +439,81 @@ IN_PROC_BROWSER_TEST_F(WebRTCInternalsBrowserTest, ConvertedGraphs) {
}
}
+// Sanity check of the page content under a real PeerConnection call.
+IN_PROC_BROWSER_TEST_F(WebRTCInternalsBrowserTest, withRealPeerConnectionCall) {
+ // Start a peerconnection call in the first window.
+ GURL url(test_server()->GetURL("files/media/peerconnection-call.html"));
+ NavigateToURL(shell(), url);
+ ASSERT_TRUE(ExecuteJavascript("call({video:true});"));
+ ExpectTitle("OK");
+
+ // Open webrtc-internals in the second window.
+ GURL url2("chrome://webrtc-internals");
+ Shell* shell2 = CreateBrowser();
+ NavigateToURL(shell2, url2);
+
+ const int NUMBER_OF_PEER_CONNECTIONS = 2;
+
+ // Verifies the number of peerconnections.
+ int count = 0;
+ ASSERT_TRUE(ExecuteScriptAndExtractInt(
+ shell2->web_contents(),
+ "window.domAutomationController.send("
+ "$('peer-connections-list').getElementsByTagName('li').length);",
+ &count));
+ EXPECT_EQ(NUMBER_OF_PEER_CONNECTIONS, count);
+
+ // Verifies the the event tables.
+ ASSERT_TRUE(ExecuteScriptAndExtractInt(
+ shell2->web_contents(),
+ "window.domAutomationController.send("
+ "$('peer-connections-list').getElementsByClassName('log-table')[0]"
+ ".rows.length);",
+ &count));
+ EXPECT_TRUE(count > 1);
vrk (LEFT CHROMIUM) 2013/04/17 00:40:59 nit: Use EXPECT_GT here and below.
jiayl 2013/04/17 20:43:06 Done.
+
+ ASSERT_TRUE(ExecuteScriptAndExtractInt(
+ shell2->web_contents(),
+ "window.domAutomationController.send("
+ "$('peer-connections-list').getElementsByClassName('log-table')[1]"
+ ".rows.length);",
+ &count));
+ EXPECT_TRUE(count > 1);
+
+ // Wait until the stats table containers are created.
+ count = 0;
+ int retries = 0;
+ while (count != NUMBER_OF_PEER_CONNECTIONS && retries < 10000) {
vrk (LEFT CHROMIUM) 2013/04/17 00:40:59 Hmmm... this "retries" thing is unideal. :) Can yo
jiayl 2013/04/17 20:43:06 The stats are reported asynchronously, so we need
+ ASSERT_TRUE(ExecuteScriptAndExtractInt(
+ shell2->web_contents(),
+ "window.domAutomationController.send("
+ "$('peer-connections-list').getElementsByClassName("
+ "'stats-table-container').length);",
+ &count));
+ retries++;
+ }
+ EXPECT_EQ(NUMBER_OF_PEER_CONNECTIONS, count);
+
+ // Verifies each stats table having more than one rows.
+ bool result = false;
+ ASSERT_TRUE(ExecuteScriptAndExtractBool(
vrk (LEFT CHROMIUM) 2013/04/17 00:40:59 nit: this block is indented 2 spaces too far
jiayl 2013/04/17 20:43:06 Done.
+ shell2->web_contents(),
+ "var tableContainers = $('peer-connections-list')"
+ ".getElementsByClassName('stats-table-container');"
+ "var result = true;"
+ "for (var i = 0; i < tableContainers.length && result; ++i) {"
+ "var tables = tableContainers[i].getElementsByTagName('table');"
+ "for (var j = 0; j < tables.length && result; ++j) {"
+ "result = (tables[j].rows.length > 1);"
+ "}"
+ "if (!result) {"
+ "console.log(tableContainers[i].innerHTML);"
+ "}"
+ "}"
+ "window.domAutomationController.send(result);",
+ &result));
+
+ EXPECT_TRUE(result);
+}
+
} // namespace content
« no previous file with comments | « no previous file | content/browser/resources/media/stats_graph_helper.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698