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 "chrome/browser/extensions/browsertest_util.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_dir.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest-spi.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace extensions {
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace {
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TODO(jyasskin): It should be possible to test extensions without
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// inheriting from the monolithic ExtensionBrowserTest.
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ExtensionBrowsertestUtilTest : public ExtensionBrowserTest {
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionBrowsertestUtilTest,
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       ExecuteScriptInBackground) {
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TestExtensionDir ext_dir;
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ext_dir.WriteManifest(
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "{\n"
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "  \"name\": \"ExecuteScript extension\",\n"
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "  \"version\": \"0.1\",\n"
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "  \"manifest_version\": 2,\n"
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "  \"background\": {\"scripts\": [\"background.js\"]}\n"
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "}\n");
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ext_dir.WriteFile(FILE_PATH_LITERAL("background.js"), "");
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const Extension* extension = LoadExtension(ext_dir.unpacked_path());
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(extension);
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(extension->id(),
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            browsertest_util::ExecuteScriptInBackgroundPage(
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                profile(),
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                extension->id(),
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "window.domAutomationController.send(chrome.runtime.id);"));
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // This test checks that executing a script doesn't block the browser process.
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_EQ(base::IntToString(browser()->tab_strip_model()->count()),
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            browsertest_util::ExecuteScriptInBackgroundPage(
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                profile(),
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                extension->id(),
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "chrome.tabs.query({}, function(result) {\n"
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "  window.domAutomationController.send('' + result.length);\n"
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "});"));
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // An argument that isn't a string should cause a failure, not a hang.
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_NONFATAL_FAILURE(browsertest_util::ExecuteScriptInBackgroundPage(
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              profile(),
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              extension->id(),
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              "window.domAutomationController.send(3);"),
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                          "send(3)");
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace extensions
61