1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/command_line.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/extensions/extension_apitest.h" 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_service.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/extensions/extension_webnavigation_api.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser.h" 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/chrome_switches.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/test/ui_test_utils.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/tab_contents.h" 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigation) { 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen switches::kEnableExperimentalExtensionApis); 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/api")) << message_; 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 24dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationClientRedirect) { 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen switches::kEnableExperimentalExtensionApis); 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/clientRedirect")) << message_; 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 33dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationForwardBack) { 34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitch( 35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch switches::kEnableExperimentalExtensionApis); 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/forwardBack")) << message_; 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 42dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationIFrame) { 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableExperimentalExtensionApis); 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/iframe")) << message_; 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 51dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationOpenTab) { 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableExperimentalExtensionApis); 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/openTab")) << message_; 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 60dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationReferenceFragment) { 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableExperimentalExtensionApis); 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/referenceFragment")) << message_; 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 69dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationSimpleLoad) { 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableExperimentalExtensionApis); 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/simpleLoad")) << message_; 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 78dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationFailures) { 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableExperimentalExtensionApis); 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/failures")) << message_; 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationUserAction) { 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CommandLine::ForCurrentProcess()->AppendSwitch( 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switches::kEnableExperimentalExtensionApis); 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FrameNavigationState::set_allow_extension_scheme(true); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for the extension to set itself up and return control to us. 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(RunExtensionTest("webnavigation/userAction")) << message_; 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ResultCatcher catcher; 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionService* service = browser()->profile()->GetExtensionService(); 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Extension* extension = 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service->GetExtensionById(last_loaded_extension_id_, false); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GURL url = extension->GetResourceURL("a.html"); 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui_test_utils::NavigateToURL(browser(), url); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen url = extension->GetResourceURL("b.html"); 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This corresponds to "Open link in new tab". 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->GetSelectedTabContents()->OpenURL( 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen url, GURL(), NEW_BACKGROUND_TAB, PageTransition::LINK); 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 111