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