16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (c) 2012 The Chromium Authors. All rights reserved. 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Use of this source code is governed by a BSD-style license that can be 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// found in the LICENSE file. 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Contains holistic tests of the bindings infrastructure 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "chrome/browser/extensions/api/permissions/permissions_api.h" 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "chrome/browser/extensions/extension_apitest.h" 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "chrome/browser/ui/browser.h" 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "chrome/test/base/ui_test_utils.h" 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "content/public/test/browser_test_utils.h" 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "extensions/browser/extension_host.h" 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "extensions/browser/extension_system.h" 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "extensions/browser/process_manager.h" 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "extensions/test/extension_test_message_listener.h" 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "extensions/test/result_catcher.h" 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennnamespace extensions { 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennnamespace { 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass ExtensionBindingsApiTest : public ExtensionApiTest {}; 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn UnavailableBindingsNeverRegistered) { 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // Test will request the 'storage' permission. 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PermissionsRequestFunction::SetIgnoreUserGestureForTests(true); 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(RunExtensionTest( 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn "bindings/unavailable_bindings_never_registered")) << message_; 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ExceptionInHandlerShouldNotCrash) { 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(RunExtensionSubtest( 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn "bindings/exception_in_handler_should_not_crash", 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn "page.html")) << message_; 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Tests that an error raised during an async function still fires 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the callback, but sets chrome.runtime.lastError. 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// FIXME should be in ExtensionBindingsApiTest. 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, LastError) { 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(LoadExtension( 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn test_data_dir_.AppendASCII("browsertest").AppendASCII("last_error"))); 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn // Get the ExtensionHost that is hosting our background page. 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn extensions::ProcessManager* manager = 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn extensions::ExtensionHost* host = FindHostWithPath(manager, "/bg.html", 1); 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool result = false; 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn host->render_view_host(), "testLastError()", &result)); 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn EXPECT_TRUE(result); 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Regression test that we don't delete our own bindings with about:blank 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// iframes. 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, AboutBlankIframe) { 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ResultCatcher catcher; 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ExtensionTestMessageListener listener("load", true); 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("bindings") 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn .AppendASCII("about_blank_iframe"))); 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(listener.WaitUntilSatisfied()); 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const Extension* extension = LoadExtension( 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn test_data_dir_.AppendASCII("bindings") 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn .AppendASCII("internal_apis_not_on_chrome_object")); 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(extension); 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn listener.Reply(extension->id()); 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(catcher.GetNextResult()) << message_; 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn InternalAPIsNotOnChromeObject) { 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(RunExtensionSubtest( 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn "bindings/internal_apis_not_on_chrome_object", 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn "page.html")) << message_; 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Tests that we don't override events when bindings are re-injected. 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Regression test for http://crbug.com/269149. 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, EventOverriding) { 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT_TRUE(RunExtensionTest("bindings/event_overriding")) << message_; 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} // namespace 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} // namespace extensions 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn