OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/strings/stringprintf.h" | 5 #include "base/strings/stringprintf.h" |
6 #include "chrome/browser/apps/app_browsertest_util.h" | 6 #include "chrome/browser/apps/app_browsertest_util.h" |
7 #include "content/public/browser/notification_service.h" | 7 #include "chrome/test/base/ui_test_utils.h" |
8 #include "content/public/browser/render_process_host.h" | |
9 #include "content/public/test/browser_test_utils.h" | 8 #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" | 9 #include "extensions/browser/guest_view/guest_view_manager.h" |
12 #include "extensions/browser/guest_view/guest_view_manager_factory.h" | 10 #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" | 11 #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" | |
18 | 12 |
19 namespace { | 13 namespace { |
20 | 14 |
21 class TestGuestViewManager : public extensions::GuestViewManager { | 15 class TestGuestViewManager : public extensions::GuestViewManager { |
22 public: | 16 public: |
23 explicit TestGuestViewManager(content::BrowserContext* context) : | 17 explicit TestGuestViewManager(content::BrowserContext* context) : |
24 extensions::GuestViewManager(context), | 18 extensions::GuestViewManager(context), |
25 web_contents_(NULL) {} | 19 web_contents_(NULL) {} |
26 | 20 |
27 content::WebContents* WaitForGuestCreated() { | 21 content::WebContents* WaitForGuestCreated() { |
28 if (web_contents_) | 22 if (web_contents_) |
29 return web_contents_; | 23 return web_contents_; |
30 | 24 |
31 message_loop_runner_ = new content::MessageLoopRunner; | 25 message_loop_runner_ = new content::MessageLoopRunner; |
32 message_loop_runner_->Run(); | 26 message_loop_runner_->Run(); |
33 return web_contents_; | 27 return web_contents_; |
34 } | 28 } |
35 | 29 |
36 private: | 30 private: |
37 // GuestViewManager override: | 31 // GuestViewManager override. |
38 void AddGuest(int guest_instance_id, | 32 void AddGuest(int guest_instance_id, |
39 content::WebContents* guest_web_contents) override { | 33 content::WebContents* guest_web_contents) override { |
40 extensions::GuestViewManager::AddGuest( | 34 extensions::GuestViewManager::AddGuest(guest_instance_id, |
41 guest_instance_id, guest_web_contents); | 35 guest_web_contents); |
42 web_contents_ = guest_web_contents; | 36 web_contents_ = guest_web_contents; |
43 | 37 |
44 if (message_loop_runner_.get()) | 38 if (message_loop_runner_.get()) |
45 message_loop_runner_->Quit(); | 39 message_loop_runner_->Quit(); |
46 } | 40 } |
47 | 41 |
48 content::WebContents* web_contents_; | 42 content::WebContents* web_contents_; |
49 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | 43 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
50 }; | 44 }; |
51 | 45 |
52 // Test factory for creating test instances of GuestViewManager. | 46 // Test factory for creating test instances of GuestViewManager. |
53 class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory { | 47 class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory { |
54 public: | 48 public: |
55 TestGuestViewManagerFactory() : | 49 TestGuestViewManagerFactory() : test_guest_view_manager_(NULL) {} |
56 test_guest_view_manager_(NULL) {} | |
57 | 50 |
58 ~TestGuestViewManagerFactory() override {} | 51 ~TestGuestViewManagerFactory() override {} |
59 | 52 |
60 extensions::GuestViewManager* CreateGuestViewManager( | 53 extensions::GuestViewManager* CreateGuestViewManager( |
61 content::BrowserContext* context) override { | 54 content::BrowserContext* context) override { |
62 return GetManager(context); | 55 return GetManager(context); |
63 } | 56 } |
64 | 57 |
65 TestGuestViewManager* GetManager(content::BrowserContext* context) { | 58 TestGuestViewManager* GetManager(content::BrowserContext* context) { |
66 if (!test_guest_view_manager_) { | 59 if (!test_guest_view_manager_) { |
67 test_guest_view_manager_ = new TestGuestViewManager(context); | 60 test_guest_view_manager_ = new TestGuestViewManager(context); |
68 } | 61 } |
69 return test_guest_view_manager_; | 62 return test_guest_view_manager_; |
70 } | 63 } |
71 | 64 |
72 private: | 65 private: |
73 TestGuestViewManager* test_guest_view_manager_; | 66 TestGuestViewManager* test_guest_view_manager_; |
74 | 67 |
75 DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory); | 68 DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory); |
76 }; | 69 }; |
77 | 70 |
78 } // namespace | 71 } // namespace |
79 | 72 |
80 class AppViewTest : public extensions::PlatformAppBrowserTest { | 73 class ExtensionViewTest : public extensions::PlatformAppBrowserTest { |
81 public: | 74 public: |
82 AppViewTest() { | 75 ExtensionViewTest() { |
83 extensions::GuestViewManager::set_factory_for_testing(&factory_); | 76 extensions::GuestViewManager::set_factory_for_testing(&factory_); |
84 } | 77 } |
85 | 78 |
86 TestGuestViewManager* GetGuestViewManager() { | 79 TestGuestViewManager* GetGuestViewManager() { |
87 return factory_.GetManager(browser()->profile()); | 80 return factory_.GetManager(browser()->profile()); |
88 } | 81 } |
89 | 82 |
90 enum TestServer { | |
91 NEEDS_TEST_SERVER, | |
92 NO_TEST_SERVER | |
93 }; | |
94 | |
95 void TestHelper(const std::string& test_name, | 83 void TestHelper(const std::string& test_name, |
96 const std::string& app_location, | 84 const std::string& app_location, |
97 const std::string& app_to_embed, | 85 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; | |
104 } | |
105 } | |
106 | |
107 LoadAndLaunchPlatformApp(app_location.c_str(), "Launched"); | 86 LoadAndLaunchPlatformApp(app_location.c_str(), "Launched"); |
108 | 87 |
109 // Flush any pending events to make sure we start with a clean slate. | 88 // Flush any pending events to make sure we start with a clean slate. |
110 content::RunAllPendingInMessageLoop(); | 89 content::RunAllPendingInMessageLoop(); |
111 | 90 |
112 content::WebContents* embedder_web_contents = | 91 content::WebContents* embedder_web_contents = |
113 GetFirstAppWindowWebContents(); | 92 GetFirstAppWindowWebContents(); |
114 if (!embedder_web_contents) { | 93 if (!embedder_web_contents) { |
115 LOG(ERROR) << "UNABLE TO FIND EMBEDDER WEB CONTENTS."; | 94 LOG(ERROR) << "UNABLE TO FIND EMBEDDER WEB CONTENTS."; |
116 return; | 95 return; |
(...skipping 13 matching lines...) Expand all Loading... |
130 } | 109 } |
131 | 110 |
132 private: | 111 private: |
133 void SetUpCommandLine(base::CommandLine* command_line) override { | 112 void SetUpCommandLine(base::CommandLine* command_line) override { |
134 extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line); | 113 extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line); |
135 } | 114 } |
136 | 115 |
137 TestGuestViewManagerFactory factory_; | 116 TestGuestViewManagerFactory factory_; |
138 }; | 117 }; |
139 | 118 |
140 // Tests that <appview> is able to navigate to another installed app. | 119 // Tests that <extensionview> can be created and added to the DOM. |
141 IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewWithUndefinedDataShouldSucceed) { | 120 IN_PROC_BROWSER_TEST_F(ExtensionViewTest, |
| 121 TestExtensionViewCreationShouldSucceed) { |
142 const extensions::Extension* skeleton_app = | 122 const extensions::Extension* skeleton_app = |
143 InstallPlatformApp("app_view/shim/skeleton"); | 123 InstallPlatformApp("extension_view/shim/skeleton"); |
144 TestHelper("testAppViewWithUndefinedDataShouldSucceed", | 124 TestHelper("testExtensionViewCreationShouldSucceed", "extension_view/shim", |
145 "app_view/shim", | 125 skeleton_app->id()); |
146 skeleton_app->id(), | |
147 NO_TEST_SERVER); | |
148 } | 126 } |
149 | 127 |
150 // Tests that <appview> correctly processes parameters passed on connect. | 128 // Tests that verify that <extensionview> can navigate to different sources. |
151 IN_PROC_BROWSER_TEST_F(AppViewTest, TestAppViewRefusedDataShouldFail) { | 129 IN_PROC_BROWSER_TEST_F(ExtensionViewTest, ShimSrcAttribute) { |
152 const extensions::Extension* skeleton_app = | 130 ASSERT_TRUE(RunPlatformAppTest("platform_apps/extension_view/src_attribute")); |
153 InstallPlatformApp("app_view/shim/skeleton"); | |
154 TestHelper("testAppViewRefusedDataShouldFail", | |
155 "app_view/shim", | |
156 skeleton_app->id(), | |
157 NO_TEST_SERVER); | |
158 } | 131 } |
159 | |
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); | |
168 } | |
169 | |
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); | |
178 } | |
OLD | NEW |