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