[go: nahoru, domu]

blob: 426805e330b5b4e2119ca02bd7dce2a854fe0bda [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "build/build_config.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_navigation_observer.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
#include "extensions/test/test_extension_dir.h"
namespace extensions {
// Failed run on ChromeOS CI builder. https://crbug.com/1245240
#if BUILDFLAG(IS_CHROMEOS)
#define MAYBE_GetViews DISABLED_GetViews
#else
#define MAYBE_GetViews GetViews
#endif
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_GetViews) {
ASSERT_TRUE(RunExtensionTest("get_views")) << message_;
}
class ExtensionApiTestWithoutAutomationController : public ExtensionApiTest {
public:
void SetUpInProcessBrowserTestFixture() override {
// This switch must be removed in SetUpInProcessBrowserTestFixture() instead
// of SetUpCommandLine() because BrowserTestBase::SetUp() adds the switch
// after SetUpCommandLine() is called.
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
base::CommandLine new_command_line(command_line->GetProgram());
base::CommandLine::SwitchMap switches = command_line->GetSwitches();
// Disable kDomAutomationController to avoid creating the V8 context for
// every frame. This interferes with the behavior we are trying to emulate
// for the regression test.
switches.erase(switches::kDomAutomationController);
for (const auto& it : switches)
new_command_line.AppendSwitchNative(it.first, it.second);
*command_line = new_command_line;
}
};
// Regression test for http://crbug.com/1349787.
IN_PROC_BROWSER_TEST_F(ExtensionApiTestWithoutAutomationController,
GetWebAccessibleExtensionView) {
ASSERT_TRUE(embedded_test_server()->Start());
ASSERT_TRUE(ui_test_utils::NavigateToURL(
browser(), embedded_test_server()->GetURL("/echo")));
TestExtensionDir test_dir;
test_dir.WriteManifest(R"({
"name": "GetViews Test",
"manifest_version": 2,
"version": "0.1",
"background": {"scripts": ["background.js"]},
"web_accessible_resources": ["page.html"]
})");
test_dir.WriteFile(FILE_PATH_LITERAL("background.js"), R"(
chrome.test.sendMessage('ready', function() {
var views = chrome.extension.getViews();
chrome.test.assertEq(2, views.length);
let paths = views.map((v) => v.location.pathname).sort();
chrome.test.assertEq(
['/_generated_background_page.html', '/page.html'], paths);
chrome.test.notifyPass();
});
)");
test_dir.WriteFile(FILE_PATH_LITERAL("page.html"), "<html></html>");
ResultCatcher result_catcher;
ExtensionTestMessageListener listener("ready", ReplyBehavior::kWillReply);
const Extension* extension = LoadExtension(test_dir.UnpackedPath());
ASSERT_TRUE(extension);
EXPECT_TRUE(listener.WaitUntilSatisfied());
auto* tab = chrome::AddSelectedTabWithURL(
browser(), extension->GetResourceURL("page.html"),
ui::PAGE_TRANSITION_LINK);
content::TestNavigationObserver observer(tab);
observer.Wait();
listener.Reply("ok");
EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message();
}
} // namespace extensions