Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "content/browser/web_contents/web_contents_impl.h"
      6 #include "content/public/browser/web_contents.h"
      7 #include "content/shell/shell.h"
      8 #include "content/test/content_browser_test.h"
      9 #include "content/test/content_browser_test_utils.h"
     10 #include "content/test/net/url_request_abort_on_end_job.h"
     11 
     12 namespace content {
     13 
     14 typedef ContentBrowserTest WebKitBrowserTest;
     15 
     16 const char kAsyncScriptThatAbortsOnEndPage[] =
     17     "files/webkit/async_script_abort_on_end.html";
     18 
     19 // This is a browser test because it is hard to reproduce reliably in a
     20 // layout test without races. http://crbug.com/75604 deals with a request
     21 // for an async script which gets data in the response and immediately
     22 // after aborts. This test creates that condition, and it is passed
     23 // if chrome does not crash.
     24 
     25 IN_PROC_BROWSER_TEST_F(WebKitBrowserTest, AbortOnEnd) {
     26   ASSERT_TRUE(test_server()->Start());
     27   URLRequestAbortOnEndJob::AddUrlHandler();
     28   GURL url = test_server()->GetURL(kAsyncScriptThatAbortsOnEndPage);
     29 
     30   NavigateToURL(shell(), url);
     31 
     32   // If you are seeing this test fail, please strongly investigate the
     33   // possibility that http://crbug.com/75604 and
     34   // https://bugs.webkit.org/show_bug.cgi?id=71122 have reverted before
     35   // marking this as flakey.
     36   EXPECT_FALSE(shell()->web_contents()->IsCrashed());
     37 }
     38 
     39 // This is a browser test because the DumpRenderTree framework holds
     40 // onto a Document* reference that blocks this reproduction from
     41 // destroying the Document, so it is not a use after free unless
     42 // you don't have DumpRenderTree loaded.
     43 
     44 // TODO(gavinp): remove this browser_test if we can get good LayoutTest
     45 // coverage of the same issue.
     46 const char kXsltBadImportPage[] =
     47     "files/webkit/xslt-bad-import.html";
     48 IN_PROC_BROWSER_TEST_F(WebKitBrowserTest, XsltBadImport) {
     49   ASSERT_TRUE(test_server()->Start());
     50   URLRequestAbortOnEndJob::AddUrlHandler();
     51   GURL url = test_server()->GetURL(kXsltBadImportPage);
     52 
     53   NavigateToURL(shell(), url);
     54 
     55   EXPECT_FALSE(shell()->web_contents()->IsCrashed());
     56 }
     57 
     58 // This is a browser test because DumpRenderTree has a PrerendererClient
     59 // implementation, and the purpose of this test is to ensure that content_shell
     60 // does not crash when prerender elements are encountered with no Prererering
     61 // implementation supplied to WebKit.
     62 
     63 // TODO(gavinp,jochen): This browser_test depends on there not being a
     64 // prerendering client and prerendering platform provided by the test_shell.
     65 // But both will exist when we use content_shell to run layout tests. We must
     66 // then add a mechanism to start content_shell without these, or else this
     67 // test is not very interesting.
     68 const char kPrerenderNoCrashPage[] =
     69     "files/prerender/prerender-no-crash.html";
     70 IN_PROC_BROWSER_TEST_F(WebKitBrowserTest, PrerenderNoCrash) {
     71   ASSERT_TRUE(test_server()->Start());
     72   GURL url = test_server()->GetURL(kPrerenderNoCrashPage);
     73 
     74   NavigateToURL(shell(), url);
     75 
     76   EXPECT_FALSE(shell()->web_contents()->IsCrashed());
     77 }
     78 
     79 // This is a browser test because DumpRenderTree doesn't run nested message
     80 // loops. The failure case was that a nested message triggered from an element
     81 // that has signalled an error but had an open request would receive a body for
     82 // the request and crash/fail an assertion.
     83 const char kErrorBodyNoCrash[] =
     84     "files/error-body-no-crash.html";
     85 IN_PROC_BROWSER_TEST_F(WebKitBrowserTest, ErrorBodyNoCrash) {
     86   ASSERT_TRUE(test_server()->Start());
     87   GURL url = test_server()->GetURL(kErrorBodyNoCrash);
     88 
     89   NavigateToURL(shell(), url);
     90 
     91   EXPECT_FALSE(shell()->web_contents()->IsCrashed());
     92 }
     93 
     94 }  // namespace content
     95