// Copyright 2013 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 "chrome/browser/extensions/browsertest_util.h"

#include "base/strings/string_number_conversions.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/extensions/test_extension_dir.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "testing/gtest/include/gtest/gtest-spi.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace extensions {
namespace {

// TODO(jyasskin): It should be possible to test extensions without
// inheriting from the monolithic ExtensionBrowserTest.
class ExtensionBrowsertestUtilTest : public ExtensionBrowserTest {
};

IN_PROC_BROWSER_TEST_F(ExtensionBrowsertestUtilTest,
                       ExecuteScriptInBackground) {
  TestExtensionDir ext_dir;
  ext_dir.WriteManifest(
      "{\n"
      "  \"name\": \"ExecuteScript extension\",\n"
      "  \"version\": \"0.1\",\n"
      "  \"manifest_version\": 2,\n"
      "  \"background\": {\"scripts\": [\"background.js\"]}\n"
      "}\n");
  ext_dir.WriteFile(FILE_PATH_LITERAL("background.js"), "");
  const Extension* extension = LoadExtension(ext_dir.unpacked_path());
  ASSERT_TRUE(extension);
  EXPECT_EQ(extension->id(),
            browsertest_util::ExecuteScriptInBackgroundPage(
                profile(),
                extension->id(),
                "window.domAutomationController.send(chrome.runtime.id);"));

  // This test checks that executing a script doesn't block the browser process.
  EXPECT_EQ(base::IntToString(browser()->tab_strip_model()->count()),
            browsertest_util::ExecuteScriptInBackgroundPage(
                profile(),
                extension->id(),
                "chrome.tabs.query({}, function(result) {\n"
                "  window.domAutomationController.send('' + result.length);\n"
                "});"));

  // An argument that isn't a string should cause a failure, not a hang.
  EXPECT_NONFATAL_FAILURE(browsertest_util::ExecuteScriptInBackgroundPage(
                              profile(),
                              extension->id(),
                              "window.domAutomationController.send(3);"),
                          "send(3)");
}

}  // namespace
}  // namespace extensions
