Index: chrome/browser/media/webrtc_browsertest_base.cc |
diff --git a/chrome/browser/media/webrtc_browsertest_base.cc b/chrome/browser/media/webrtc_browsertest_base.cc |
index 52707ebe04de4348f6dd4b840977ad461d69447b..663678f1242ea4e410eea224dea0d82b7deaaf26 100644 |
--- a/chrome/browser/media/webrtc_browsertest_base.cc |
+++ b/chrome/browser/media/webrtc_browsertest_base.cc |
@@ -78,6 +78,41 @@ bool JavascriptErrorDetectingLogHandler(int severity, |
return false; |
} |
+// PermissionRequestObserver --------------------------------------------------- |
+ |
+// Used to observe the creation of permission prompt without responding. |
+class PermissionRequestObserver : public PermissionBubbleManager::Observer { |
+ public: |
+ explicit PermissionRequestObserver(content::WebContents* web_contents) |
+ : bubble_manager_(PermissionBubbleManager::FromWebContents(web_contents)), |
+ request_shown_(false), |
+ message_loop_runner_(new content::MessageLoopRunner) { |
+ bubble_manager_->AddObserver(this); |
+ } |
+ ~PermissionRequestObserver() override { |
+ // Safe to remove twice if it happens. |
+ bubble_manager_->RemoveObserver(this); |
+ } |
+ |
+ void Wait() { message_loop_runner_->Run(); } |
+ |
+ bool request_shown() { return request_shown_; } |
+ |
+ private: |
+ // PermissionBubbleManager::Observer |
+ void OnBubbleAdded() override { |
+ request_shown_ = true; |
+ bubble_manager_->RemoveObserver(this); |
+ message_loop_runner_->Quit(); |
+ } |
+ |
+ PermissionBubbleManager* bubble_manager_; |
+ bool request_shown_; |
+ scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PermissionRequestObserver); |
+}; |
+ |
} // namespace |
WebRtcTestBase::WebRtcTestBase(): detect_errors_in_javascript_(false) { |
@@ -98,60 +133,83 @@ WebRtcTestBase::~WebRtcTestBase() { |
} |
bool WebRtcTestBase::GetUserMediaAndAccept( |
- content::WebContents* tab_contents) const { |
+ content::WebContents* tab_contents, |
+ ExpectedPromptBehaviour expected_prompt_behaviour) const { |
return GetUserMediaWithSpecificConstraintsAndAccept( |
- tab_contents, kAudioVideoCallConstraints); |
+ tab_contents, kAudioVideoCallConstraints, expected_prompt_behaviour); |
} |
bool WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept( |
content::WebContents* tab_contents, |
- const std::string& constraints) const { |
+ const std::string& constraints, |
+ ExpectedPromptBehaviour expected_prompt_behaviour) const { |
std::string result; |
PermissionBubbleManager::FromWebContents(tab_contents) |
->set_auto_response_for_test(PermissionBubbleManager::ACCEPT_ALL); |
- GetUserMedia(tab_contents, constraints); |
+ PermissionRequestObserver permissionRequestObserver(tab_contents); |
+ GetUserMedia(tab_contents, constraints, expected_prompt_behaviour); |
EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
tab_contents->GetMainFrame(), "obtainGetUserMediaResult();", &result)); |
return kOkGotStream == result; |
} |
-void WebRtcTestBase::GetUserMediaAndDeny(content::WebContents* tab_contents) { |
- return GetUserMediaWithSpecificConstraintsAndDeny(tab_contents, |
- kAudioVideoCallConstraints); |
+void WebRtcTestBase::GetUserMediaAndDeny( |
+ content::WebContents* tab_contents, |
+ ExpectedPromptBehaviour expected_prompt_behaviour) { |
+ return GetUserMediaWithSpecificConstraintsAndDeny( |
+ tab_contents, kAudioVideoCallConstraints, expected_prompt_behaviour); |
} |
void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny( |
content::WebContents* tab_contents, |
- const std::string& constraints) const { |
+ const std::string& constraints, |
+ ExpectedPromptBehaviour expected_prompt_behaviour) const { |
std::string result; |
PermissionBubbleManager::FromWebContents(tab_contents) |
->set_auto_response_for_test(PermissionBubbleManager::DENY_ALL); |
- GetUserMedia(tab_contents, constraints); |
+ PermissionRequestObserver permissionRequestObserver(tab_contents); |
+ GetUserMedia(tab_contents, constraints, expected_prompt_behaviour); |
EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
tab_contents->GetMainFrame(), "obtainGetUserMediaResult();", &result)); |
EXPECT_EQ(kFailedWithPermissionDeniedError, result); |
} |
void WebRtcTestBase::GetUserMediaAndDismiss( |
- content::WebContents* tab_contents) const { |
+ content::WebContents* tab_contents, |
+ ExpectedPromptBehaviour expected_prompt_behaviour) const { |
std::string result; |
PermissionBubbleManager::FromWebContents(tab_contents) |
->set_auto_response_for_test(PermissionBubbleManager::DISMISS); |
- GetUserMedia(tab_contents, kAudioVideoCallConstraints); |
+ GetUserMedia(tab_contents, kAudioVideoCallConstraints, |
+ expected_prompt_behaviour); |
// A dismiss should be treated like a deny. |
EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
tab_contents->GetMainFrame(), "obtainGetUserMediaResult();", &result)); |
EXPECT_EQ(kFailedWithPermissionDismissedError, result); |
} |
-void WebRtcTestBase::GetUserMedia(content::WebContents* tab_contents, |
- const std::string& constraints) const { |
+void WebRtcTestBase::GetUserMedia( |
+ content::WebContents* tab_contents, |
+ const std::string& constraints, |
+ ExpectedPromptBehaviour expected_prompt_behaviour) const { |
+ PermissionRequestObserver permissionRequestObserver(tab_contents); |
// Request user media: this will launch the media stream info bar or bubble. |
std::string result; |
EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
tab_contents, "doGetUserMedia(" + constraints + ");", &result)); |
EXPECT_TRUE(result == "request-callback-denied" || |
result == "request-callback-granted"); |
+ switch (expected_prompt_behaviour) { |
+ case IGNORE_PROMPT_BEHAVIOUR: |
+ // Nothing |
+ break; |
+ case EXPECT_PROMPT_SHOWN: |
+ EXPECT_TRUE(permissionRequestObserver.request_shown()); |
+ break; |
+ case EXPECT_PROMPT_NOT_SHOWN: |
+ EXPECT_FALSE(permissionRequestObserver.request_shown()); |
+ break; |
+ } |
} |
content::WebContents* WebRtcTestBase::OpenPageAndGetUserMediaInNewTab( |
@@ -169,7 +227,7 @@ WebRtcTestBase::OpenPageAndGetUserMediaInNewTabWithConstraints( |
content::WebContents* new_tab = |
browser()->tab_strip_model()->GetActiveWebContents(); |
EXPECT_TRUE(GetUserMediaWithSpecificConstraintsAndAccept( |
- new_tab, constraints)); |
+ new_tab, constraints, IGNORE_PROMPT_BEHAVIOUR)); |
return new_tab; |
} |