Home | History | Annotate | Download | only in media
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_MEDIA_WEBRTC_BROWSERTEST_BASE_H_
      6 #define CHROME_BROWSER_MEDIA_WEBRTC_BROWSERTEST_BASE_H_
      7 
      8 #include <string>
      9 
     10 #include "chrome/test/base/in_process_browser_test.h"
     11 
     12 class InfoBar;
     13 
     14 namespace content {
     15 class WebContents;
     16 }
     17 
     18 // Base class for WebRTC browser tests with useful primitives for interacting
     19 // getUserMedia. We use inheritance here because it makes the test code look
     20 // as clean as it can be.
     21 class WebRtcTestBase : public InProcessBrowserTest {
     22  protected:
     23   // Typical constraints.
     24   static const char kAudioVideoCallConstraints[];
     25   static const char kAudioOnlyCallConstraints[];
     26   static const char kVideoOnlyCallConstraints[];
     27 
     28   static const char kFailedWithPermissionDeniedError[];
     29 
     30   WebRtcTestBase();
     31   virtual ~WebRtcTestBase();
     32 
     33   // These all require that the loaded page fulfills the public interface in
     34   // chrome/test/data/webrtc/message_handling.js.
     35   void GetUserMediaAndAccept(content::WebContents* tab_contents) const;
     36   void GetUserMediaWithSpecificConstraintsAndAccept(
     37       content::WebContents* tab_contents,
     38       const std::string& constraints) const;
     39   void GetUserMediaAndDeny(content::WebContents* tab_contents);
     40   void GetUserMediaWithSpecificConstraintsAndDeny(
     41       content::WebContents* tab_contents,
     42       const std::string& constraints) const;
     43   void GetUserMediaAndDismiss(content::WebContents* tab_contents) const;
     44   void GetUserMedia(content::WebContents* tab_contents,
     45                     const std::string& constraints) const;
     46 
     47   // Convenience method which opens the page at url, calls GetUserMediaAndAccept
     48   // and returns the new tab.
     49   content::WebContents* OpenPageAndGetUserMediaInNewTab(const GURL& url) const;
     50 
     51   // Opens the page at |url| where getUserMedia has been invoked through other
     52   // means and accepts the user media request.
     53   content::WebContents* OpenPageAndAcceptUserMedia(const GURL& url) const;
     54 
     55   void ConnectToPeerConnectionServer(const std::string& peer_name,
     56                                      content::WebContents* tab_contents) const;
     57   std::string ExecuteJavascript(const std::string& javascript,
     58                                 content::WebContents* tab_contents) const;
     59 
     60   // Call this to enable monitoring of javascript errors for this test method.
     61   // This will only work if the tests are run sequentially by the test runner
     62   // (i.e. with --test-launcher-developer-mode or --test-launcher-jobs=1).
     63   void DetectErrorsInJavaScript();
     64 
     65  private:
     66   void CloseInfoBarInTab(content::WebContents* tab_contents,
     67                          InfoBar* infobar) const;
     68   InfoBar* GetUserMediaAndWaitForInfoBar(content::WebContents* tab_contents,
     69                                          const std::string& constraints) const;
     70 
     71   bool detect_errors_in_javascript_;
     72 
     73   DISALLOW_COPY_AND_ASSIGN(WebRtcTestBase);
     74 };
     75 
     76 #endif  // CHROME_BROWSER_MEDIA_WEBRTC_BROWSERTEST_BASE_H_
     77