summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/extensions')
-rw-r--r--chrome/browser/ui/extensions/bookmark_app_browser_controller.h51
-rw-r--r--chrome/browser/ui/extensions/hosted_app_browser_controller.cc (renamed from chrome/browser/ui/extensions/bookmark_app_browser_controller.cc)37
-rw-r--r--chrome/browser/ui/extensions/hosted_app_browser_controller.h51
-rw-r--r--chrome/browser/ui/extensions/hosted_app_browsertest.cc (renamed from chrome/browser/ui/extensions/bookmark_app_browsertest.cc)195
4 files changed, 187 insertions, 147 deletions
diff --git a/chrome/browser/ui/extensions/bookmark_app_browser_controller.h b/chrome/browser/ui/extensions/bookmark_app_browser_controller.h
deleted file mode 100644
index e47aaf3..0000000
--- a/chrome/browser/ui/extensions/bookmark_app_browser_controller.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_EXTENSIONS_BOOKMARK_APP_BROWSER_CONTROLLER_H_
-#define CHROME_BROWSER_UI_EXTENSIONS_BOOKMARK_APP_BROWSER_CONTROLLER_H_
-
-#include <string>
-
-#include "base/macros.h"
-
-class Browser;
-class Profile;
-
-namespace extensions {
-
-// Class to encapsulate logic to control the browser UI for bookmark apps.
-class BookmarkAppBrowserController {
- public:
- // Indicates whether |browser| is a bookmark app browser.
- static bool IsForBookmarkApp(Browser* browser);
-
- explicit BookmarkAppBrowserController(Browser* browser);
- ~BookmarkAppBrowserController();
-
- // Whether the browser being controlled can ever show the location bar.
- bool SupportsLocationBar();
-
- // Whether the browser being controlled should be currently showing the
- // location bar.
- bool ShouldShowLocationBar();
-
- // Updates the location bar visibility based on whether it should be
- // currently visible or not. If |animate| is set, the change will be
- // animated.
- void UpdateLocationBarVisibility(bool animate);
-
- // Whether the controlled browser should use the web app style frame.
- bool should_use_web_app_frame() { return should_use_web_app_frame_; }
-
- private:
- Browser* browser_;
- const std::string extension_id_;
- const bool should_use_web_app_frame_;
-
- DISALLOW_COPY_AND_ASSIGN(BookmarkAppBrowserController);
-};
-
-} // namespace extensions
-
-#endif // CHROME_BROWSER_UI_EXTENSIONS_BOOKMARK_APP_BROWSER_CONTROLLER_H_
diff --git a/chrome/browser/ui/extensions/bookmark_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
index 773250a..7a3a930 100644
--- a/chrome/browser/ui/extensions/bookmark_app_browser_controller.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/extensions/bookmark_app_browser_controller.h"
+#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
#include "base/command_line.h"
#include "chrome/browser/profiles/profile.h"
@@ -18,6 +18,7 @@
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/extension.h"
+#include "net/base/net_util.h"
#include "url/gurl.h"
namespace extensions {
@@ -25,9 +26,11 @@ namespace extensions {
namespace {
bool IsSameOriginOrMoreSecure(const GURL& app_url, const GURL& page_url) {
+ const std::string www("www.");
return (app_url.scheme() == page_url.scheme() ||
page_url.scheme() == url::kHttpsScheme) &&
- app_url.host() == page_url.host() &&
+ (app_url.host() == page_url.host() ||
+ www + app_url.host() == page_url.host()) &&
app_url.port() == page_url.port();
}
@@ -39,32 +42,37 @@ bool IsWebAppFrameEnabled() {
} // namespace
// static
-bool BookmarkAppBrowserController::IsForBookmarkApp(Browser* browser) {
+bool HostedAppBrowserController::IsForHostedApp(Browser* browser) {
const std::string extension_id =
web_app::GetExtensionIdFromApplicationName(browser->app_name());
const Extension* extension =
ExtensionRegistry::Get(browser->profile())->GetExtensionById(
extension_id, ExtensionRegistry::EVERYTHING);
- return extension && extension->from_bookmark();
+ return extension && extension->is_hosted_app();
}
-BookmarkAppBrowserController::BookmarkAppBrowserController(Browser* browser)
+HostedAppBrowserController::HostedAppBrowserController(Browser* browser)
: browser_(browser),
extension_id_(
- web_app::GetExtensionIdFromApplicationName(browser->app_name())),
- should_use_web_app_frame_(browser->host_desktop_type() ==
- chrome::HOST_DESKTOP_TYPE_ASH &&
- IsWebAppFrameEnabled()) {
+ web_app::GetExtensionIdFromApplicationName(browser->app_name())) {
+ const Extension* extension =
+ ExtensionRegistry::Get(browser->profile())->GetExtensionById(
+ extension_id_, ExtensionRegistry::EVERYTHING);
+ DCHECK(extension);
+ should_use_web_app_frame_ =
+ extension->from_bookmark() &&
+ browser->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH &&
+ IsWebAppFrameEnabled();
}
-BookmarkAppBrowserController::~BookmarkAppBrowserController() {
+HostedAppBrowserController::~HostedAppBrowserController() {
}
-bool BookmarkAppBrowserController::SupportsLocationBar() {
+bool HostedAppBrowserController::SupportsLocationBar() const {
return !should_use_web_app_frame();
}
-bool BookmarkAppBrowserController::ShouldShowLocationBar() {
+bool HostedAppBrowserController::ShouldShowLocationBar() const {
const Extension* extension =
ExtensionRegistry::Get(browser_->profile())->GetExtensionById(
extension_id_, ExtensionRegistry::EVERYTHING);
@@ -77,7 +85,7 @@ bool BookmarkAppBrowserController::ShouldShowLocationBar() {
if (!extension || !web_contents)
return false;
- if (!extension->from_bookmark())
+ if (!extension->is_hosted_app())
return false;
// Don't show a location bar until a navigation has occurred.
@@ -96,7 +104,8 @@ bool BookmarkAppBrowserController::ShouldShowLocationBar() {
web_contents->GetLastCommittedURL()));
}
-void BookmarkAppBrowserController::UpdateLocationBarVisibility(bool animate) {
+void HostedAppBrowserController::UpdateLocationBarVisibility(
+ bool animate) const {
if (!SupportsLocationBar())
return;
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.h b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
new file mode 100644
index 0000000..09384d0
--- /dev/null
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
@@ -0,0 +1,51 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_EXTENSIONS_HOSTED_APP_BROWSER_CONTROLLER_H_
+#define CHROME_BROWSER_UI_EXTENSIONS_HOSTED_APP_BROWSER_CONTROLLER_H_
+
+#include <string>
+
+#include "base/macros.h"
+
+class Browser;
+class Profile;
+
+namespace extensions {
+
+// Class to encapsulate logic to control the browser UI for hosted apps.
+class HostedAppBrowserController {
+ public:
+ // Indicates whether |browser| is a hosted app browser.
+ static bool IsForHostedApp(Browser* browser);
+
+ explicit HostedAppBrowserController(Browser* browser);
+ ~HostedAppBrowserController();
+
+ // Whether the browser being controlled can ever show the location bar.
+ bool SupportsLocationBar() const;
+
+ // Whether the browser being controlled should be currently showing the
+ // location bar.
+ bool ShouldShowLocationBar() const;
+
+ // Updates the location bar visibility based on whether it should be
+ // currently visible or not. If |animate| is set, the change will be
+ // animated.
+ void UpdateLocationBarVisibility(bool animate) const;
+
+ // Whether the controlled browser should use the web app style frame.
+ bool should_use_web_app_frame() const { return should_use_web_app_frame_; }
+
+ private:
+ Browser* browser_;
+ const std::string extension_id_;
+ bool should_use_web_app_frame_;
+
+ DISALLOW_COPY_AND_ASSIGN(HostedAppBrowserController);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_UI_EXTENSIONS_HOSTED_APP_BROWSER_CONTROLLER_H_
diff --git a/chrome/browser/ui/extensions/bookmark_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index 186029b..fa96455 100644
--- a/chrome/browser/ui/extensions/bookmark_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -14,7 +14,7 @@
#include "chrome/browser/ui/browser_iterator.h"
#include "chrome/browser/ui/extensions/app_launch_params.h"
#include "chrome/browser/ui/extensions/application_launch.h"
-#include "chrome/browser/ui/extensions/bookmark_app_browser_controller.h"
+#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_switches.h"
@@ -28,8 +28,6 @@
using content::WebContents;
using extensions::Extension;
-typedef ExtensionBrowserTest BookmarkAppTest;
-
namespace {
// Used by ShouldLocationBarForXXX. Performs a navigation and then checks that
@@ -40,141 +38,174 @@ void NavigateAndCheckForLocationBar(Browser* browser,
GURL url(url_string);
ui_test_utils::NavigateToURL(browser, url);
EXPECT_EQ(expected_visibility,
- browser->bookmark_app_controller()->ShouldShowLocationBar());
+ browser->hosted_app_controller()->ShouldShowLocationBar());
}
} // namespace
+class HostedAppTest : public ExtensionBrowserTest {
+ public:
+ HostedAppTest() : app_browser_(nullptr) {}
+ ~HostedAppTest() override {}
+
+ protected:
+ void SetupApp(const std::string& app_folder, bool is_bookmark_app) {
+ const Extension* app = InstallExtensionWithSourceAndFlags(
+ test_data_dir_.AppendASCII(app_folder), 1,
+ extensions::Manifest::INTERNAL,
+ is_bookmark_app ? extensions::Extension::FROM_BOOKMARK
+ : extensions::Extension::NO_FLAGS);
+ ASSERT_TRUE(app);
+
+ // Launch it in a window.
+ ASSERT_TRUE(OpenApplication(AppLaunchParams(
+ browser()->profile(), app, extensions::LAUNCH_CONTAINER_WINDOW,
+ NEW_WINDOW, extensions::SOURCE_TEST)));
+
+ for (chrome::BrowserIterator it; !it.done(); it.Next()) {
+ if (*it == browser())
+ continue;
+
+ std::string browser_app_id =
+ web_app::GetExtensionIdFromApplicationName((*it)->app_name());
+ if (browser_app_id == app->id()) {
+ app_browser_ = *it;
+ break;
+ }
+ }
+
+ ASSERT_TRUE(app_browser_);
+ ASSERT_TRUE(app_browser_ != browser());
+ }
+
+ Browser* app_browser_;
+};
+
// Check that the location bar is shown correctly for HTTP bookmark apps.
-IN_PROC_BROWSER_TEST_F(BookmarkAppTest,
+IN_PROC_BROWSER_TEST_F(HostedAppTest,
ShouldShowLocationBarForHTTPBookmarkApp) {
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableNewBookmarkApps);
- ASSERT_TRUE(test_server()->Start());
- // Load a http bookmark app.
- const Extension* http_bookmark_app = InstallExtensionWithSourceAndFlags(
- test_data_dir_.AppendASCII("app/"),
- 1,
- extensions::Manifest::INTERNAL,
- extensions::Extension::FROM_BOOKMARK);
- ASSERT_TRUE(http_bookmark_app);
-
- // Launch it in a window.
- WebContents* app_window = OpenApplication(AppLaunchParams(
- browser()->profile(), http_bookmark_app,
- extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW,
- extensions::SOURCE_TEST));
- ASSERT_TRUE(app_window);
-
- // Find the new browser.
- Browser* http_app_browser = NULL;
- for (chrome::BrowserIterator it; !it.done(); it.Next()) {
- std::string app_id =
- web_app::GetExtensionIdFromApplicationName((*it)->app_name());
- if (*it == browser()) {
- continue;
- } else if (app_id == http_bookmark_app->id()) {
- http_app_browser = *it;
- }
- }
- ASSERT_TRUE(http_app_browser);
- ASSERT_TRUE(http_app_browser != browser());
+ SetupApp("app", true);
// Navigate to the app's launch page; the location bar should be hidden.
NavigateAndCheckForLocationBar(
- http_app_browser, "http://www.example.com/empty.html", false);
+ app_browser_, "http://www.example.com/empty.html", false);
// Navigate to another page on the same origin; the location bar should still
// hidden.
NavigateAndCheckForLocationBar(
- http_app_browser, "http://www.example.com/blah", false);
+ app_browser_, "http://www.example.com/blah", false);
// Navigate to the https version of the site; the location bar should
- // be hidden for both browsers.
+ // be hidden.
NavigateAndCheckForLocationBar(
- http_app_browser, "https://www.example.com/blah", false);
+ app_browser_, "https://www.example.com/blah", false);
// Navigate to different origin; the location bar should now be visible.
NavigateAndCheckForLocationBar(
- http_app_browser, "http://www.foo.com/blah", true);
+ app_browser_, "http://www.foo.com/blah", true);
// Navigate back to the app's origin; the location bar should now be hidden.
NavigateAndCheckForLocationBar(
- http_app_browser, "http://www.example.com/blah", false);
+ app_browser_, "http://www.example.com/blah", false);
}
// Check that the location bar is shown correctly for HTTPS bookmark apps.
-IN_PROC_BROWSER_TEST_F(BookmarkAppTest,
+IN_PROC_BROWSER_TEST_F(HostedAppTest,
ShouldShowLocationBarForHTTPSBookmarkApp) {
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableNewBookmarkApps);
- ASSERT_TRUE(test_server()->Start());
- // Load a https bookmark app.
- const Extension* https_bookmark_app = InstallExtensionWithSourceAndFlags(
- test_data_dir_.AppendASCII("https_app/"),
- 1,
- extensions::Manifest::INTERNAL,
- extensions::Extension::FROM_BOOKMARK);
- ASSERT_TRUE(https_bookmark_app);
-
- // Launch it in a window.
- WebContents* app_window = OpenApplication(AppLaunchParams(
- browser()->profile(), https_bookmark_app,
- extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW,
- extensions::SOURCE_TEST));
- ASSERT_TRUE(app_window);
-
- // Find the new browser.
- Browser* https_app_browser = NULL;
- for (chrome::BrowserIterator it; !it.done(); it.Next()) {
- std::string app_id =
- web_app::GetExtensionIdFromApplicationName((*it)->app_name());
- if (*it == browser()) {
- continue;
- } else if (app_id == https_bookmark_app->id()) {
- https_app_browser = *it;
- }
- }
- ASSERT_TRUE(https_app_browser);
- ASSERT_TRUE(https_app_browser != browser());
+ SetupApp("https_app", true);
// Navigate to the app's launch page; the location bar should be hidden.
NavigateAndCheckForLocationBar(
- https_app_browser, "https://www.example.com/empty.html", false);
+ app_browser_, "https://www.example.com/empty.html", false);
// Navigate to another page on the same origin; the location bar should still
// hidden.
NavigateAndCheckForLocationBar(
- https_app_browser, "https://www.example.com/blah", false);
+ app_browser_, "https://www.example.com/blah", false);
// Navigate to the http version of the site; the location bar should
// be visible for the https version as it is now on a less secure version
// of its host.
NavigateAndCheckForLocationBar(
- https_app_browser, "http://www.example.com/blah", true);
+ app_browser_, "http://www.example.com/blah", true);
+
+ // Navigate to different origin; the location bar should now be visible.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://www.foo.com/blah", true);
+
+ // Navigate back to the app's origin; the location bar should now be hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "https://www.example.com/blah", false);
+}
+
+// Check that the location bar is shown correctly for normal hosted apps.
+IN_PROC_BROWSER_TEST_F(HostedAppTest,
+ ShouldShowLocationBarForHostedApp) {
+ SetupApp("app", false);
+
+ // Navigate to the app's launch page; the location bar should be hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://www.example.com/empty.html", false);
+
+ // Navigate to another page on the same origin; the location bar should still
+ // hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://www.example.com/blah", false);
+
+ // Navigate to the https version of the site; the location bar should
+ // be hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "https://www.example.com/blah", false);
+
+ // Navigate to different origin; the location bar should now be visible.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://www.foo.com/blah", true);
+
+ // Navigate back to the app's origin; the location bar should now be hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://www.example.com/blah", false);
+}
+
+// Check that the location bar is shown correctly for hosted apps that specify
+// start URLs without the 'www.' prefix.
+IN_PROC_BROWSER_TEST_F(HostedAppTest,
+ LocationBarForHostedAppWithoutWWW) {
+ SetupApp("app_no_www", false);
+
+ // Navigate to the app's launch page; the location bar should be hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://example.com/empty.html", false);
+
+ // Navigate to the app's launch page with the 'www.' prefis; the location bar
+ // should be hidden.
+ NavigateAndCheckForLocationBar(
+ app_browser_, "http://www.example.com/empty.html", false);
// Navigate to different origin; the location bar should now be visible.
NavigateAndCheckForLocationBar(
- https_app_browser, "http://www.foo.com/blah", true);
+ app_browser_, "http://www.foo.com/blah", true);
// Navigate back to the app's origin; the location bar should now be hidden.
NavigateAndCheckForLocationBar(
- https_app_browser, "https://www.example.com/blah", false);
+ app_browser_, "http://example.com/blah", false);
}
// Open a normal browser window, a hosted app window, a legacy packaged app
// window and a dev tools window, and check that the web app frame feature is
// supported correctly.
-IN_PROC_BROWSER_TEST_F(BookmarkAppTest, ShouldUseWebAppFrame) {
- ASSERT_TRUE(test_server()->Start());
+IN_PROC_BROWSER_TEST_F(HostedAppTest, ShouldUseWebAppFrame) {
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableWebAppFrame);
// Load a hosted app.
const Extension* bookmark_app = InstallExtensionWithSourceAndFlags(
- test_data_dir_.AppendASCII("app/"),
+ test_data_dir_.AppendASCII("app"),
1,
extensions::Manifest::INTERNAL,
extensions::Extension::FROM_BOOKMARK);
@@ -187,7 +218,7 @@ IN_PROC_BROWSER_TEST_F(BookmarkAppTest, ShouldUseWebAppFrame) {
ASSERT_TRUE(bookmark_app_window);
// Load a packaged app.
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("packaged_app/")));
+ ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("packaged_app")));
const Extension* packaged_app = nullptr;
extensions::ExtensionRegistry* registry =
extensions::ExtensionRegistry::Get(browser()->profile());
@@ -212,9 +243,9 @@ IN_PROC_BROWSER_TEST_F(BookmarkAppTest, ShouldUseWebAppFrame) {
browser()->host_desktop_type()));
// Find the new browsers.
- Browser* bookmark_app_browser = NULL;
- Browser* packaged_app_browser = NULL;
- Browser* dev_tools_browser = NULL;
+ Browser* bookmark_app_browser = nullptr;
+ Browser* packaged_app_browser = nullptr;
+ Browser* dev_tools_browser = nullptr;
for (chrome::BrowserIterator it; !it.done(); it.Next()) {
if (*it == browser()) {
continue;