Make castv2 performance test work.
[chromium-blink-merge.git] / chrome / browser / apps / guest_view / app_view_browsertest.cc
blob8ddc15d7d40942de10f6b32c8146a387422f5cc2
1 // Copyright 2014 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.
5 #include "base/strings/stringprintf.h"
6 #include "chrome/browser/apps/app_browsertest_util.h"
7 #include "content/public/browser/notification_service.h"
8 #include "content/public/browser/render_process_host.h"
9 #include "content/public/test/browser_test_utils.h"
10 #include "content/public/test/test_utils.h"
11 #include "extensions/browser/guest_view/guest_view_manager.h"
12 #include "extensions/browser/guest_view/guest_view_manager_factory.h"
13 #include "extensions/common/switches.h"
14 #include "extensions/test/extension_test_message_listener.h"
15 #include "net/test/embedded_test_server/embedded_test_server.h"
16 #include "net/test/embedded_test_server/http_request.h"
17 #include "net/test/embedded_test_server/http_response.h"
19 namespace {
21 class TestGuestViewManager : public extensions::GuestViewManager {
22 public:
23 explicit TestGuestViewManager(content::BrowserContext* context) :
24 extensions::GuestViewManager(context),
25 web_contents_(NULL) {}
27 content::WebContents* WaitForGuestCreated() {
28 if (web_contents_)
29 return web_contents_;
31 message_loop_runner_ = new content::MessageLoopRunner;
32 message_loop_runner_->Run();
33 return web_contents_;
36 private:
37 // GuestViewManager override:
38 void AddGuest(int guest_instance_id,
39 content::WebContents* guest_web_contents) override {
40 extensions::GuestViewManager::AddGuest(
41 guest_instance_id, guest_web_contents);
42 web_contents_ = guest_web_contents;
44 if (message_loop_runner_.get())
45 message_loop_runner_->Quit();
48 content::WebContents* web_contents_;
49 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
52 // Test factory for creating test instances of GuestViewManager.
53 class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory {
54 public:
55 TestGuestViewManagerFactory() :
56 test_guest_view_manager_(NULL) {}
58 ~TestGuestViewManagerFactory() override {}
60 extensions::GuestViewManager* CreateGuestViewManager(
61 content::BrowserContext* context) override {
62 return GetManager(context);
65 TestGuestViewManager* GetManager(content::BrowserContext* context) {
66 if (!test_guest_view_manager_) {
67 test_guest_view_manager_ = new TestGuestViewManager(context);
69 return test_guest_view_manager_;
72 private:
73 TestGuestViewManager* test_guest_view_manager_;
75 DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory);
78 } // namespace
80 class AppViewTest : public extensions::PlatformAppBrowserTest {
81 public:
82 AppViewTest() {
83 extensions::GuestViewManager::set_factory_for_testing(&factory_);
86 TestGuestViewManager* GetGuestViewManager() {
87 return factory_.GetManager(browser()->profile());
90 enum TestServer {
91 NEEDS_TEST_SERVER,
92 NO_TEST_SERVER
95 void TestHelper(const std::string& test_name,
96 const std::string& app_location,
97 const std::string& app_to_embed,
98 TestServer test_server) {
99 // For serving guest pages.
100 if (test_server == NEEDS_TEST_SERVER) {
101 if (!StartEmbeddedTestServer()) {
102 LOG(ERROR) << "FAILED TO START TEST SERVER.";
103 return;
107 LoadAndLaunchPlatformApp(app_location.c_str(), "Launched");
109 // Flush any pending events to make sure we start with a clean slate.
110 content::RunAllPendingInMessageLoop();
112 content::WebContents* embedder_web_contents =
113 GetFirstAppWindowWebContents();
114 if (!embedder_web_contents) {
115 LOG(ERROR) << "UNABLE TO FIND EMBEDDER WEB CONTENTS.";
116 return;
119 ExtensionTestMessageListener done_listener("TEST_PASSED", false);
120 done_listener.set_failure_message("TEST_FAILED");
121 if (!content::ExecuteScript(
122 embedder_web_contents,
123 base::StringPrintf("runTest('%s', '%s')",
124 test_name.c_str(),
125 app_to_embed.c_str()))) {
126 LOG(ERROR) << "UNABLE TO START TEST.";
127 return;
129 ASSERT_TRUE(done_listener.WaitUntilSatisfied());
132 private:
133 void SetUpCommandLine(base::CommandLine* command_line) override {
134 extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line);
137 TestGuestViewManagerFactory factory_;
140 // Tests that <appview> is able to navigate to another installed app.
141 IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewWithUndefinedDataShouldSucceed) {
142 const extensions::Extension* skeleton_app =
143 InstallPlatformApp("app_view/shim/skeleton");
144 TestHelper("testAppViewWithUndefinedDataShouldSucceed",
145 "app_view/shim",
146 skeleton_app->id(),
147 NO_TEST_SERVER);
150 // Tests that <appview> correctly processes parameters passed on connect.
151 IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewRefusedDataShouldFail) {
152 const extensions::Extension* skeleton_app =
153 InstallPlatformApp("app_view/shim/skeleton");
154 TestHelper("testAppViewRefusedDataShouldFail",
155 "app_view/shim",
156 skeleton_app->id(),
157 NO_TEST_SERVER);
160 // Tests that <appview> correctly processes parameters passed on connect.
161 IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewGoodDataShouldSucceed) {
162 const extensions::Extension* skeleton_app =
163 InstallPlatformApp("app_view/shim/skeleton");
164 TestHelper("testAppViewGoodDataShouldSucceed",
165 "app_view/shim",
166 skeleton_app->id(),
167 NO_TEST_SERVER);
170 // Tests that <appview> correctly handles multiple successive connects.
171 IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewMultipleConnects) {
172 const extensions::Extension* skeleton_app =
173 InstallPlatformApp("app_view/shim/skeleton");
174 TestHelper("testAppViewMultipleConnects",
175 "app_view/shim",
176 skeleton_app->id(),
177 NO_TEST_SERVER);