summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/extension_browsertests_misc.cc17
-rw-r--r--chrome/browser/extensions/extension_host.cc8
-rw-r--r--chrome/browser/extensions/extension_webglbackground_apitest.cc9
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/test/data/extensions/api_test/webglbackground/manifest.json6
-rw-r--r--chrome/test/data/extensions/api_test/webglbackground/test.html9
-rw-r--r--webkit/glue/webpreferences.cc2
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