158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/stringprintf.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/win/windows_version.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/apps/app_browsertest_util.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/extension_test_message_listener.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/common/page_transition_types.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/browser_test_base.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace extensions { 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PlatformAppUrlRedirectorBrowserTest : public PlatformAppBrowserTest { 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Performs the following sequence: 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - installs the app |handler| (a relative path under the platform_apps 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // subdirectory); 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - navigates the current tab to the HTML page |lancher_page| (ditto); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - then waits for |handler| to launch and send back a |handler_ack_message|; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // - finally checks that the resulting app window count is as expected. 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The |launcher_page| is supposed to trigger a navigation matching one of the 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // url_handlers in the |handler|'s manifest, and thereby launch the |handler|. 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestNavigationInTab(const char* launcher_page, 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler, 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler_start_message); 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The same as above, but does not expect the |handler| to launch. Verifies 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // that it didn't, and that the navigation has opened in a new tab instead. 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestMismatchingNavigationInTab(const char* launcher_page, 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* success_tab_title, 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - installs the app |handler|; 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - opens the page |xhr_opening_page| in the current tab; 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - the page sends an XHR to a local resouce, whose URL matches one of the 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // url_handlers in |handler|; 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - waits until |xhr_opening_page| gets a response back and changes the tab's 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // title to a value indicating success/failure of the XHR; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // - verifies that no app windows have been opened, i.e. |handler| wasn't 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // launched even though its url_handlers match the URL. 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestNegativeXhrInTab(const char* xhr_opening_page, 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* success_tab_title, 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* failure_tab_title, 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Performs the following sequence: 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - installs the app |handler| (a relative path under the platform_apps 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // subdirectory); 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - loads and launches the app |launcher| (ditto); 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - waits for the |launcher| to launch and send back a |launcher_ack_message| 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // (to make sure it's not the failing entity, if the test fails overall); 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - waits for the |handler| to launch and send back a |handler_ack_message|; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // - finally checks that the resulting app window count is as expected. 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The |launcher| is supposed to trigger a navigation matching one of the 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // url_handlers in the |handler|'s manifest, and thereby launch the |handler|. 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestNavigationInApp(const char* launcher, 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_done_message, 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler, 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler_start_message); 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The same as above, but does not expect the |handler| to launch. Verifies 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // that it didn't, and that the navigation has opened in a new tab instead. 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestMismatchingNavigationInApp(const char* launcher, 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_done_message, 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler); 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - installs the |handler| app; 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - loads and launches the |launcher| app; 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - waits until the |launcher| sends back a |launcher_done_message|; 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - the launcher performs a navigation to a URL that mismatches the 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // |handler|'s url_handlers; 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - verifies that the |handler| hasn't been launched as a result of the 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // navigation. 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestNegativeNavigationInApp(const char* launcher, 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_done_message, 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler); 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - installs the app |handler|; 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - navigates the current tab to the HTML page |matching_target_page| with 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // page transition |transition|; 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // - waits for |handler| to launch and send back a |handler_start_message|; 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // - finally checks that the resulting app window count is as expected. 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestNavigationInBrowser(const char* matching_target_page, 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageTransition transition, 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler, 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler_start_message); 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Same as above, but does not expect |handler| to launch. This is used, e.g. 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // for form submissions, where the URL would normally match the url_handlers 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // but should not launch it. 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestNegativeNavigationInBrowser(const char* matching_target_page, 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageTransition transition, 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char* success_tab_title, 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler); 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Same as above, but expects the |mismatching_target_page| should not match 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // any of the |handler|'s url_handlers, and therefor not launch the app. 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestMismatchingNavigationInBrowser(const char* mismatching_target_page, 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageTransition transition, 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char* success_tab_title, 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler); 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::SetUpCommandLine( 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CommandLine* command_line) { 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PlatformAppBrowserTest::SetUpCommandLine(command_line); 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->AppendSwitch(::switches::kDisablePopupBlocking); 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) command_line->AppendSwitchASCII(::switches::kPrerenderMode, 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ::switches::kPrerenderModeSwitchValueEnabled); 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TODO(sergeygs): Factor out common functionality from TestXyz, 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TestNegativeXyz, and TestMismatchingXyz versions. 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TODO(sergeys): Return testing::AssertionErrors from these methods to 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// preserve line numbers and (if applicable) failure messages. 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestNavigationInTab( 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_page, 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler, 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler_start_message) { 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionTestMessageListener handler_listener(handler_start_message, false); 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser(), 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) embedded_test_server()->GetURL(base::StringPrintf( 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "/extensions/platform_apps/%s", launcher_page)), 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CURRENT_TAB, 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(handler_listener.WaitUntilSatisfied()); 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1U, GetAppWindowCount()); 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestMismatchingNavigationInTab( 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_page, 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* success_tab_title, 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler) { 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 success_title = base::ASCIIToUTF16(success_tab_title); 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WebContents* tab = 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::TitleWatcher title_watcher(tab, success_title); 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser(), 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) embedded_test_server()->GetURL(base::StringPrintf( 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "/extensions/platform_apps/%s", launcher_page)), 16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CURRENT_TAB, 17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 17158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(success_title, title_watcher.WaitAndGetTitle()); 17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1, browser()->tab_strip_model()->count()); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0U, GetAppWindowCount()); 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestNegativeXhrInTab( 17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_page, 17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* success_tab_title, 18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* failure_tab_title, 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler) { 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 success_title = base::ASCIIToUTF16(success_tab_title); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 failure_title = base::ASCIIToUTF16(failure_tab_title); 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WebContents* tab = 18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::TitleWatcher title_watcher(tab, success_title); 19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) title_watcher.AlsoWaitForTitle(failure_title); 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser(), 19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) embedded_test_server()->GetURL(base::StringPrintf( 19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "/extensions/platform_apps/%s", launcher_page)), 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CURRENT_TAB, 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(success_title, title_watcher.WaitAndGetTitle()); 20158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1, browser()->tab_strip_model()->count()); 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0U, GetAppWindowCount()); 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 20458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestNavigationInApp( 20658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher, 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_done_message, 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler, 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler_start_message) { 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionTestMessageListener handler_listener(handler_start_message, false); 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp(launcher, launcher_done_message); 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(handler_listener.WaitUntilSatisfied()); 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(2U, GetAppWindowCount()); 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 22258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestNegativeNavigationInApp( 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher, 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_done_message, 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler) { 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WindowedNotificationObserver observer( 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::Source<content::WebContentsDelegate>(browser())); 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp(launcher, launcher_done_message); 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.Wait(); 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1U, GetAppWindowCount()); 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestMismatchingNavigationInApp( 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher, 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* launcher_done_message, 24558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler) { 24658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 24758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WindowedNotificationObserver observer( 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_TAB_ADDED, 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::Source<content::WebContentsDelegate>(browser())); 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoadAndLaunchPlatformApp(launcher, launcher_done_message); 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.Wait(); 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1U, GetAppWindowCount()); 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(2, browser()->tab_strip_model()->count()); 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestNavigationInBrowser( 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* matching_target_page, 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageTransition transition, 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler, 26558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler_start_message) { 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionTestMessageListener handler_listener(handler_start_message, false); 27158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NavigateParams params( 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser(), 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) embedded_test_server()->GetURL(base::StringPrintf( 27558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "/extensions/platform_apps/%s", matching_target_page)), 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) transition); 27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(handler_listener.WaitUntilSatisfied()); 28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1U, GetAppWindowCount()); 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestNegativeNavigationInBrowser( 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* matching_target_page, 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageTransition transition, 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char* success_tab_title, 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler) { 28958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(StartEmbeddedTestServer()); 29058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InstallPlatformApp(handler); 29258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 success_title = base::ASCIIToUTF16(success_tab_title); 2944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::WebContents* tab = 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::TitleWatcher title_watcher(tab, success_title); 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NavigateParams params( 29958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser(), 30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) embedded_test_server()->GetURL(base::StringPrintf( 30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "/extensions/platform_apps/%s", matching_target_page)), 30258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) transition); 30358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 30458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_EQ(success_title, title_watcher.WaitAndGetTitle()); 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0U, GetAppWindowCount()); 30758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 30858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 30958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PlatformAppUrlRedirectorBrowserTest::TestMismatchingNavigationInBrowser( 31058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* mismatching_target_page, 31158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageTransition transition, 3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char* success_tab_title, 31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* handler) { 3144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestNegativeNavigationInBrowser( 3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mismatching_target_page, transition, success_tab_title, handler); 31658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 31858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a click on a regular link in a tab launches an app that has 31958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// matching url_handlers. 32058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 32158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ClickInTabIntercepted) { 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInTab( 32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launching_pages/click_link.html", 32758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple", 32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 32958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a click on a target='_blank' link in a tab launches an app that has 33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// matching url_handlers. 33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BlankClickInTabIntercepted) { 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInTab( 33958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launching_pages/click_blank_link.html", 34058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple", 34158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 34258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 34358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 34458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a call to window.open() in a tab launches an app that has 34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// matching url_handlers. 34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 34758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WindowOpenInTabIntercepted) { 3484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 3504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 35158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInTab( 35258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launching_pages/call_window_open.html", 35358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple", 35458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 35558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 35658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 35758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a click on a regular link in a tab launches an app that has 35858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// matching url_handlers. 35958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 36058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MismatchingClickInTabNotIntercepted) { 3614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 3624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 3634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 36458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestMismatchingNavigationInTab( 36558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launching_pages/click_mismatching_link.html", 36658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Mismatching link target loaded", 36758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple"); 36858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 36958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 37058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a click on target='_blank' link in an app's window launches 37158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// another app that has matching url_handlers. 37258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 37358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BlankClickInAppIntercepted) { 3744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 37758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInApp( 37858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launchers/click_blank_link", 37958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Launcher done", 38058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple", 38158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 38258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 38358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 38458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a call to window.open() in the app's foreground page launches 38558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// another app that has matching url_handlers. 38658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 38758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WindowOpenInAppIntercepted) { 3884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 3894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 39158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInApp( 39258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launchers/call_window_open", 39358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Launcher done", 39458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple", 39558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 39658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 39758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 39858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that an app with url_handlers does not intercept a mismatching 39958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// click on a target='_blank' link in another app's window. 40058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 40158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MismatchingWindowOpenInAppNotIntercepted) { 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 40558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestMismatchingNavigationInApp( 40658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launchers/call_mismatching_window_open", 40758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Launcher done", 40858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple"); 40958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 41058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 41158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a webview in an app can be navigated to a URL without interception 41258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// even when there are other (or the same) apps that have matching url_handlers. 41358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 41458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebviewNavigationNotIntercepted) { 4154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 41858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The launcher clicks on a link, which gets intercepted and launches the 41958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // handler. The handler also redirects an embedded webview to the URL. The 42058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // webview should just navigate without creating an endless loop of 42158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // navigate-intercept-launch sequences with multiplying handler's windows. 42258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // There should be 2 windows only: launcher's and handler's. 42358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInApp( 42458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launchers/click_blank_link", 42558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Launcher done", 42658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/navigate_webview_to_url", 42758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 42858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 42958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 43058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a webview in an app can be navigated to a URL without interception 43158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// even when there are other (or the same) apps that have matching url_handlers. 43258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 43358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MismatchingBlankClickInAppNotIntercepted) { 4344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 43758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The launcher clicks on a link, which gets intercepted and launches the 43858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // handler. The handler also redirects an embedded webview to the URL. The 43958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // webview should just navigate without creating an endless loop of 44058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // navigate-intercept-launch sequences with multiplying handler's windows. 44158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // There should be 2 windows only: launcher's and handler's. 44258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestMismatchingNavigationInApp( 44358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/launchers/click_mismatching_blank_link", 44458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Launcher done", 44558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple"); 44658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 44758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 44858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a URL entry in the omnibar launches an app that has matching 44958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// url_handlers. 45058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 45158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EntryInOmnibarIntercepted) { 4524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 45558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNavigationInBrowser( 45658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/common/target.html", 45758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PAGE_TRANSITION_TYPED, 45858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple", 45958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Handler launched"); 46058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 46158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 46258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that an app with url_handlers does not intercept a mismatching 46358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// URL entry in the omnibar. 46458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 46558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MismatchingEntryInOmnibarNotIntercepted) { 4664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 46958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestMismatchingNavigationInBrowser( 47058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/common/mismatching_target.html", 47158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PAGE_TRANSITION_TYPED, 4724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "Mismatching link target loaded", 47358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple"); 47458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 47558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 47658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a form submission in a page is never subject to interception 47758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// by apps even with matching url_handlers. 47858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 4794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FormSubmissionInTabNotIntercepted) { 4804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 4834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestMismatchingNavigationInTab( 4844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "url_handlers/launching_pages/submit_form.html", 4854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "Link target loaded", 48658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/simple"); 48758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 48858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 48958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a form submission in a page is never subject to interception 49058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// by apps even with matching url_handlers. 49158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 49258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) XhrInTabNotIntercepted) { 4934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined (OS_WIN) 4944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 4954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 49658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestNegativeXhrInTab( 49758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/xhr_downloader/main.html", 49858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "XHR succeeded", 49958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "XHR failed", 50058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "url_handlers/handlers/steal_xhr_target"); 50158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 50258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that a click on a prerendered link still launches. 504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PlatformAppUrlRedirectorBrowserTest, 505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PrerenderedClickInTabIntercepted) { 506cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined (OS_WIN) 507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) return; // Bug 301638 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestNavigationInTab( 510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "url_handlers/launching_pages/prerender_link.html", 511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "url_handlers/handlers/simple", 512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "Handler launched"); 513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 514cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 51558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace extensions 516