| // Copyright (c) 2011 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 "base/command_line.h" |
| #include "base/path_service.h" |
| #include "base/utf_string_conversions.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/common/chrome_paths.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/common/url_constants.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "chrome/test/base/test_launcher_utils.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "content/browser/tab_contents/tab_contents.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/gfx/gl/gl_implementation.h" |
| |
| namespace { |
| |
| void SimulateGPUCrash(Browser* browser) { |
| LOG(ERROR) << "SimulateGPUCrash, before NavigateToURLWithDisposition"; |
| ui_test_utils::NavigateToURLWithDisposition(browser, |
| GURL(chrome::kChromeUIGpuCrashURL), NEW_FOREGROUND_TAB, |
| ui_test_utils::BROWSER_TEST_NONE); |
| browser->SelectPreviousTab(); |
| LOG(ERROR) << "SimulateGPUCrash, after CloseTab"; |
| } |
| |
| } // namespace |
| |
| class GPUCrashTest : public InProcessBrowserTest { |
| protected: |
| virtual void SetUpCommandLine(CommandLine* command_line) { |
| EnableDOMAutomation(); |
| InProcessBrowserTest::SetUpCommandLine(command_line); |
| |
| // OverrideGLImplementation and kDisableAcceleratedCompositing for |
| // OS_MACOSX are Taken verbatim from gpu_pixel_browsertest.cc and |
| // gpu_browsertest.cc. |
| EXPECT_TRUE(test_launcher_utils::OverrideGLImplementation( |
| command_line, |
| gfx::kGLImplementationOSMesaName)); |
| #if defined(OS_MACOSX) |
| // Accelerated compositing does not work with OSMesa. AcceleratedSurface |
| // assumes GL contexts are native. |
| command_line->AppendSwitch(switches::kDisableAcceleratedCompositing); |
| #endif |
| } |
| virtual void SetUpInProcessBrowserTestFixture() { |
| FilePath test_dir; |
| ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); |
| gpu_test_dir_ = test_dir.AppendASCII("gpu"); |
| } |
| FilePath gpu_test_dir_; |
| }; |
| |
| |
| IN_PROC_BROWSER_TEST_F(GPUCrashTest, Kill) { |
| ui_test_utils::DOMMessageQueue message_queue; |
| |
| ui_test_utils::NavigateToURL( |
| browser(), |
| ui_test_utils::GetFileUrlWithQuery( |
| gpu_test_dir_.AppendASCII("webgl.html"), "query=kill")); |
| SimulateGPUCrash(browser()); |
| |
| std::string m; |
| ASSERT_TRUE(message_queue.WaitForMessage(&m)); |
| EXPECT_EQ("\"SUCCESS\"", m); |
| } |
| |
| |
| IN_PROC_BROWSER_TEST_F(GPUCrashTest, WebkitLoseContext) { |
| ui_test_utils::DOMMessageQueue message_queue; |
| |
| ui_test_utils::NavigateToURL( |
| browser(), |
| ui_test_utils::GetFileUrlWithQuery( |
| gpu_test_dir_.AppendASCII("webgl.html"), |
| "query=WEBKIT_lose_context")); |
| |
| std::string m; |
| ASSERT_TRUE(message_queue.WaitForMessage(&m)); |
| EXPECT_EQ("\"SUCCESS\"", m); |
| } |