Home | History | Annotate | Download | only in tab_contents
      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 "base/strings/utf_string_conversions.h"
      6 #include "chrome/app/chrome_command_ids.h"
      7 #include "chrome/browser/ui/browser.h"
      8 #include "chrome/browser/ui/browser_commands.h"
      9 #include "chrome/browser/ui/tabs/tab_strip_model.h"
     10 #include "chrome/common/url_constants.h"
     11 #include "chrome/test/base/in_process_browser_test.h"
     12 #include "chrome/test/base/ui_test_utils.h"
     13 #include "content/public/browser/navigation_entry.h"
     14 #include "content/public/browser/notification_service.h"
     15 #include "content/public/browser/notification_types.h"
     16 #include "content/public/browser/render_view_host.h"
     17 #include "content/public/browser/web_contents.h"
     18 #include "content/public/test/browser_test_utils.h"
     19 #include "net/test/embedded_test_server/embedded_test_server.h"
     20 #include "url/gurl.h"
     21 
     22 namespace {
     23 const char kTestHtml[] = "/viewsource/test.html";
     24 const char kTestMedia[] = "files/media/pink_noise_140ms.wav";
     25 }
     26 
     27 typedef InProcessBrowserTest ViewSourceTest;
     28 
     29 // This test renders a page in view-source and then checks to see if the title
     30 // set in the html was set successfully (it shouldn't because we rendered the
     31 // page in view source).
     32 // Flaky; see http://crbug.com/72201.
     33 IN_PROC_BROWSER_TEST_F(ViewSourceTest, DoesBrowserRenderInViewSource) {
     34   ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
     35 
     36   // First we navigate to our view-source test page.
     37   GURL url(content::kViewSourceScheme + std::string(":") +
     38            embedded_test_server()->GetURL(kTestHtml).spec());
     39   ui_test_utils::NavigateToURL(browser(), url);
     40 
     41   // Check that the title didn't get set.  It should not be there (because we
     42   // are in view-source mode).
     43   EXPECT_NE(base::ASCIIToUTF16("foo"),
     44             browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
     45 }
     46 
     47 // This test renders a page normally and then renders the same page in
     48 // view-source mode. This is done since we had a problem at one point during
     49 // implementation of the view-source: prefix being consumed (removed from the
     50 // URL) if the URL was not changed (apart from adding the view-source prefix)
     51 IN_PROC_BROWSER_TEST_F(ViewSourceTest, DoesBrowserConsumeViewSourcePrefix) {
     52   ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
     53 
     54   // First we navigate to google.html.
     55   GURL url(embedded_test_server()->GetURL(kTestHtml));
     56   ui_test_utils::NavigateToURL(browser(), url);
     57 
     58   // Then we navigate to the same url but with the "view-source:" prefix.
     59   GURL url_viewsource(content::kViewSourceScheme + std::string(":") +
     60                       url.spec());
     61   ui_test_utils::NavigateToURL(browser(), url_viewsource);
     62 
     63   // The URL should still be prefixed with "view-source:".
     64   EXPECT_EQ(url_viewsource.spec(),
     65             browser()->tab_strip_model()->GetActiveWebContents()->
     66                 GetURL().spec());
     67 }
     68 
     69 // Make sure that when looking at the actual page, we can select "View Source"
     70 // from the menu.
     71 IN_PROC_BROWSER_TEST_F(ViewSourceTest, ViewSourceInMenuEnabledOnANormalPage) {
     72   ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
     73 
     74   GURL url(embedded_test_server()->GetURL(kTestHtml));
     75   ui_test_utils::NavigateToURL(browser(), url);
     76 
     77   EXPECT_TRUE(chrome::CanViewSource(browser()));
     78 }
     79 
     80 // For page that is media content, make sure that we cannot select "View Source"
     81 // See http://crbug.com/83714
     82 IN_PROC_BROWSER_TEST_F(ViewSourceTest, ViewSourceInMenuDisabledOnAMediaPage) {
     83   ASSERT_TRUE(test_server()->Start());
     84 
     85   GURL url(test_server()->GetURL(kTestMedia));
     86   ui_test_utils::NavigateToURL(browser(), url);
     87 
     88   const char* mime_type = browser()->tab_strip_model()->GetActiveWebContents()->
     89       GetContentsMimeType().c_str();
     90 
     91   EXPECT_STREQ("audio/wav", mime_type);
     92   EXPECT_FALSE(chrome::CanViewSource(browser()));
     93 }
     94 
     95 // Make sure that when looking at the page source, we can't select "View Source"
     96 // from the menu.
     97 IN_PROC_BROWSER_TEST_F(ViewSourceTest,
     98                        ViewSourceInMenuDisabledWhileViewingSource) {
     99   ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
    100 
    101   GURL url_viewsource(content::kViewSourceScheme + std::string(":") +
    102                       embedded_test_server()->GetURL(kTestHtml).spec());
    103   ui_test_utils::NavigateToURL(browser(), url_viewsource);
    104 
    105   EXPECT_FALSE(chrome::CanViewSource(browser()));
    106 }
    107 
    108 // Tests that reload initiated by the script on the view-source page leaves
    109 // the page in view-source mode.
    110 // Times out on Mac, Windows, ChromeOS Linux: crbug.com/162080
    111 IN_PROC_BROWSER_TEST_F(ViewSourceTest, DISABLED_TestViewSourceReload) {
    112   ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
    113 
    114   GURL url_viewsource(content::kViewSourceScheme + std::string(":") +
    115                       embedded_test_server()->GetURL(kTestHtml).spec());
    116 
    117   content::WindowedNotificationObserver observer(
    118       content::NOTIFICATION_LOAD_STOP,
    119       content::NotificationService::AllSources());
    120   ui_test_utils::NavigateToURL(browser(), url_viewsource);
    121   observer.Wait();
    122 
    123   ASSERT_TRUE(
    124       content::ExecuteScript(browser()->tab_strip_model()->GetWebContentsAt(0),
    125                              "window.location.reload();"));
    126 
    127   content::WindowedNotificationObserver observer2(
    128       content::NOTIFICATION_LOAD_STOP,
    129       content::NotificationService::AllSources());
    130   observer2.Wait();
    131   ASSERT_TRUE(browser()->tab_strip_model()->GetWebContentsAt(0)->
    132                   GetController().GetActiveEntry()->IsViewSourceMode());
    133 }
    134