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