| 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/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/infobars/infobar_service.h" | 11 #include "chrome/browser/infobars/infobar_service.h" |
| 12 #include "chrome/browser/media/media_stream_infobar_delegate.h" | 12 #include "chrome/browser/media/media_stream_infobar_delegate.h" |
| 13 #include "chrome/browser/media/webrtc_browsertest_common.h" | 13 #include "chrome/browser/media/webrtc_browsertest_common.h" |
| 14 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
| 15 #include "chrome/browser/ui/browser_tabstrip.h" | 15 #include "chrome/browser/ui/browser_tabstrip.h" |
| 16 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 16 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 17 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
| 17 #include "chrome/test/base/ui_test_utils.h" | 18 #include "chrome/test/base/ui_test_utils.h" |
| 18 #include "components/infobars/core/infobar.h" | 19 #include "components/infobars/core/infobar.h" |
| 19 #include "content/public/browser/notification_service.h" | 20 #include "content/public/browser/notification_service.h" |
| 20 #include "content/public/test/browser_test_utils.h" | 21 #include "content/public/test/browser_test_utils.h" |
| 22 #include "content/public/test/test_utils.h" |
| 21 #include "net/test/embedded_test_server/embedded_test_server.h" | 23 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 22 | 24 |
| 23 #if defined(OS_WIN) | 25 #if defined(OS_WIN) |
| 24 // For fine-grained suppression. | 26 // For fine-grained suppression. |
| 25 #include "base/win/windows_version.h" | 27 #include "base/win/windows_version.h" |
| 26 #endif | 28 #endif |
| 27 | 29 |
| 28 const char WebRtcTestBase::kAudioVideoCallConstraints[] = | 30 const char WebRtcTestBase::kAudioVideoCallConstraints[] = |
| 29 "{audio: true, video: true}"; | 31 "{audio: true, video: true}"; |
| 30 const char WebRtcTestBase::kAudioVideoCallConstraintsQVGA[] = | 32 const char WebRtcTestBase::kAudioVideoCallConstraintsQVGA[] = |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 | 98 |
| 97 void WebRtcTestBase::GetUserMediaAndAccept( | 99 void WebRtcTestBase::GetUserMediaAndAccept( |
| 98 content::WebContents* tab_contents) const { | 100 content::WebContents* tab_contents) const { |
| 99 GetUserMediaWithSpecificConstraintsAndAccept(tab_contents, | 101 GetUserMediaWithSpecificConstraintsAndAccept(tab_contents, |
| 100 kAudioVideoCallConstraints); | 102 kAudioVideoCallConstraints); |
| 101 } | 103 } |
| 102 | 104 |
| 103 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept( | 105 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept( |
| 104 content::WebContents* tab_contents, | 106 content::WebContents* tab_contents, |
| 105 const std::string& constraints) const { | 107 const std::string& constraints) const { |
| 106 infobars::InfoBar* infobar = | 108 if (!PermissionBubbleManager::Enabled()) { |
| 107 GetUserMediaAndWaitForInfoBar(tab_contents, constraints); | 109 infobars::InfoBar* infobar = |
| 108 infobar->delegate()->AsConfirmInfoBarDelegate()->Accept(); | 110 GetUserMediaAndWaitForInfoBar(tab_contents, constraints); |
| 109 CloseInfoBarInTab(tab_contents, infobar); | 111 infobar->delegate()->AsConfirmInfoBarDelegate()->Accept(); |
| 112 CloseInfoBarInTab(tab_contents, infobar); |
| 113 } else { |
| 114 GetUserMedia(tab_contents, constraints); |
| 115 LOG(INFO) << "Accept bubble"; |
| 116 PermissionBubbleManager::FromWebContents(tab_contents)->Accept(); |
| 117 content::RunAllPendingInMessageLoop(); |
| 118 } |
| 110 | 119 |
| 120 LOG(INFO) << "Wait until called"; |
| 111 // Wait for WebRTC to call the success callback. | 121 // Wait for WebRTC to call the success callback. |
| 112 const char kOkGotStream[] = "ok-got-stream"; | 122 const char kOkGotStream[] = "ok-got-stream"; |
| 113 EXPECT_TRUE(test::PollingWaitUntil("obtainGetUserMediaResult()", kOkGotStream, | 123 EXPECT_TRUE(test::PollingWaitUntil("obtainGetUserMediaResult()", kOkGotStream, |
| 114 tab_contents)); | 124 tab_contents)); |
| 125 LOG(INFO) << "DONE!!!!!"; |
| 115 } | 126 } |
| 116 | 127 |
| 117 void WebRtcTestBase::GetUserMediaAndDeny(content::WebContents* tab_contents) { | 128 void WebRtcTestBase::GetUserMediaAndDeny(content::WebContents* tab_contents) { |
| 118 return GetUserMediaWithSpecificConstraintsAndDeny(tab_contents, | 129 return GetUserMediaWithSpecificConstraintsAndDeny(tab_contents, |
| 119 kAudioVideoCallConstraints); | 130 kAudioVideoCallConstraints); |
| 120 } | 131 } |
| 121 | 132 |
| 122 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny( | 133 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny( |
| 123 content::WebContents* tab_contents, | 134 content::WebContents* tab_contents, |
| 124 const std::string& constraints) const { | 135 const std::string& constraints) const { |
| 125 infobars::InfoBar* infobar = | 136 if (!PermissionBubbleManager::Enabled()) { |
| 126 GetUserMediaAndWaitForInfoBar(tab_contents, constraints); | 137 infobars::InfoBar* infobar = |
| 127 infobar->delegate()->AsConfirmInfoBarDelegate()->Cancel(); | 138 GetUserMediaAndWaitForInfoBar(tab_contents, constraints); |
| 128 CloseInfoBarInTab(tab_contents, infobar); | 139 infobar->delegate()->AsConfirmInfoBarDelegate()->Cancel(); |
| 140 CloseInfoBarInTab(tab_contents, infobar); |
| 141 } else { |
| 142 GetUserMedia(tab_contents, constraints); |
| 143 PermissionBubbleManager::FromWebContents(tab_contents)->Deny(); |
| 144 } |
| 129 | 145 |
| 130 // Wait for WebRTC to call the fail callback. | 146 // Wait for WebRTC to call the fail callback. |
| 131 EXPECT_TRUE(test::PollingWaitUntil("obtainGetUserMediaResult()", | 147 EXPECT_TRUE(test::PollingWaitUntil("obtainGetUserMediaResult()", |
| 132 kFailedWithPermissionDeniedError, | 148 kFailedWithPermissionDeniedError, |
| 133 tab_contents)); | 149 tab_contents)); |
| 134 } | 150 } |
| 135 | 151 |
| 136 void WebRtcTestBase::GetUserMediaAndDismiss( | 152 void WebRtcTestBase::GetUserMediaAndDismiss( |
| 137 content::WebContents* tab_contents) const { | 153 content::WebContents* tab_contents) const { |
| 138 infobars::InfoBar* infobar = | 154 if (!PermissionBubbleManager::Enabled()) { |
| 139 GetUserMediaAndWaitForInfoBar(tab_contents, kAudioVideoCallConstraints); | 155 infobars::InfoBar* infobar = |
| 140 infobar->delegate()->InfoBarDismissed(); | 156 GetUserMediaAndWaitForInfoBar(tab_contents, kAudioVideoCallConstraints); |
| 141 CloseInfoBarInTab(tab_contents, infobar); | 157 infobar->delegate()->InfoBarDismissed(); |
| 158 CloseInfoBarInTab(tab_contents, infobar); |
| 159 } else { |
| 160 GetUserMedia(tab_contents, kAudioVideoCallConstraints); |
| 161 PermissionBubbleManager::FromWebContents(tab_contents)->Closing(); |
| 162 } |
| 142 | 163 |
| 143 // A dismiss should be treated like a deny. | 164 // A dismiss should be treated like a deny. |
| 144 EXPECT_TRUE(test::PollingWaitUntil("obtainGetUserMediaResult()", | 165 EXPECT_TRUE(test::PollingWaitUntil("obtainGetUserMediaResult()", |
| 145 kFailedWithPermissionDismissedError, | 166 kFailedWithPermissionDismissedError, |
| 146 tab_contents)); | 167 tab_contents)); |
| 147 } | 168 } |
| 148 | 169 |
| 149 void WebRtcTestBase::GetUserMedia(content::WebContents* tab_contents, | 170 void WebRtcTestBase::GetUserMedia(content::WebContents* tab_contents, |
| 150 const std::string& constraints) const { | 171 const std::string& constraints) const { |
| 151 // Request user media: this will launch the media stream info bar. | 172 // Request user media: this will launch the media stream info bar. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 } | 217 } |
| 197 | 218 |
| 198 content::WebContents* WebRtcTestBase::OpenTestPageAndGetUserMediaInNewTab( | 219 content::WebContents* WebRtcTestBase::OpenTestPageAndGetUserMediaInNewTab( |
| 199 const std::string& test_page) const { | 220 const std::string& test_page) const { |
| 200 return OpenPageAndGetUserMediaInNewTab( | 221 return OpenPageAndGetUserMediaInNewTab( |
| 201 embedded_test_server()->GetURL(test_page)); | 222 embedded_test_server()->GetURL(test_page)); |
| 202 } | 223 } |
| 203 | 224 |
| 204 content::WebContents* WebRtcTestBase::OpenPageAndAcceptUserMedia( | 225 content::WebContents* WebRtcTestBase::OpenPageAndAcceptUserMedia( |
| 205 const GURL& url) const { | 226 const GURL& url) const { |
| 206 content::WindowedNotificationObserver infobar_added( | 227 content::WindowedNotificationObserver nav( |
| 207 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, | 228 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
| 208 content::NotificationService::AllSources()); | 229 content::NotificationService::AllSources()); |
| 209 | 230 |
| 210 ui_test_utils::NavigateToURL(browser(), url); | 231 ui_test_utils::NavigateToURL(browser(), url); |
| 211 | 232 |
| 212 infobar_added.Wait(); | 233 nav.Wait(); |
| 213 | 234 |
| 214 content::WebContents* tab_contents = | 235 content::WebContents* tab_contents = |
| 215 browser()->tab_strip_model()->GetActiveWebContents(); | 236 browser()->tab_strip_model()->GetActiveWebContents(); |
| 216 content::Details<infobars::InfoBar::AddedDetails> details( | 237 if (!PermissionBubbleManager::Enabled()) { |
| 217 infobar_added.details()); | 238 content::Details<infobars::InfoBar::AddedDetails> details( |
| 218 infobars::InfoBar* infobar = details.ptr(); | 239 nav.details()); |
| 219 EXPECT_TRUE(infobar); | 240 infobars::InfoBar* infobar = details.ptr(); |
| 220 infobar->delegate()->AsMediaStreamInfoBarDelegate()->Accept(); | 241 EXPECT_TRUE(infobar); |
| 242 infobar->delegate()->AsMediaStreamInfoBarDelegate()->Accept(); |
| 221 | 243 |
| 222 CloseInfoBarInTab(tab_contents, infobar); | 244 CloseInfoBarInTab(tab_contents, infobar); |
| 245 } else { |
| 246 PermissionBubbleManager* mgr = |
| 247 PermissionBubbleManager::FromWebContents(tab_contents); |
| 248 mgr->Closing(); |
| 249 } |
| 223 return tab_contents; | 250 return tab_contents; |
| 224 } | 251 } |
| 225 | 252 |
| 226 void WebRtcTestBase::CloseInfoBarInTab(content::WebContents* tab_contents, | 253 void WebRtcTestBase::CloseInfoBarInTab(content::WebContents* tab_contents, |
| 227 infobars::InfoBar* infobar) const { | 254 infobars::InfoBar* infobar) const { |
| 228 content::WindowedNotificationObserver infobar_removed( | 255 content::WindowedNotificationObserver infobar_removed( |
| 229 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 256 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
| 230 content::NotificationService::AllSources()); | 257 content::NotificationService::AllSources()); |
| 231 | 258 |
| 232 InfoBarService* infobar_service = | 259 InfoBarService* infobar_service = |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 #endif | 388 #endif |
| 362 } | 389 } |
| 363 | 390 |
| 364 bool WebRtcTestBase::OnWin8() const { | 391 bool WebRtcTestBase::OnWin8() const { |
| 365 #if defined(OS_WIN) | 392 #if defined(OS_WIN) |
| 366 return base::win::GetVersion() > base::win::VERSION_WIN7; | 393 return base::win::GetVersion() > base::win::VERSION_WIN7; |
| 367 #else | 394 #else |
| 368 return false; | 395 return false; |
| 369 #endif | 396 #endif |
| 370 } | 397 } |
| OLD | NEW |