| 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;
|
| }
|
|
|
|
|