• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
IN_PROC_BROWSER_TEST_F(ViewSourceTest,DoesBrowserRenderInViewSource)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)
IN_PROC_BROWSER_TEST_F(ViewSourceTest,DoesBrowserConsumeViewSourcePrefix)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.
IN_PROC_BROWSER_TEST_F(ViewSourceTest,ViewSourceInMenuEnabledOnANormalPage)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
IN_PROC_BROWSER_TEST_F(ViewSourceTest,ViewSourceInMenuDisabledOnAMediaPage)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.
IN_PROC_BROWSER_TEST_F(ViewSourceTest,ViewSourceInMenuDisabledWhileViewingSource)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
IN_PROC_BROWSER_TEST_F(ViewSourceTest,DISABLED_TestViewSourceReload)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