summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/media/webrtc_internals_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/media/webrtc_internals_browsertest.cc')
-rw-r--r--chromium/content/browser/media/webrtc_internals_browsertest.cc179
1 files changed, 163 insertions, 16 deletions
diff --git a/chromium/content/browser/media/webrtc_internals_browsertest.cc b/chromium/content/browser/media/webrtc_internals_browsertest.cc
index 0d279b3075b..7b352d66b24 100644
--- a/chromium/content/browser/media/webrtc_internals_browsertest.cc
+++ b/chromium/content/browser/media/webrtc_internals_browsertest.cc
@@ -9,9 +9,10 @@
#include "base/values.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
-#include "content/test/content_browser_test.h"
-#include "content/test/content_browser_test_utils.h"
+#include "media/base/media_switches.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
using std::string;
@@ -116,19 +117,39 @@ class PeerConnectionEntry {
std::map<string, StatsMap> stats_;
};
+class UserMediaRequestEntry {
+ public:
+ UserMediaRequestEntry(int pid,
+ int rid,
+ const std::string& origin,
+ const std::string& audio_constraints,
+ const std::string& video_constraints)
+ : pid(pid),
+ rid(rid),
+ origin(origin),
+ audio_constraints(audio_constraints),
+ video_constraints(video_constraints) {}
+
+ int pid;
+ int rid;
+ std::string origin;
+ std::string audio_constraints;
+ std::string video_constraints;
+};
+
static const int64 FAKE_TIME_STAMP = 3600000;
#if defined(OS_WIN)
// All tests are flaky on Windows: crbug.com/277322.
-#define MAYBE_WebRTCInternalsBrowserTest DISABLED_WebRTCInternalsBrowserTest
+#define MAYBE_WebRtcInternalsBrowserTest DISABLED_WebRtcInternalsBrowserTest
#else
-#define MAYBE_WebRTCInternalsBrowserTest WebRTCInternalsBrowserTest
+#define MAYBE_WebRtcInternalsBrowserTest WebRtcInternalsBrowserTest
#endif
-class MAYBE_WebRTCInternalsBrowserTest: public ContentBrowserTest {
+class MAYBE_WebRtcInternalsBrowserTest: public ContentBrowserTest {
public:
- MAYBE_WebRTCInternalsBrowserTest() {}
- virtual ~MAYBE_WebRTCInternalsBrowserTest() {}
+ MAYBE_WebRtcInternalsBrowserTest() {}
+ virtual ~MAYBE_WebRtcInternalsBrowserTest() {}
virtual void SetUpOnMainThread() OVERRIDE {
// We need fake devices in this test since we want to run on naked VMs. We
@@ -145,7 +166,7 @@ class MAYBE_WebRTCInternalsBrowserTest: public ContentBrowserTest {
}
void ExpectTitle(const std::string& expected_title) const {
- base::string16 expected_title16(ASCIIToUTF16(expected_title));
+ base::string16 expected_title16(base::ASCIIToUTF16(expected_title));
TitleWatcher title_watcher(shell()->web_contents(), expected_title16);
EXPECT_EQ(expected_title16, title_watcher.WaitAndGetTitle());
}
@@ -166,6 +187,24 @@ class MAYBE_WebRTCInternalsBrowserTest: public ContentBrowserTest {
ASSERT_TRUE(ExecuteJavascript("removePeerConnection(" + ss.str() + ");"));
}
+ // Execute the javascript of addGetUserMedia.
+ void ExecuteAddGetUserMediaJs(const UserMediaRequestEntry& request) {
+ std::stringstream ss;
+ ss << "{pid:" << request.pid << ", rid:" << request.rid << ", origin:'"
+ << request.origin << "', audio:'" << request.audio_constraints
+ << "', video:'" << request.video_constraints << "'}";
+
+ ASSERT_TRUE(ExecuteJavascript("addGetUserMedia(" + ss.str() + ");"));
+ }
+
+ // Execute the javascript of removeGetUserMediaForRenderer.
+ void ExecuteRemoveGetUserMediaForRendererJs(int rid) {
+ std::stringstream ss;
+ ss << "{rid:" << rid << "}";
+ ASSERT_TRUE(
+ ExecuteJavascript("removeGetUserMediaForRenderer(" + ss.str() + ");"));
+ }
+
// Verifies that the DOM element with id |id| exists.
void VerifyElementWithId(const string& id) {
bool result = false;
@@ -186,6 +225,42 @@ class MAYBE_WebRTCInternalsBrowserTest: public ContentBrowserTest {
EXPECT_TRUE(result);
}
+ // Verifies the JS Array of userMediaRequests matches |requests|.
+ void VerifyUserMediaRequest(
+ const std::vector<UserMediaRequestEntry>& requests) {
+ string json_requests;
+ ASSERT_TRUE(ExecuteScriptAndExtractString(
+ shell()->web_contents(),
+ "window.domAutomationController.send("
+ "JSON.stringify(userMediaRequests));",
+ &json_requests));
+ scoped_ptr<base::Value> value_requests;
+ value_requests.reset(base::JSONReader::Read(json_requests));
+
+ EXPECT_EQ(base::Value::TYPE_LIST, value_requests->GetType());
+
+ base::ListValue* list_request =
+ static_cast<base::ListValue*>(value_requests.get());
+ EXPECT_EQ(requests.size(), list_request->GetSize());
+
+ for (size_t i = 0; i < requests.size(); ++i) {
+ base::DictionaryValue* dict = NULL;
+ ASSERT_TRUE(list_request->GetDictionary(i, &dict));
+ int pid, rid;
+ std::string origin, audio, video;
+ ASSERT_TRUE(dict->GetInteger("pid", &pid));
+ ASSERT_TRUE(dict->GetInteger("rid", &rid));
+ ASSERT_TRUE(dict->GetString("origin", &origin));
+ ASSERT_TRUE(dict->GetString("audio", &audio));
+ ASSERT_TRUE(dict->GetString("video", &video));
+ EXPECT_EQ(requests[i].pid, pid);
+ EXPECT_EQ(requests[i].rid, rid);
+ EXPECT_EQ(requests[i].origin, origin);
+ EXPECT_EQ(requests[i].audio_constraints, audio);
+ EXPECT_EQ(requests[i].video_constraints, video);
+ }
+ }
+
// Verifies that DOM for |pc| is correctly created with the right content.
void VerifyPeerConnectionEntry(const PeerConnectionEntry& pc) {
VerifyElementWithId(pc.getIdString());
@@ -402,7 +477,7 @@ class MAYBE_WebRTCInternalsBrowserTest: public ContentBrowserTest {
}
};
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest,
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest,
AddAndRemovePeerConnection) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -424,7 +499,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest,
VerifyNoElementWithId(pc_2.getIdString());
}
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest,
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest,
UpdateAllPeerConnections) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -442,7 +517,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest,
VerifyPeerConnectionEntry(pc_1);
}
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, UpdatePeerConnection) {
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest, UpdatePeerConnection) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -479,7 +554,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, UpdatePeerConnection) {
}
// Tests that adding random named stats updates the dataSeries and graphs.
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, AddStats) {
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest, AddStats) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -505,7 +580,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, AddStats) {
}
// Tests that the bandwidth estimation values are drawn on a single graph.
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, BweCompoundGraph) {
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest, BweCompoundGraph) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -545,7 +620,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, BweCompoundGraph) {
// Tests that the total packet/byte count is converted to count per second,
// and the converted data is drawn.
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, ConvertedGraphs) {
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest, ConvertedGraphs) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -587,7 +662,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, ConvertedGraphs) {
// Timing out on ARM linux bot: http://crbug.com/238490
// Disabling due to failure on Linux, Mac, Win: http://crbug.com/272413
// Sanity check of the page content under a real PeerConnection call.
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest,
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest,
DISABLED_WithRealPeerConnectionCall) {
// Start a peerconnection call in the first window.
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
@@ -670,7 +745,7 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest,
EXPECT_GT(count, 0);
}
-IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, CreatePageDump) {
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest, CreatePageDump) {
GURL url("chrome://webrtc-internals");
NavigateToURL(shell(), url);
@@ -715,4 +790,76 @@ IN_PROC_BROWSER_TEST_F(MAYBE_WebRTCInternalsBrowserTest, CreatePageDump) {
VerifyStatsDump(dump.get(), pc_0, type, id, stats);
}
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest, UpdateGetUserMedia) {
+ GURL url("chrome://webrtc-internals");
+ NavigateToURL(shell(), url);
+
+ UserMediaRequestEntry request1(1, 1, "origin", "ac", "vc");
+ UserMediaRequestEntry request2(2, 2, "origin2", "ac2", "vc2");
+ ExecuteAddGetUserMediaJs(request1);
+ ExecuteAddGetUserMediaJs(request2);
+
+ std::vector<UserMediaRequestEntry> list;
+ list.push_back(request1);
+ list.push_back(request2);
+ VerifyUserMediaRequest(list);
+
+ ExecuteRemoveGetUserMediaForRendererJs(1);
+ list.erase(list.begin());
+ VerifyUserMediaRequest(list);
+
+ ExecuteRemoveGetUserMediaForRendererJs(2);
+ list.erase(list.begin());
+ VerifyUserMediaRequest(list);
+}
+
+// Tests that the received propagation delta values are converted and drawn
+// correctly.
+IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcInternalsBrowserTest,
+ ReceivedPropagationDelta) {
+ GURL url("chrome://webrtc-internals");
+ NavigateToURL(shell(), url);
+
+ PeerConnectionEntry pc(1, 0);
+ ExecuteAddPeerConnectionJs(pc);
+
+ StatsUnit stats = {FAKE_TIME_STAMP};
+ stats.values["googReceivedPacketGroupArrivalTimeDebug"] =
+ "[1000, 1100, 1200]";
+ stats.values["googReceivedPacketGroupPropagationDeltaDebug"] =
+ "[10, 20, 30]";
+ const string stats_type = "bwe";
+ const string stats_id = "videobwe";
+ ExecuteAndVerifyAddStats(pc, stats_type, stats_id, stats);
+
+ string graph_id = pc.getIdString() + "-" + stats_id +
+ "-googReceivedPacketGroupPropagationDeltaDebug";
+ string data_series_id =
+ stats_id + "-googReceivedPacketGroupPropagationDeltaDebug";
+ bool result = false;
+ // Verify that the graph exists.
+ ASSERT_TRUE(ExecuteScriptAndExtractBool(
+ shell()->web_contents(),
+ "window.domAutomationController.send("
+ " graphViews['" + graph_id + "'] != null)",
+ &result));
+ EXPECT_TRUE(result);
+
+ // Verify that the graph contains multiple data points.
+ int count = 0;
+ ASSERT_TRUE(ExecuteScriptAndExtractInt(
+ shell()->web_contents(),
+ "window.domAutomationController.send("
+ " graphViews['" + graph_id + "'].getDataSeriesCount())",
+ &count));
+ EXPECT_EQ(1, count);
+ ASSERT_TRUE(ExecuteScriptAndExtractInt(
+ shell()->web_contents(),
+ "window.domAutomationController.send("
+ " peerConnectionDataStore['" + pc.getIdString() + "']" +
+ " .getDataSeries('" + data_series_id + "').getCount())",
+ &count));
+ EXPECT_EQ(3, count);
+}
+
} // namespace content