Chromium Code Reviews| Index: chrome/browser/extensions/platform_app_browsertest.cc |
| diff --git a/chrome/browser/extensions/platform_app_browsertest.cc b/chrome/browser/extensions/platform_app_browsertest.cc |
| index 636ee305a463e099b79fa2c63f17ca94aa99fc41..8ecde65a705abd381e8f34c1b835afbbb7ec4ee3 100644 |
| --- a/chrome/browser/extensions/platform_app_browsertest.cc |
| +++ b/chrome/browser/extensions/platform_app_browsertest.cc |
| @@ -19,6 +19,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" |
| @@ -99,6 +100,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 : |
|
Lei Zhang
2012/09/28 18:50:31
nit: I think the linter will be happier if you put
|
| + 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 |
| @@ -318,8 +349,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(chrome::kExtensionInvalidRequestURL, |
| + observer.tabs()[0]->GetURL().spec()); |
| + EXPECT_EQ("http://chromium.org/", |
| + observer.tabs()[1]->GetURL().spec()); |
| } |
| IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, Iframes) { |