13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/files/file_path.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/path_service.h"
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/grit/content_resources.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/public/browser/web_contents.h"
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/public/common/content_paths.h"
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/public/test/browser_test_utils.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test_utils.h"
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h"
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "net/base/filename_util.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/resources/grit/webui_resources.h"
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace content {
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebUIResourceBrowserTest : public ContentBrowserTest {
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public:
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  WebUIResourceBrowserTest() {}
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual ~WebUIResourceBrowserTest() {}
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Runs all test functions in |file|, waiting for them to complete.
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void RunTest(const base::FilePath& file) {
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ASSERT_TRUE(PathExists(file));
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    NavigateToURL(shell(), net::FilePathToFileURL(file));
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    content::WebContents* web_contents = shell()->web_contents();
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ASSERT_TRUE(web_contents);
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_TRUE(ExecuteWebUIResourceTest(web_contents, include_libraries_));
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void RunMediaInternalsTest(const base::FilePath::CharType* file) {
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    AddLibrary(IDR_WEBUI_JS_CR);
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    AddLibrary(IDR_MEDIA_INTERNALS_JS);
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    base::FilePath path;
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    PathService::Get(DIR_TEST_DATA, &path);
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    RunTest(path.Append(FILE_PATH_LITERAL("media"))
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        .Append(FILE_PATH_LITERAL("webui"))
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        .Append(file));
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Queues the library corresponding to |resource_id| for injection into the
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // test. The code injection is performed post-load, so any common test
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // initialization that depends on the library should be placed in a setUp
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // function.
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void AddLibrary(int resource_id) {
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    include_libraries_.push_back(resource_id);
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private:
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Resource IDs for internal javascript libraries to inject into the test.
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<int> include_libraries_;
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebUIResourceBrowserTest);
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)};
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebUIResourceBrowserTest, MediaInternals_Integration) {
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  RunMediaInternalsTest(FILE_PATH_LITERAL("integration_test.html"));
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebUIResourceBrowserTest, MediaInternals_PlayerInfo) {
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  RunMediaInternalsTest(FILE_PATH_LITERAL("player_info_test.html"));
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebUIResourceBrowserTest, MediaInternals_Manager) {
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  RunMediaInternalsTest(FILE_PATH_LITERAL("manager_test.html"));
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}  // namespace content
74