Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(247)

Side by Side Diff: chrome/browser/ui/extensions/bookmark_app_browsertest.cc

Issue 1164873003: Show origin for hosted apps that navigate away from their start origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: feedback for the stig Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 #include <string>
6
7 #include "base/command_line.h"
8 #include "base/compiler_specific.h"
9 #include "chrome/browser/devtools/devtools_window_testing.h"
10 #include "chrome/browser/extensions/extension_browsertest.h"
11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/extensions/extension_util.h"
13 #include "chrome/browser/ui/browser_finder.h"
14 #include "chrome/browser/ui/browser_iterator.h"
15 #include "chrome/browser/ui/extensions/app_launch_params.h"
16 #include "chrome/browser/ui/extensions/application_launch.h"
17 #include "chrome/browser/ui/extensions/bookmark_app_browser_controller.h"
18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
19 #include "chrome/browser/web_applications/web_app.h"
20 #include "chrome/common/chrome_switches.h"
21 #include "chrome/test/base/ui_test_utils.h"
22 #include "content/public/browser/web_contents.h"
23 #include "extensions/browser/extension_registry.h"
24 #include "extensions/common/constants.h"
25 #include "extensions/common/extension.h"
26 #include "extensions/common/extension_set.h"
27
28 using content::WebContents;
29 using extensions::Extension;
30
31 typedef ExtensionBrowserTest BookmarkAppTest;
32
33 namespace {
34
35 // Used by ShouldLocationBarForXXX. Performs a navigation and then checks that
36 // the location bar visibility is as expcted.
37 void NavigateAndCheckForLocationBar(Browser* browser,
38 const std::string& url_string,
39 bool expected_visibility) {
40 GURL url(url_string);
41 ui_test_utils::NavigateToURL(browser, url);
42 EXPECT_EQ(expected_visibility,
43 browser->bookmark_app_controller()->ShouldShowLocationBar());
44 }
45
46 } // namespace
47
48 // Check that the location bar is shown correctly for HTTP bookmark apps.
49 IN_PROC_BROWSER_TEST_F(BookmarkAppTest,
50 ShouldShowLocationBarForHTTPBookmarkApp) {
51 base::CommandLine::ForCurrentProcess()->AppendSwitch(
52 switches::kEnableNewBookmarkApps);
53 ASSERT_TRUE(test_server()->Start());
54
55 // Load a http bookmark app.
56 const Extension* http_bookmark_app = InstallExtensionWithSourceAndFlags(
57 test_data_dir_.AppendASCII("app/"),
58 1,
59 extensions::Manifest::INTERNAL,
60 extensions::Extension::FROM_BOOKMARK);
61 ASSERT_TRUE(http_bookmark_app);
62
63 // Launch it in a window.
64 WebContents* app_window = OpenApplication(AppLaunchParams(
65 browser()->profile(), http_bookmark_app,
66 extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW,
67 extensions::SOURCE_TEST));
68 ASSERT_TRUE(app_window);
69
70 // Find the new browser.
71 Browser* http_app_browser = NULL;
72 for (chrome::BrowserIterator it; !it.done(); it.Next()) {
73 std::string app_id =
74 web_app::GetExtensionIdFromApplicationName((*it)->app_name());
75 if (*it == browser()) {
76 continue;
77 } else if (app_id == http_bookmark_app->id()) {
78 http_app_browser = *it;
79 }
80 }
81 ASSERT_TRUE(http_app_browser);
82 ASSERT_TRUE(http_app_browser != browser());
83
84 // Navigate to the app's launch page; the location bar should be hidden.
85 NavigateAndCheckForLocationBar(
86 http_app_browser, "http://www.example.com/empty.html", false);
87
88 // Navigate to another page on the same origin; the location bar should still
89 // hidden.
90 NavigateAndCheckForLocationBar(
91 http_app_browser, "http://www.example.com/blah", false);
92
93 // Navigate to the https version of the site; the location bar should
94 // be hidden for both browsers.
95 NavigateAndCheckForLocationBar(
96 http_app_browser, "https://www.example.com/blah", false);
97
98 // Navigate to different origin; the location bar should now be visible.
99 NavigateAndCheckForLocationBar(
100 http_app_browser, "http://www.foo.com/blah", true);
101
102 // Navigate back to the app's origin; the location bar should now be hidden.
103 NavigateAndCheckForLocationBar(
104 http_app_browser, "http://www.example.com/blah", false);
105 }
106
107 // Check that the location bar is shown correctly for HTTPS bookmark apps.
108 IN_PROC_BROWSER_TEST_F(BookmarkAppTest,
109 ShouldShowLocationBarForHTTPSBookmarkApp) {
110 base::CommandLine::ForCurrentProcess()->AppendSwitch(
111 switches::kEnableNewBookmarkApps);
112 ASSERT_TRUE(test_server()->Start());
113
114 // Load a https bookmark app.
115 const Extension* https_bookmark_app = InstallExtensionWithSourceAndFlags(
116 test_data_dir_.AppendASCII("https_app/"),
117 1,
118 extensions::Manifest::INTERNAL,
119 extensions::Extension::FROM_BOOKMARK);
120 ASSERT_TRUE(https_bookmark_app);
121
122 // Launch it in a window.
123 WebContents* app_window = OpenApplication(AppLaunchParams(
124 browser()->profile(), https_bookmark_app,
125 extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW,
126 extensions::SOURCE_TEST));
127 ASSERT_TRUE(app_window);
128
129 // Find the new browser.
130 Browser* https_app_browser = NULL;
131 for (chrome::BrowserIterator it; !it.done(); it.Next()) {
132 std::string app_id =
133 web_app::GetExtensionIdFromApplicationName((*it)->app_name());
134 if (*it == browser()) {
135 continue;
136 } else if (app_id == https_bookmark_app->id()) {
137 https_app_browser = *it;
138 }
139 }
140 ASSERT_TRUE(https_app_browser);
141 ASSERT_TRUE(https_app_browser != browser());
142
143 // Navigate to the app's launch page; the location bar should be hidden.
144 NavigateAndCheckForLocationBar(
145 https_app_browser, "https://www.example.com/empty.html", false);
146
147 // Navigate to another page on the same origin; the location bar should still
148 // hidden.
149 NavigateAndCheckForLocationBar(
150 https_app_browser, "https://www.example.com/blah", false);
151
152 // Navigate to the http version of the site; the location bar should
153 // be visible for the https version as it is now on a less secure version
154 // of its host.
155 NavigateAndCheckForLocationBar(
156 https_app_browser, "http://www.example.com/blah", true);
157
158 // Navigate to different origin; the location bar should now be visible.
159 NavigateAndCheckForLocationBar(
160 https_app_browser, "http://www.foo.com/blah", true);
161
162 // Navigate back to the app's origin; the location bar should now be hidden.
163 NavigateAndCheckForLocationBar(
164 https_app_browser, "https://www.example.com/blah", false);
165 }
166
167 // Open a normal browser window, a hosted app window, a legacy packaged app
168 // window and a dev tools window, and check that the web app frame feature is
169 // supported correctly.
170 IN_PROC_BROWSER_TEST_F(BookmarkAppTest, ShouldUseWebAppFrame) {
171 ASSERT_TRUE(test_server()->Start());
172 base::CommandLine::ForCurrentProcess()->AppendSwitch(
173 switches::kEnableWebAppFrame);
174
175 // Load a hosted app.
176 const Extension* bookmark_app = InstallExtensionWithSourceAndFlags(
177 test_data_dir_.AppendASCII("app/"),
178 1,
179 extensions::Manifest::INTERNAL,
180 extensions::Extension::FROM_BOOKMARK);
181 ASSERT_TRUE(bookmark_app);
182
183 // Launch it in a window, as AppLauncherHandler::HandleLaunchApp() would.
184 WebContents* bookmark_app_window = OpenApplication(AppLaunchParams(
185 browser()->profile(), bookmark_app, extensions::LAUNCH_CONTAINER_WINDOW,
186 NEW_WINDOW, extensions::SOURCE_UNTRACKED));
187 ASSERT_TRUE(bookmark_app_window);
188
189 // Load a packaged app.
190 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("packaged_app/")));
191 const Extension* packaged_app = nullptr;
192 extensions::ExtensionRegistry* registry =
193 extensions::ExtensionRegistry::Get(browser()->profile());
194 for (const scoped_refptr<const extensions::Extension>& extension :
195 registry->enabled_extensions()) {
196 if (extension->name() == "Packaged App Test")
197 packaged_app = extension.get();
198 }
199 ASSERT_TRUE(packaged_app);
200
201 // Launch it in a window, as AppLauncherHandler::HandleLaunchApp() would.
202 WebContents* packaged_app_window = OpenApplication(AppLaunchParams(
203 browser()->profile(), packaged_app, extensions::LAUNCH_CONTAINER_WINDOW,
204 NEW_WINDOW, extensions::SOURCE_UNTRACKED));
205 ASSERT_TRUE(packaged_app_window);
206
207 DevToolsWindow* devtools_window =
208 DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), false);
209
210 // The launch should have created a new app browser and a dev tools browser.
211 ASSERT_EQ(4u, chrome::GetBrowserCount(browser()->profile(),
212 browser()->host_desktop_type()));
213
214 // Find the new browsers.
215 Browser* bookmark_app_browser = NULL;
216 Browser* packaged_app_browser = NULL;
217 Browser* dev_tools_browser = NULL;
218 for (chrome::BrowserIterator it; !it.done(); it.Next()) {
219 if (*it == browser()) {
220 continue;
221 } else if ((*it)->app_name() == DevToolsWindow::kDevToolsApp) {
222 dev_tools_browser = *it;
223 } else if ((*it)->tab_strip_model()->GetActiveWebContents() ==
224 bookmark_app_window) {
225 bookmark_app_browser = *it;
226 } else {
227 packaged_app_browser = *it;
228 }
229 }
230 ASSERT_TRUE(dev_tools_browser);
231 ASSERT_TRUE(bookmark_app_browser);
232 ASSERT_TRUE(bookmark_app_browser != browser());
233 ASSERT_TRUE(packaged_app_browser);
234 ASSERT_TRUE(packaged_app_browser != browser());
235 ASSERT_TRUE(packaged_app_browser != bookmark_app_browser);
236
237 EXPECT_FALSE(browser()->SupportsWindowFeature(Browser::FEATURE_WEBAPPFRAME));
238 EXPECT_FALSE(
239 dev_tools_browser->SupportsWindowFeature(Browser::FEATURE_WEBAPPFRAME));
240 EXPECT_EQ(browser()->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH,
241 bookmark_app_browser->SupportsWindowFeature(
242 Browser::FEATURE_WEBAPPFRAME));
243 EXPECT_FALSE(packaged_app_browser->SupportsWindowFeature(
244 Browser::FEATURE_WEBAPPFRAME));
245
246 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window);
247 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698