summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-17 03:00:48 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-17 03:00:48 +0000
commit4d007b3104f9502caeb376666ff7d21da5d0a8b8 (patch)
tree0d5326f68fd80e768d73e65ad13ab7ea067e1cd5 /chrome/browser/extensions
parent59965613e65e47671f860ee50a8a0642f88d2f6d (diff)
downloadchromium_src-4d007b3104f9502caeb376666ff7d21da5d0a8b8.zip
chromium_src-4d007b3104f9502caeb376666ff7d21da5d0a8b8.tar.gz
chromium_src-4d007b3104f9502caeb376666ff7d21da5d0a8b8.tar.bz2
Don't display platform app resources in normal browser windows.
BUG=139258 Review URL: https://codereview.chromium.org/10920084 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162304 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc22
-rw-r--r--chrome/browser/extensions/extension_service.cc11
-rw-r--r--chrome/browser/extensions/extension_service.h4
-rw-r--r--chrome/browser/extensions/platform_app_browsertest.cc40
4 files changed, 67 insertions, 10 deletions
diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc
index b2f7973..5da2a80 100644
--- a/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc
+++ b/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/extension_test_message_listener.h"
+#include "chrome/browser/extensions/platform_app_launcher.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -55,13 +56,13 @@ class PushMessagingApiTest : public ExtensionApiTest {
IN_PROC_BROWSER_TEST_F(PushMessagingApiTest, EventDispatch) {
ResultCatcher catcher;
catcher.RestrictToProfile(browser()->profile());
-
ExtensionTestMessageListener ready("ready", true);
+
const extensions::Extension* extension =
LoadExtension(test_data_dir_.AppendASCII("push_messaging"));
ASSERT_TRUE(extension);
- GURL page_url = extension->GetResourceURL("event_dispatch.html");
- ui_test_utils::NavigateToURL(browser(), page_url);
+ extensions::LaunchPlatformApp(
+ browser()->profile(), extension, NULL, FilePath());
EXPECT_TRUE(ready.WaitUntilSatisfied());
GetEventRouter()->TriggerMessageForTest(extension->id(), 1, "payload");
@@ -77,10 +78,10 @@ IN_PROC_BROWSER_TEST_F(PushMessagingApiTest, ReceivesPush) {
ExtensionTestMessageListener ready("ready", true);
const extensions::Extension* extension =
- LoadExtension(test_data_dir_.AppendASCII("push_messaging"));
+ LoadExtension(test_data_dir_.AppendASCII("push_messaging"));
ASSERT_TRUE(extension);
- GURL page_url = extension->GetResourceURL("event_dispatch.html");
- ui_test_utils::NavigateToURL(browser(), page_url);
+ extensions::LaunchPlatformApp(
+ browser()->profile(), extension, NULL, FilePath());
EXPECT_TRUE(ready.WaitUntilSatisfied());
ProfileSyncService* pss = ProfileSyncServiceFactory::GetForProfile(
@@ -141,13 +142,14 @@ IN_PROC_BROWSER_TEST_F(PushMessagingApiTest, Restart) {
IN_PROC_BROWSER_TEST_F(PushMessagingApiTest, GetChannelId) {
ResultCatcher catcher;
catcher.RestrictToProfile(browser()->profile());
+// ExtensionTestMessageListener ready("ready", true);
- ExtensionTestMessageListener ready("ready", true);
const extensions::Extension* extension =
- LoadExtension(test_data_dir_.AppendASCII("push_messaging"));
+ LoadExtension(test_data_dir_.AppendASCII("get_channel_id"));
ASSERT_TRUE(extension);
- GURL page_url = extension->GetResourceURL("get_channel_id.html");
- ui_test_utils::NavigateToURL(browser(), page_url);
+ extensions::LaunchPlatformApp(
+ browser()->profile(), extension, NULL, FilePath());
+// EXPECT_TRUE(ready.WaitUntilSatisfied());
// Just loading the page will cause a getChannelId call, so we check
// for a callback. It should fail because there is no auth token.
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 6b896e2..41e3358 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -2295,6 +2295,17 @@ bool ExtensionService::ExtensionBindingsAllowed(const GURL& url) {
extension->location() == Extension::COMPONENT);
}
+bool ExtensionService::ShouldBlockUrlInBrowserTab(GURL* url) {
+ const Extension* extension = extensions_.GetExtensionOrAppByURL(
+ ExtensionURLInfo(*url));
+ if (extension && extension->is_platform_app()) {
+ *url = GURL(chrome::kExtensionInvalidRequestURL);
+ return true;
+ }
+
+ return false;
+}
+
gfx::Image ExtensionService::GetOmniboxIcon(
const std::string& extension_id) {
return gfx::Image(omnibox_icon_manager_.GetIcon(extension_id));
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 3e42906..7ca9765 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -391,6 +391,10 @@ class ExtensionService
// permissions the given extension has been granted.
bool ExtensionBindingsAllowed(const GURL& url);
+ // Returns true if a normal browser window should avoid showing |url| in a
+ // tab. In this case, |url| is also rewritten to an error URL.
+ bool ShouldBlockUrlInBrowserTab(GURL* url);
+
// Returns the icon to display in the omnibox for the given extension.
gfx::Image GetOmniboxIcon(const std::string& extension_id);
diff --git a/chrome/browser/extensions/platform_app_browsertest.cc b/chrome/browser/extensions/platform_app_browsertest.cc
index 5c0b3ac..164b8d7 100644
--- a/chrome/browser/extensions/platform_app_browsertest.cc
+++ b/chrome/browser/extensions/platform_app_browsertest.cc
@@ -24,6 +24,7 @@
#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/browser/ui/extensions/shell_window.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/url_constants.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_intents_dispatcher.h"
@@ -105,6 +106,36 @@ class LaunchReplyHandler {
base::WeakPtrFactory<LaunchReplyHandler> weak_ptr_factory_;
};
+// This class keeps track of tabs as they are added to the browser. It will be
+// "done" (i.e. won't block on Wait()) once |observations| tabs have been added.
+class TabsAddedNotificationObserver
+ : public content::WindowedNotificationObserver {
+ public:
+ explicit TabsAddedNotificationObserver(size_t observations)
+ : content::WindowedNotificationObserver(
+ chrome::NOTIFICATION_TAB_ADDED,
+ content::NotificationService::AllSources()),
+ observations_(observations) {
+ }
+
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE {
+ observed_tabs_.push_back(
+ content::Details<WebContents>(details).ptr());
+ if (observed_tabs_.size() == observations_)
+ content::WindowedNotificationObserver::Observe(type, source, details);
+ }
+
+ const std::vector<content::WebContents*>& tabs() { return observed_tabs_; }
+
+ private:
+ size_t observations_;
+ std::vector<content::WebContents*> observed_tabs_;
+
+ DISALLOW_COPY_AND_ASSIGN(TabsAddedNotificationObserver);
+};
+
const char kTestFilePath[] = "platform_apps/launch_files/test.txt";
} // namespace
@@ -324,8 +355,17 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, AppWithContextMenuClicked) {
}
IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DisallowNavigation) {
+ TabsAddedNotificationObserver observer(2);
+
ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunPlatformAppTest("platform_apps/navigation")) << message_;
+
+ observer.Wait();
+ ASSERT_EQ(2U, observer.tabs().size());
+ EXPECT_EQ(std::string(chrome::kExtensionInvalidRequestURL),
+ observer.tabs()[0]->GetURL().spec());
+ EXPECT_EQ("http://chromium.org/",
+ observer.tabs()[1]->GetURL().spec());
}
IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Iframes) {