15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Contains holistic tests of the bindings infrastructure 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/extensions/api/permissions/permissions_api.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_host.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/extensions/extension_test_message_listener.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_manager.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace extensions { 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace { 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass ExtensionBindingsApiTest : public ExtensionApiTest {}; 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) UnavailableBindingsNeverRegistered) { 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Test will request the 'storage' permission. 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PermissionsRequestFunction::SetIgnoreUserGestureForTests(true); 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest( 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "bindings/unavailable_bindings_never_registered")) << message_; 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExceptionInHandlerShouldNotCrash) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "bindings/exception_in_handler_should_not_crash", 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "page.html")) << message_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that an error raised during an async function still fires 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the callback, but sets chrome.runtime.lastError. 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// FIXME should be in ExtensionBindingsApiTest. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, LastError) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LoadExtension( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data_dir_.AppendASCII("browsertest").AppendASCII("last_error"))); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the ExtensionHost that is hosting our background page. 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ProcessManager* manager = 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::ExtensionHost* host = FindHostWithPath(manager, "/bg.html", 1); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->render_view_host(), "testLastError()", &result)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(result); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Regression test that we don't delete our own bindings with about:blank 56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// iframes. 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, AboutBlankIframe) { 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ResultCatcher catcher; 59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExtensionTestMessageListener listener("load", true); 60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("bindings") 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch .AppendASCII("about_blank_iframe"))); 63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(listener.WaitUntilSatisfied()); 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Extension* extension = LoadExtension( 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch test_data_dir_.AppendASCII("bindings") 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch .AppendASCII("internal_apis_not_on_chrome_object")); 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(extension); 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch listener.Reply(extension->id()); 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(catcher.GetNextResult()) << message_; 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch InternalAPIsNotOnChromeObject) { 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest( 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "bindings/internal_apis_not_on_chrome_object", 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "page.html")) << message_; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Tests that we don't override events when bindings are re-injected. 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Regression test for http://crbug.com/269149. 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, EventOverriding) { 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(RunExtensionTest("bindings/event_overriding")) << message_; 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace extensions 90