blob: a7d2afa0abc9fadc6350abb86a2fe0df8391cb65 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/command_line.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_webnavigation_api.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/render_view_context_menu.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "net/base/mock_host_resolver.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
#include "webkit/glue/context_menu.h"
namespace {
class TestRenderViewContextMenu : public RenderViewContextMenu {
public:
TestRenderViewContextMenu(TabContents* tab_contents,
const ContextMenuParams& params)
: RenderViewContextMenu(tab_contents, params) {
}
virtual ~TestRenderViewContextMenu() {}
private:
virtual void PlatformInit() {}
virtual bool GetAcceleratorForCommandId(int, ui::Accelerator*) {
return false;
}
DISALLOW_COPY_AND_ASSIGN(TestRenderViewContextMenu);
};
} // namespace
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigation) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_api.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationGetFrame) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_getFrame.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationClientRedirect) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_clientRedirect.html"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationServerRedirect) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
host_resolver()->AddRule("*", "127.0.0.1");
ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_serverRedirect.html"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationForwardBack) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_forwardBack.html"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationIFrame) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_iframe.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationOpenTab) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_openTab.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationReferenceFragment) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_referenceFragment.html"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationSimpleLoad) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_simpleLoad.html")) << message_;
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationFailures) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_failures.html")) << message_;
}
// Fails almost consistently on Mac only. http://crbug.com/94932
#if defined(OS_MACOSX)
#define MAYBE_WebNavigationUserAction FAILS_WebNavigationUserAction
#else
#define MAYBE_WebNavigationUserAction WebNavigationUserAction
#endif
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_WebNavigationUserAction) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
FrameNavigationState::set_allow_extension_scheme(true);
// Wait for the extension to set itself up and return control to us.
ASSERT_TRUE(
RunExtensionSubtest("webnavigation", "test_userAction.html")) << message_;
ResultCatcher catcher;
ExtensionService* service = browser()->profile()->GetExtensionService();
const Extension* extension =
service->GetExtensionById(last_loaded_extension_id_, false);
GURL url = extension->GetResourceURL("userAction/a.html");
ui_test_utils::NavigateToURL(browser(), url);
// This corresponds to "Open link in new tab".
TabContents* tab = browser()->GetSelectedTabContents();
ContextMenuParams params;
params.is_editable = false;
params.media_type = WebKit::WebContextMenuData::MediaTypeNone;
params.page_url = url;
params.frame_id =
ExtensionWebNavigationTabObserver::Get(tab)->
frame_navigation_state().GetMainFrameID();
params.link_url = extension->GetResourceURL("userAction/b.html");
TestRenderViewContextMenu menu(tab, params);
menu.Init();
menu.ExecuteCommand(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB);
ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
}