OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/media/webrtc_browsertest_base.h" | 5 #include "chrome/browser/media/webrtc_browsertest_base.h" |
6 | 6 |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "chrome/browser/chrome_notification_types.h" | 8 #include "chrome/browser/chrome_notification_types.h" |
9 #include "chrome/browser/infobars/infobar.h" | 9 #include "chrome/browser/infobars/infobar.h" |
10 #include "chrome/browser/infobars/infobar_service.h" | 10 #include "chrome/browser/infobars/infobar_service.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 | 31 |
32 void WebRtcTestBase::GetUserMediaAndAccept( | 32 void WebRtcTestBase::GetUserMediaAndAccept( |
33 content::WebContents* tab_contents) const { | 33 content::WebContents* tab_contents) const { |
34 GetUserMediaWithSpecificConstraintsAndAccept(tab_contents, | 34 GetUserMediaWithSpecificConstraintsAndAccept(tab_contents, |
35 kAudioVideoCallConstraints); | 35 kAudioVideoCallConstraints); |
36 } | 36 } |
37 | 37 |
38 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept( | 38 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept( |
39 content::WebContents* tab_contents, | 39 content::WebContents* tab_contents, |
40 const std::string& constraints) const { | 40 const std::string& constraints) const { |
41 InfoBar* infobar = GetUserMediaAndWaitForInfoBar(tab_contents, constraints); | 41 MediaStreamInfoBarDelegate* infobar = |
42 infobar->delegate()->AsConfirmInfoBarDelegate()->Accept(); | 42 GetUserMediaAndWaitForInfoBar(tab_contents, constraints); |
| 43 infobar->Accept(); |
43 CloseInfoBarInTab(tab_contents, infobar); | 44 CloseInfoBarInTab(tab_contents, infobar); |
44 | 45 |
45 // Wait for WebRTC to call the success callback. | 46 // Wait for WebRTC to call the success callback. |
46 const char kOkGotStream[] = "ok-got-stream"; | 47 const char kOkGotStream[] = "ok-got-stream"; |
47 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()", kOkGotStream, | 48 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()", kOkGotStream, |
48 tab_contents)); | 49 tab_contents)); |
49 } | 50 } |
50 | 51 |
51 void WebRtcTestBase::GetUserMediaAndDeny(content::WebContents* tab_contents) { | 52 void WebRtcTestBase::GetUserMediaAndDeny(content::WebContents* tab_contents) { |
52 return GetUserMediaWithSpecificConstraintsAndDeny(tab_contents, | 53 return GetUserMediaWithSpecificConstraintsAndDeny(tab_contents, |
53 kAudioVideoCallConstraints); | 54 kAudioVideoCallConstraints); |
54 } | 55 } |
55 | 56 |
56 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny( | 57 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny( |
57 content::WebContents* tab_contents, | 58 content::WebContents* tab_contents, |
58 const std::string& constraints) const { | 59 const std::string& constraints) const { |
59 InfoBar* infobar = GetUserMediaAndWaitForInfoBar(tab_contents, constraints); | 60 MediaStreamInfoBarDelegate* infobar = |
60 infobar->delegate()->AsConfirmInfoBarDelegate()->Cancel(); | 61 GetUserMediaAndWaitForInfoBar(tab_contents, constraints); |
| 62 infobar->Cancel(); |
61 CloseInfoBarInTab(tab_contents, infobar); | 63 CloseInfoBarInTab(tab_contents, infobar); |
62 | 64 |
63 // Wait for WebRTC to call the fail callback. | 65 // Wait for WebRTC to call the fail callback. |
64 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()", | 66 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()", |
65 kFailedWithPermissionDeniedError, tab_contents)); | 67 kFailedWithPermissionDeniedError, tab_contents)); |
66 } | 68 } |
67 | 69 |
68 void WebRtcTestBase::GetUserMediaAndDismiss( | 70 void WebRtcTestBase::GetUserMediaAndDismiss( |
69 content::WebContents* tab_contents) const { | 71 content::WebContents* tab_contents) const { |
70 InfoBar* infobar = | 72 MediaStreamInfoBarDelegate* infobar = |
71 GetUserMediaAndWaitForInfoBar(tab_contents, kAudioVideoCallConstraints); | 73 GetUserMediaAndWaitForInfoBar(tab_contents, kAudioVideoCallConstraints); |
72 infobar->delegate()->InfoBarDismissed(); | 74 infobar->InfoBarDismissed(); |
73 CloseInfoBarInTab(tab_contents, infobar); | 75 CloseInfoBarInTab(tab_contents, infobar); |
74 | 76 |
75 // A dismiss should be treated like a deny. | 77 // A dismiss should be treated like a deny. |
76 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()", | 78 EXPECT_TRUE(PollingWaitUntil("obtainGetUserMediaResult()", |
77 kFailedWithPermissionDeniedError, tab_contents)); | 79 kFailedWithPermissionDeniedError, tab_contents)); |
78 } | 80 } |
79 | 81 |
80 void WebRtcTestBase::GetUserMedia(content::WebContents* tab_contents, | 82 void WebRtcTestBase::GetUserMedia(content::WebContents* tab_contents, |
81 const std::string& constraints) const { | 83 const std::string& constraints) const { |
82 // TODO(phoglund): temporary debugging measure for crbug.com/281268. | 84 // TODO(phoglund): temporary debugging measure for crbug.com/281268. |
83 std::string javascript = | 85 std::string javascript = |
84 "if (typeof(doGetUserMedia) != typeof(Function)) {\n" | 86 "if (typeof(doGetUserMedia) != typeof(Function)) {\n" |
85 " console.log('hitting weird js load bug: diagnosing...');\n" | 87 " console.log('hitting weird js load bug: diagnosing...');\n" |
86 " for (var v in window) {\n" | 88 " for (var v in window) {\n" |
87 " if (window.hasOwnProperty(v)) console.log(v);\n" | 89 " if (window.hasOwnProperty(v)) console.log(v);\n" |
88 " }\n" | 90 " }\n" |
89 " window.domAutomationController.send('failed!');\n" | 91 " window.domAutomationController.send('failed!');\n" |
90 "}\n" | 92 "}\n" |
91 "else\n" | 93 "else\n" |
92 " doGetUserMedia(" + constraints + ");"; | 94 " doGetUserMedia(" + constraints + ");"; |
93 // Request user media: this will launch the media stream info bar. | 95 // Request user media: this will launch the media stream info bar. |
94 std::string result; | 96 std::string result; |
95 EXPECT_TRUE(content::ExecuteScriptAndExtractString( | 97 EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
96 tab_contents, javascript, &result)); | 98 tab_contents, javascript, &result)); |
97 EXPECT_EQ("ok-requested", result); | 99 EXPECT_EQ("ok-requested", result); |
98 } | 100 } |
99 | 101 |
100 InfoBar* WebRtcTestBase::GetUserMediaAndWaitForInfoBar( | 102 MediaStreamInfoBarDelegate* WebRtcTestBase::GetUserMediaAndWaitForInfoBar( |
101 content::WebContents* tab_contents, | 103 content::WebContents* tab_contents, |
102 const std::string& constraints) const { | 104 const std::string& constraints) const { |
103 content::WindowedNotificationObserver infobar_added( | 105 content::WindowedNotificationObserver infobar_added( |
104 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, | 106 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
105 content::NotificationService::AllSources()); | 107 content::NotificationService::AllSources()); |
106 | 108 |
107 // Request user media: this will launch the media stream info bar. | 109 // Request user media: this will launch the media stream info bar. |
108 GetUserMedia(tab_contents, constraints); | 110 GetUserMedia(tab_contents, constraints); |
109 | 111 |
110 // Wait for the bar to pop up, then return it. | 112 // Wait for the bar to pop up, then return it. |
111 infobar_added.Wait(); | 113 infobar_added.Wait(); |
112 content::Details<InfoBar::AddedDetails> details(infobar_added.details()); | 114 content::Details<InfoBar::AddedDetails> details(infobar_added.details()); |
113 EXPECT_TRUE(details->delegate()->AsMediaStreamInfoBarDelegate()); | 115 MediaStreamInfoBarDelegate* infobar = details->AsMediaStreamInfoBarDelegate(); |
114 return details.ptr(); | 116 EXPECT_TRUE(infobar); |
| 117 return infobar; |
115 } | 118 } |
116 | 119 |
117 content::WebContents* WebRtcTestBase::OpenPageAndAcceptUserMedia( | 120 content::WebContents* WebRtcTestBase::OpenPageAndAcceptUserMedia( |
118 const GURL& url) const { | 121 const GURL& url) const { |
119 content::WindowedNotificationObserver infobar_added( | 122 content::WindowedNotificationObserver infobar_added( |
120 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, | 123 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
121 content::NotificationService::AllSources()); | 124 content::NotificationService::AllSources()); |
122 | 125 |
123 ui_test_utils::NavigateToURL(browser(), url); | 126 ui_test_utils::NavigateToURL(browser(), url); |
124 | 127 |
125 infobar_added.Wait(); | 128 infobar_added.Wait(); |
126 | 129 |
127 content::WebContents* tab_contents = | 130 content::WebContents* tab_contents = |
128 browser()->tab_strip_model()->GetActiveWebContents(); | 131 browser()->tab_strip_model()->GetActiveWebContents(); |
129 content::Details<InfoBar::AddedDetails> details(infobar_added.details()); | 132 content::Details<InfoBar::AddedDetails> details(infobar_added.details()); |
130 InfoBar* infobar = details.ptr(); | 133 MediaStreamInfoBarDelegate* infobar = |
| 134 details->AsMediaStreamInfoBarDelegate(); |
131 EXPECT_TRUE(infobar); | 135 EXPECT_TRUE(infobar); |
132 infobar->delegate()->AsMediaStreamInfoBarDelegate()->Accept(); | 136 infobar->Accept(); |
133 | 137 |
134 CloseInfoBarInTab(tab_contents, infobar); | 138 CloseInfoBarInTab(tab_contents, infobar); |
135 return tab_contents; | 139 return tab_contents; |
136 } | 140 } |
137 | 141 |
138 void WebRtcTestBase::CloseInfoBarInTab( | 142 void WebRtcTestBase::CloseInfoBarInTab( |
139 content::WebContents* tab_contents, | 143 content::WebContents* tab_contents, |
140 InfoBar* infobar) const { | 144 MediaStreamInfoBarDelegate* infobar) const { |
141 content::WindowedNotificationObserver infobar_removed( | 145 content::WindowedNotificationObserver infobar_removed( |
142 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 146 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
143 content::NotificationService::AllSources()); | 147 content::NotificationService::AllSources()); |
144 | 148 |
145 InfoBarService* infobar_service = | 149 InfoBarService* infobar_service = |
146 InfoBarService::FromWebContents(tab_contents); | 150 InfoBarService::FromWebContents(tab_contents); |
147 infobar_service->RemoveInfoBar(infobar); | 151 infobar_service->RemoveInfoBar(infobar); |
148 | 152 |
149 infobar_removed.Wait(); | 153 infobar_removed.Wait(); |
150 } | 154 } |
(...skipping 12 matching lines...) Expand all Loading... |
163 // The peer connection server lets our two tabs find each other and talk to | 167 // The peer connection server lets our two tabs find each other and talk to |
164 // each other (e.g. it is the application-specific "signaling solution"). | 168 // each other (e.g. it is the application-specific "signaling solution"). |
165 void WebRtcTestBase::ConnectToPeerConnectionServer( | 169 void WebRtcTestBase::ConnectToPeerConnectionServer( |
166 const std::string& peer_name, | 170 const std::string& peer_name, |
167 content::WebContents* tab_contents) const { | 171 content::WebContents* tab_contents) const { |
168 std::string javascript = base::StringPrintf( | 172 std::string javascript = base::StringPrintf( |
169 "connect('http://localhost:%s', '%s');", | 173 "connect('http://localhost:%s', '%s');", |
170 PeerConnectionServerRunner::kDefaultPort, peer_name.c_str()); | 174 PeerConnectionServerRunner::kDefaultPort, peer_name.c_str()); |
171 EXPECT_EQ("ok-connected", ExecuteJavascript(javascript, tab_contents)); | 175 EXPECT_EQ("ok-connected", ExecuteJavascript(javascript, tab_contents)); |
172 } | 176 } |
OLD | NEW |