diff options
7 files changed, 51 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extension_browsertests_misc.cc b/chrome/browser/extensions/extension_browsertests_misc.cc index d9828a1..f554d11 100644 --- a/chrome/browser/extensions/extension_browsertests_misc.cc +++ b/chrome/browser/extensions/extension_browsertests_misc.cc @@ -173,6 +173,23 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, TabContents) { EXPECT_TRUE(result); } +// Tests that GPU-related WebKit preferences are set for extension background +// pages. See http://crbug.com/64512. +IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WebKitPrefsBackgroundPage) { + ASSERT_TRUE(LoadExtension( + test_data_dir_.AppendASCII("good").AppendASCII("Extensions") + .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") + .AppendASCII("1.0.0.0"))); + + ExtensionProcessManager* manager = + browser()->profile()->GetExtensionProcessManager(); + ExtensionHost* host = FindHostWithPath(manager, "/backgroundpage.html", 1); + WebPreferences prefs = host->GetWebkitPrefs(); + ASSERT_FALSE(prefs.experimental_webgl_enabled); + ASSERT_FALSE(prefs.accelerated_compositing_enabled); + ASSERT_FALSE(prefs.accelerated_2d_canvas_enabled); +} + // Tests that we can load page actions in the Omnibox. IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, PageAction) { ASSERT_TRUE(test_server()->Start()); diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc index 0a2ea985..f052573 100644 --- a/chrome/browser/extensions/extension_host.cc +++ b/chrome/browser/extensions/extension_host.cc @@ -487,6 +487,14 @@ WebPreferences ExtensionHost::GetWebkitPrefs() { extension_host_type_ == ViewType::EXTENSION_INFOBAR) webkit_prefs.allow_scripts_to_close_windows = true; + // Disable anything that requires the GPU process for background pages. + // See http://crbug.com/64512 and http://crbug.com/64841. + if (extension_host_type_ == ViewType::EXTENSION_BACKGROUND_PAGE) { + webkit_prefs.experimental_webgl_enabled = false; + webkit_prefs.accelerated_compositing_enabled = false; + webkit_prefs.accelerated_2d_canvas_enabled = false; + } + // TODO(dcheng): incorporate this setting into kClipboardPermission check. webkit_prefs.javascript_can_access_clipboard = true; diff --git a/chrome/browser/extensions/extension_webglbackground_apitest.cc b/chrome/browser/extensions/extension_webglbackground_apitest.cc new file mode 100644 index 0000000..9e7701c --- /dev/null +++ b/chrome/browser/extensions/extension_webglbackground_apitest.cc @@ -0,0 +1,9 @@ +// Copyright (c) 2010 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/extension_apitest.h" + +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebGLBackground) { + ASSERT_TRUE(RunExtensionTest("webglbackground")) << message_; +} diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index a8799db..162edf9 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -2051,6 +2051,7 @@ 'browser/extensions/extension_test_message_listener.h', 'browser/extensions/extension_toolbar_model_browsertest.cc', 'browser/extensions/extension_tts_apitest.cc', + 'browser/extensions/extension_webglbackground_apitest.cc', 'browser/extensions/extension_webnavigation_apitest.cc', 'browser/extensions/extension_webrequest_apitest.cc', 'browser/extensions/extension_websocket_apitest.cc', diff --git a/chrome/test/data/extensions/api_test/webglbackground/manifest.json b/chrome/test/data/extensions/api_test/webglbackground/manifest.json new file mode 100644 index 0000000..1bc8f4f --- /dev/null +++ b/chrome/test/data/extensions/api_test/webglbackground/manifest.json @@ -0,0 +1,6 @@ +{ + "name": "chrome.webglbackground", + "version": "0.1", + "description": "tests access to WebGL from a background page", + "background_page": "test.html" +} diff --git a/chrome/test/data/extensions/api_test/webglbackground/test.html b/chrome/test/data/extensions/api_test/webglbackground/test.html new file mode 100644 index 0000000..05e543c --- /dev/null +++ b/chrome/test/data/extensions/api_test/webglbackground/test.html @@ -0,0 +1,9 @@ +<canvas></canvas> +<script> +chrome.test.runTests([ + function checkForWebGL() { + chrome.test.assertEq(null, document.getElementsByTagName("canvas")[0].getContext("experimental-webgl")); + chrome.test.succeed(); + } +]); +</script> diff --git a/webkit/glue/webpreferences.cc b/webkit/glue/webpreferences.cc index afc39bd..c6c32e7 100644 --- a/webkit/glue/webpreferences.cc +++ b/webkit/glue/webpreferences.cc @@ -142,7 +142,7 @@ void WebPreferences::Apply(WebView* web_view) const { // Enable experimental WebGL support if requested on command line // and support is compiled in. bool enable_webgl = - WebRuntimeFeatures::isWebGLEnabled() || experimental_webgl_enabled; + WebRuntimeFeatures::isWebGLEnabled() && experimental_webgl_enabled; settings->setExperimentalWebGLEnabled(enable_webgl); // Display colored borders around composited render layers if requested |