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 9750073897187630fe87bf15cf118cb1fa566766..cbdcb65e8455e05f49f4305a5b31b44a8e905763 100644 |
--- a/content/browser/media/webrtc_internals_browsertest.cc |
+++ b/content/browser/media/webrtc_internals_browsertest.cc |
@@ -116,6 +116,26 @@ 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) |
@@ -166,6 +186,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 +224,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()); |
@@ -715,4 +789,26 @@ 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); |
+} |
} // namespace content |